06.25
沒想到閒談系列還可以寫到 III 。
我在二月左右因為無聊所以寫了一隻噗浪機器人叫做 rogabot (使用說明) ,因為不想讓人家覺得我在靠機器人賺 Karma ,所以另外註冊了一個帳號,和原本的帳號 roga 分開。
後來有一段時間我都丟著機器人不管。有長達大概三個月的時間,這隻程式每天自動去抓美女(新聞、氣象),然後每個小時都會定時派送訊息(發送政策可以看這邊)。
最近噗浪上面機器人變多了,會熱門主要是因為羊羊、無名挖挖挖這兩隻機器人的關係。因為它們會回應使用者的特性也讓機器人的應用更上了一層樓。而它們的好友也一夕之間爆增許多,好奇的人紛紛想知道這是怎麼回事。
不過吊詭的是,一陣子之後,開始有不同的聲音出來了,像是有人覺得機器人很無聊,有人覺得羊羊沒用,找不到答案時老是回答那幾句話,也有人覺得河道上機器人氾濫。
基本上我認為使用者和開發者都有責任讓訊息不要氾濫。畢竟每個人都會希望得到的是有用的資訊,舉例而言:世界最大的 Google 搜尋引擎會這麼有價值,原因來自於使用者可以透過搜尋得到他想要得答案。。而 MS 更是用「決策引擎」來稱呼他們新推出的 Bing 搜尋引擎,因為他們認為 Bing 可以幫使用者找出最佳的解答(結果大家都用來找影片)。
在噗浪上面,我都認為機器人應該要留給使用者更多空間,讓使用者自己決定要不要讓機器人參與、答覆。
舉例來說:當使用者想頻繁玩弄機器人的時候,應該要發私人訊息給機器人,而非讓測試訊息佔滿河道,這樣一來機器人訊息就不會影響到其他使用者。對開發者來說,可以做的事情更多了,但第一件應該要做的事情永遠都是「動詞過濾」。也就是針對使用者發出的訊息進行偵測,只回應使用者希望機器人回應的噗,而不是隨便亂入,隨便回應。
基本上,到這邊技術門檻都很低,也是每個機器人應該具備的功能,我不是很欣賞某些到處亂入的機器人,因為亂發送垃圾訊息和發送垃圾信有什麼兩樣呢?再者就是回應的內容是否有價值,我認為把問題交給搜尋引擎去回答並不是很負責任的作法。畢竟要知道搜尋的結果可以自己去查就可以了,機器人應該要提供更貼心的服務,而且因為即時交談畫面的特性,回覆內容必須是過濾過的,而且精簡,不會影響版面閱讀(例如不要回覆一長串文字都是連結),在同一則噗裡面也不應該重複回應。
當然,開發者所寫的機器人不見得都有語意分析的能力,所以常常會答非所問。事實上要實做一個語意引擎非常困難。但只要蒐集到夠多的資料,加上夠快的 CPU (以及彆腳的判斷),針要回答一般性的問題應該就會容易許多。(例如:今天有什麼電影、下班後想看電影、晚上有什麼電影..等等)。但是如果是過於複雜的語法結構,就不是那麼容易可以分析的了。(例如:我明天想和喜歡的人去吃日本料理、我應該要穿什麼衣服呢?萬一下雨會不會很掃興?她會討厭我嗎?)
在語意分析的技術瓶頸下,我採用一個簡單的方法暫時解決這個問題,就是根據不同的關鍵字來回應不同的內容。有了關鍵字,機器人的回應看起來就會比較有內容些,由於使用者可以自行決定是否要機器人回答,所以機器人也不會那麼快就讓使用者感到厭倦。
所以,當使用者想問氣象則會針對氣象回答,使用者想要圖片(型男、正妹),則回傳圖片和相簿連結給使用者(甚至因為網友要求實做了一個簡易評分機制)。若是需要看看名言佳句勉勵自己,也可以得到開示。這類型的應用甚至可以用到早安、晚安…等特定關鍵字出現的時候,機器人就自動回訊說早安、晚安…等等。(簡易範例)
當然,這只是初步的 workaround ,要真正實做的話,永遠有多到做不完的東西可以寫

