在 Plurk 看到一些內容、連結, 想要先收藏起來, 最快的方式就是點 "喜歡"(Like), 但是 Plurk 的 "喜歡" 只能在自己的河道上點, 若是透過 RSS 看, 點過去的頁面都是那句話的 網頁連結頁, 想要標註起來的話, 需要回自己的河道, 然後想辦法 拉到 & 找到 那句話, 再點選加入"喜歡"~ (話說, Plurk 的河道要拉到幾天前的話, 非常困難阿~)
有這個困擾的人似乎不只有我, 但是又不想寫個程式, 讓人輸入自己的帳號、密碼、連結, 幫他做登入 & 加入 "喜歡" 的動作 (安全性問題).
於是最好的解法就是用 JavaScript Bookmarklet 的方法來達成, 所以著手研究看看該怎麼送資料.
-
想直接取用此 Bookmarklet 的, 可直接將此連結
Plurk Like
, 拉到瀏覽器 Toolbar 即可使用.(目前只能於 Plurk 單一連結頁面使用)
Plurk 加入 "喜歡" 流程
- Plurk 在點選"喜歡"
- 會用 Ajax 發送 POST 到 "http://www.plurk.com/Favorite/set", 並帶 favorite=true、plurk_id、token 參數進去.
- 接收回傳 JSON: {"plurk_id": xxx, "favorite": true} 就是成功寫入.
- 所以只要找到 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
使用方式
- 將此
Plurk Like
加到 我的最愛, 或瀏覽器 Toolbar. - 於 Plurk 單一網頁時, 點選即會自動加入自己 Plurk 的 "喜歡" 中. (不會秀出任何加入完成的訊息).
- 若有 Bug 或者改良的更好的版本, 還請回報讓小弟更新. 🙂