幫 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

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
本篇發表於 Programming。將永久鏈結加入書籤。

幫 Plurk 在網頁連結 補上加入 "喜歡" 的功能 有 9 則回應

  1. 說道:

    你好,我加了你的語法到google chrome快捷書籤裡使用發現:
    到對方河道>點進單一plurk頁面>選書籤加喜歡>沒成功
    在自己的河道>點進單一plurk頁面>選書籤加喜歡>成功
    結論:似乎還是要在自己的河道裡才能使用喜歡功能…?
    還是我的步驟有哪裡使用錯誤了?
    謝謝

  2. Tsung 說道:

    我猜可能要有在追蹤才可以加入"喜歡".
    我之前加都是直接點 單一plurk頁面(因為我都是看 RSS), 然後就加入了.
    然後這些 單一plurk頁面, 我都有加入追蹤.
    不知道是否是這個問題? (把對方河道加入追蹤就好了?)

  3. 說道:

    不好意思,後來好像有成功了:
    當下按書籤加喜歡後,該單一頁面沒有出現愛心(喜歡)符號,重回對方主河道看該噗也依然沒有變化,回自己河道看該噗才會看見出現愛心符號…所以也就是說這語法大概需要點反應時間這樣?
    抱歉,打擾了&謝謝你的語法!^^

  4. Tsung 說道:

    喔喔, ok ok 🙂
    愛心符號是只有自己河道才會出現的, 我之前測法都是加入後, 直接進自己的"喜歡"去看, 能用就好囉~ 🙂
    我覺得應該不是需要"反應時間", 而是因為 plurk 是一直去跟 server 要資料(號稱 comet), 但是新的資料並不會即時送進來, 整頁 reload 就會看到了~ 🙂

  5. hepha 說道:

    很好,很方便

  6. RAR 說道:

    你好,不好意思,透過搜尋來到了這裡OAO
    那、那個啊,用這個方法有些噗也沒辦法加入喜歡呢
    有點困擾,能請問一下是有什麼限制嗎?謝謝

  7. Tsung 說道:

    好像不是 朋友或追蹤 的噗, 就不能加入喜歡.
    (就是在你河道上沒有的噗, 不能加入喜歡)

  8. RAR 說道:

    是追蹤的噗啊,在自己的河道上滑到以前那個噗的日期卻沒有,
    在那個人的頁面才找得到,
    有些可以加,有些加不起來OAO

  9. Tsung 說道:

    加不起來的那些, 可以找的出.... 是哪類的嗎?
    因為我自己試的是都可以加入, 但是規則是 Plurk 訂的, 所以我需要知道是 Plurk 的規則加不進去(這個我也沒辦法), 還是是程式問題. Orz..

發表迴響