2008/11/16

Plurk - API,Robot,兼談 Karma

  對於懂一點程式的重度使用者來說,API 是讓服務更好玩的必備工具。然而或許因為 Plurk 本身還在頻繁修改的階段,它遲遲沒有公佈官方的 API。這其實不太影響網路上的高手們。基於 Plurk 是一個大量應用 AJAX/JSON 的網站,其傳輸參數與內容很早就被分析出來,並包裝成多種不同語言的 API,以非官方的型態發行。目前已公開的 API 有 PHPPerlC#Python 等版本。

  懂得運用 API 之後,可以做出多種 Widget、附加工具或系統,例如之前提過的 Karma Trends@fortelinPlinkPlaink 等等。其中一種有趣應用是寫出能自動發出 plurk 的工具,俗稱 robot。其意為一個坐在電腦前的機器人,能代替真人發文聊天。在我的 Plurk 朋友清單當中,最早寫出這玩意兒的是 @Faryne。之後 @yongwei 跟我都各寫了一支出來。

  要機器人發訊息很容易,問題是訊息內容要輸入什麼。如果每一則訊息都是人力去指定的,那麼機器人就失去其作用,不如本人自己坐下來敲鍵盤。@Faryne 想到第一個主意:讓他的機器人進行自動報時。很不幸地,這個點子不被市場(?)接受。大家顯然不太喜歡每個整點都看到他出來跳香蕉舞。在一片要將他取消好友的威脅之下,@Faryne 的機器人黯然退場。

  愛看新聞的 @yongwei 想到第二個主意:RSS 新聞播報器。基於 @yongwei 的個人喜好,這支機器人廿四小時會抓不同的 news feed 回來發佈。目前他(指機器人)共有四十幾位朋友與三十幾位粉絲,收視率不錯。唯一的缺憾是觀眾無法自行決定哪些新聞要看、哪些不看。比方說像 SQL Server CentralASP.NET 就不是人人嚥得下去。

  我則打了最安全的一張牌:氣象預報。每天一早先上中央氣象局 把當日北中南各取一地的氣溫與降雨機率預測值抓回來,重新組合成一則訊息之後發出去。後來追加農民曆的功能,包含喜財神方位與當日沖煞,趣味性大於實用性。截至目前為止,反應還不惡。而且有些朋友似乎挺樂於逗弄機器人,因為它不能回嘴。(汗)

  完成機器人之後,有個實驗就容易做了。我註冊一個全新的帳號,先填妥各種個人資訊與上傳大頭照,karma 很快就超過 10。接著讓機器人每天定時發出一則 plurk,不交朋友也不回應。
在這樣的狀況下約經過一個月,機器人的 karma 就到達 40。意即對於一個低用量的用戶,要越過可以修改暱稱或標題的門檻,其實是容易的。

  另一個常見對機器人的期待也和 karma 有關。許多人都覺得,擁有機器人之後,就可以輕輕鬆鬆增加 karma,即使一段時間不上線,karma 也不致暴跌,甚至還會上升。這個說法其實對也不對。要說明這一點,必須先簡單介紹一下 Plurk 計算 karma 的週期原則:

  Karma 每四個小時結算一次(註:4 的整倍數點,即四點、八點、十二點……)。一天廿四小時包含六個結算點,理想上每個區間都有發出 plurk 的話,Karma 會穩定上升。但是人總要睡覺,而合理的睡眠時間是八小時,因此一天只要發出四則 plurk 即可保持只升不降。從前面機器人的例子可以知道,這個“四則”的門檻是上限而非下限。Karma 低於 40 的人,一天只需要一則。Karma 更高的人,每一次扣點抵掉一至二則 plurk(不考慮獲得 response 的情形),所以每天必須發足二至三則。達到涅槃之後當然就更不用說了,四則 plurk 都必須發齊,否則很快會跌回 80 以下。

  低 karma 的人復原很快,所以會擔心 karma 的人,通常意味著數值已經有一定水準。高 karma 需要高 plurk 量來維持,但是靠機器人發大量的 plurk,朋友跟粉絲們看了不會煩嗎?或者直接這麼問:有什麼內容是天天定時發四次,而且大家都知道不是你本人,還能忍受著不將你 unfollow 甚至從朋友清單中移除的呢?別忘了,被朋友 unfollow 或移除,都是會扣 karma 的。屆時,賺 karma 的目的沒達成,反倒先扣了一堆。

註一:@gorimaru 也有一支專挑四整倍數點發噗的機器人,噗文內容一律是:「Karma Control(全自動)」。看了他 10/22 之前的河道,我只能猜想日本人的忍受力真強。

註二:Plurk 在 9/13~9/17 之間調整了數次 Karma 計算公式。最終版的公式對於短暫 plurk 間斷已不會太過敏感。簡單來說,使用者不用再擔心前述每四小時要發一次 plurk 的規則。即使中間有漏發,也只會先進入正負零的狀態。必須要閒置夠長時間,才會開始調降。