有時候看機器人的回覆雖然答非所問, 卻很搞笑, 倒也是一種樂趣啦…
例如這噗: http://www.plurk.com/p/13seol
這一則是讓我最驚喜的:http://www.plurk.com/p/13xc4s
因為圖片從資料庫中亂數抽出來的,會選中剛好有穿泳裝而且又在游泳池的機率真的很低很低
請問能否分享你的噗浪機器人給我? 發噗我會用, 但是回應關鍵字的噗, 想弄一個針對賽斯書資料庫搜尋後的結果來回噗的機器人. RLPlurkAPI-0.5.0-0 會抓到一些資料, 但還沒有研究到回噗.
$plurk = new RLPlurkAPI();
$plurk->login($nick_name, $password);
print_r($plurk->getPlurks($plurk->uid));
這樣應該可以看到列表,接下來要處理就很簡單了:
$plurk->respondToPlurk(RLPlurkAPI::permalinkToPlurkID($url), 'en', 'says', 'test from the plurk robot');
記得建一個 table 把回應過的 permalink 存起來以免重複回應。
請問一下!噗浪機器人該怎麼做呢?有參考的網址嗎?不好意思啦!我看了三篇都沒寫到機器人如何做??
看你用什麼語言,不同語言方法不同。pyhton, perl, php, c# 都有 api ,你可以 google 一下。
謝謝 roga 大大. 這樣就很清楚了.
sai 的問題, http://code.google.com/p/rlplurkapi/ 有 api, 可是其中有個地方要改一下才能用. 看這裡: http://code.google.com/p/rlplurkapi/issues/detail?id=7&can=1
另一個用 PHP cURL 可自動發噗: http://www.jaceju.net/blog/?p=591
不用客氣
請問一下~
星座的當日速配指數是指什麼?
另外,為何會有同一天 星座速配不一樣
ex. 今日雙魚跟金牛速配 但金牛的速配寫著水瓶
謝謝!
嗯,好的,我去問一下星座達人…請稍等
你好,請問一下機器人設定好那些要噗的訊息之後
如果要讓它在某個時間發送訊息,是不是要另外處理呢
不是很了解開發的流程…可以麻煩你告訴我嗎
謝謝!
利用 cron job 可以達成。
您好,請問要如何在mysql建立table來儲存回應過的噗呢?
小弟對這邊不是很清楚
可以麻煩教我嗎
打擾了
您好
我根據您上面對其他人的回覆
但我不太清楚要如何把getPlurks的值
跟之後的respondToPlurk連接在一起
我只能改respondToPlurk中的連接去po
沒辦法抓到getplurk後 自動連接到對應的噗
可以請教一下嗎
打擾了
應該是觀察一下 RLPlurkAPI::getPlurks() 這個方法回傳的是什麼,然後:
$plurks = $plurk->getPlurks($plurk->uid); foreach($plurks as $row) { print_r($row); $msg = $plurk->respondToPlurk($row['plurk_id'], 'tr_ch', 'says', 'your content'); print_r($msg); }可以請問一下roga大嗎?
今天(11/30)我用裡面的print_r($plurk->getPlurks($plurk->uid,’T',’T'));
為什麼出來的都不是我要的結果??
也找過很多資料,但好像沒有有相關問題
謝謝
@@上面的程式碼日期不見了……print_r($plurk->getPlurks($plurk->uid,’T ‘,’T ‘));
請問您要的結果是?
上面程式碼的解釋是:在登入後,
的作用是把 $plurk->uid 的河道上面的噗指定給 $plurks 。
恩…我是想要說取得我指定的日期plurks
只是我照著他function裡面註解的方式打
結果都跟原本沒有指定日期一樣
謝謝
自己刻, API 很多方法現在沒辦法用。
$rtn = $plurk->get_unread_plurks(time(), 0);
請問傳回來的值順序是?
@param time $offset Return plurks older than offset, use timestamp