X

幫 Plurk 在網頁連結 補上加入 "喜歡" 的功能

在 Plurk 看到一些內容、連結, 想要先收藏起來, 最快的方式就是點 "喜歡"(Like), 但是 Plurk 的 "喜歡" 只能在自己的河道上點, 若是透過 RSS 看, 點過去的頁面都是那句話的 網頁連結頁, 想要標註起來的話, 需要回自己的河道, 然後想辦法 拉到 & 找到 那句話, 再點選加入"喜歡"~ (話說, Plurk 的河道要拉到幾天前的話, 非常困難阿~)

有這個困擾的人似乎不只有我, 但是又不想寫個程式, 讓人輸入自己的帳號、密碼、連結, 幫他做登入 & 加入 "喜歡" 的動作 (安全性問題).

於是最好的解法就是用 JavaScript Bookmarklet 的方法來達成, 所以著手研究看看該怎麼送資料.

  • 想直接取用此 Bookmarklet 的, 可直接將此連結 Plurk Like, 拉到瀏覽器 Toolbar 即可使用.(目前只能於 Plurk 單一連結頁面使用)

Plurk 加入 "喜歡" 流程

  1. Plurk 在點選"喜歡"
  2. 會用 Ajax 發送 POST 到 "http://www.plurk.com/Favorite/set", 並帶 favorite=true、plurk_id、token 參數進去.
  3. 接收回傳 JSON: {"plurk_id": xxx, "favorite": true} 就是成功寫入.
  4. 所以只要找到 plurk_id 和 token 即可.

Plurk 的 plurk_id 和 token 取法

  • 假設 Plurk 的單一網頁連結: http://www.plurk.com/p/4rdwhs
  • plurk_id: 是 4rdwhs, 這個 plurk_id 是 36進位轉換的, 所以用 36進位即可轉回 API 所要的值, 4rdwhs 會轉成 287862976.
  • token: 則從網頁裡面的 id="login_link" 來抓取.

Plurk 加入 "喜歡" Bookmarklet

於是寫出加入 "喜歡" 的 Bookmarklet, 此程式於 AJAX POST 沒有特別處理 ActiveXObject, 所以 IE 應該是不會動. (Firefox、Chrome 都測過可以正常執行.)


javascript:(function(){
        var p = document.location.toString().split('/'); //var pid = document.location.toString().match(/\/[\d|\w]*$/).toString().replace('/', '');
        var pid36 = p[p.length - 1]; // plurk id 36
        var pid = parseInt(pid36,36); // plurk id
        var l=document.getElementById('login_link').toString();
        var t=l.match('token=.*').toString().replace('token=',''); // token
        var pdata = 'favorite=true&plurk_id=' + pid + '&token=' + t;
        var req = new XMLHttpRequest();
        req.open('POST', 'http://www.plurk.com/Favorites/set', true);
        req.setRequestHeader(
            'Content-Type',
            'application/x-www-form-urlencoded'
       );
       req.send(pdata);
})();

於是壓縮成一行, 將此行加 <a> 連結, 就可以產生 Bookmarklet: 
Plurk Like

使用方式

  1. 將此 Plurk Like 加到 我的最愛, 或瀏覽器 Toolbar.
  2. 於 Plurk 單一網頁時, 點選即會自動加入自己 Plurk 的 "喜歡" 中. (不會秀出任何加入完成的訊息).
  3. 若有 Bug 或者改良的更好的版本, 還請回報讓小弟更新. 🙂
Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post