註三:Plurk 在 11/12 將 user profile page 的網址由「http://www.plurk.com/user/(userid)」縮短為「http://www.plurk.com/(userid)」。這個動作造成大量 Greasemonkey User Script 失靈,Plurk Perl API 掛點。前者必須靠那些 User Script 的原作者自行更新,後者我個人做了修正。修改部份如下:

--- Plurk.pm.0.02 2008-07-10 07:46:06.000000000 +0800
+++ Plurk.pm.fix 2008-11-14 17:03:59.000000000 +0800
@@ -251,8 +251,21 @@
croak "Login for $name failed, no cookie returned"
unless $ok;

- $self->_path_for( home => $resp->header( 'Location' )
- || "/user/$name" );
+# * 2008/11/12 modified by @Sorry
+# Plurk alters 'http://www.plurk.com/user/(userid)'
+# to 'http://www.plurk.com/(userid)'
+ if($resp->header('Location') =~ /^http:\/\/[^\/]+(\/.*)$/)
+ {
+ $self->_path_for(home => $1);
+ }
+ elsif($resp->header('Location') =~ /^\/.*$/)
+ {
+ $self->_path_for(home => $resp->header('Location'));
+ }
+ else
+ {
+ $self->_path_for(home => "/$name");
+ }

$self->_parse_user_home;
$self->state( 'login' );

廣告:按 這裡 可以註冊 Plurk 帳號,順便讓我賺個推薦數吧。:D

17 則留言:

阿維 提到...

謝謝Sorry老大也介紹了我的機器人 :)

vdpolg 提到...

逗弄機器人 www.plurkpix.com/pix/oh.gif
(rolf)

SKL 提到...

前幾天 cookie 改名了,

這邊也要改一下 XD

--- Plurk.pm.old 2009-03-24 15:24:15.000000000 +0800
+++ Plurk.pm 2009-03-24 15:26:53.000000000 +0800
@@ -247,7 +247,7 @@
);

my $ok = 0;
- $self->_cookies->scan( sub { $ok++ if $_[1] eq 'plurkcookie' } );
+ $self->_cookies->scan( sub { $ok++ if $_[1] eq 'plurkcookie1' } );
croak "Login for $name failed, no cookie returned"
unless $ok;

SKL 提到...

抱歉,我剛剛才注意到原來有在新的一篇寫過了 Orz

匿名 提到...

感謝你的分享,不知道這個 patch 回 WWW::Plurk 了嗎?

Sorry 提到...

沒有。我把 patch 寄給了 Andy Armstrong,不過他沒回應,而 Plurk API Wiki 又一直連不上,所以現在也不曉得能怎麼辦。

closer 提到...

隨便在網路上搜尋找到這兒....

我也用 C# 幫我老婆寫了一隻機器人。

基本上,想要維持 Karma 而發的噗,就算是私密噗也是 OK 的。所以我的機器人可以設定 limit_to 清單。

但要 limit_to 誰呢?我老婆的做法是把機器人 ID(例如 karma_trend)加進去。這樣就不會打擾朋友了。

FYI.

MarlboroMoo 提到...

小弟用 shell script 生了個 commnd-line 的 tool 出來, 目前還只能 post 而已, 哈哈. curl 真的很好用勒.

家豪(blueghost) 提到...

hi,老大
想請問您提及有關農民曆的資訊
是從哪裡取得呢,小弟遍尋不著
是否可以介紹一下

感謝

Sorry 提到...

先前有一個叫易袁堂的網站有提供每月農民曆,我先到那邊列出幾個月的資料,自行從中分析出規律後,再寫程式一次建立一年份的曆表讓機器人去讀。

匿名 提到...

想維持karma??可試試米窩噗浪
http://www.maiio.net

Sorry 提到...

我覺得會用米窩的人,一定都沒看我文章主文的最後一段。

Rocksan 提到...

我也有朋友用米窩,但是後來真不勝其煩呀,也分不清是本人還是機器人,就只好把她的unfollow,米窩的文章有時候會讓人哭笑不得,一個女生分享如何讓男人持久的文章(笑

匿名 提到...

請問,如果使用php設計.要如何bot 能在24H中運作? 難道要開著網頁不關嗎?

Sorry 提到...

據我所知,PHP 可以像 shell script 那樣執行,並不是只能以網頁的方式存在。不過因為我不懂 PHP,所以實際的啟動方式就不清楚了。

風痕影 提到...

給樓上的匿名人士,如果你的主機是 Unix-like 系統,可以配合 Crontab 定時執行 PHP

之前有朋友問過一位噗浪機器人作者,他的作法則是直接寫成無限迴圈,但迴圈中會判斷目前的時間決定要不要繼續執行(當然這樣 time out 就必須設成無限

PHP5 Developer 提到...

Thanks for this information which is really useful for me.