這篇文章說明如何用 Plurk API 2.0 自己寫一個噗浪機器人
(本文同步發表於 噗浪官方部落格)
噗浪大部分的機器人仍然使用 Plurk 1.0 撰寫,甚至有一部分機器人使用的是非官方的 API,這篇文章將簡介如何使用 Plurk API 2.0 OAuth 的方式開發機器人程式,同時,這個範例也使用 Plurk Realtime API (Comet Push) 的方式來追蹤時間軸,避免給伺服器帶來過多的負擔
由於 Plurk API 2.0 使用 OAuth 方式,所以啟動機器人之前,您必須先獲得以下四個參數
- App Key
- App Secret
- Access Token
- Access Token Secret
獲得 App Key 及 App Secret 的方式很簡單,首先先註冊一個新的噗浪帳號用來跑這個機器人,然後登入新帳號後,開啟以下這個連結:
http://www.plurk.com/PlurkApp/
按下「註冊新的應用服務」,填寫關於你的程式的資料,其中 OAuth callback 保持空白即可
註冊完畢後就可以看到你的應用程式列表
然後按下「編輯」這個按鈕,就可以看到以下畫面:
這邊我們就可以得到 App Key 以及 App Secret 了
接下來要進行 OAuth 的授權驗證來取得 Access Token 及 Access Token Secret
按下「測試工具」來開啟 OAuth 的 Test Console
首先按下「Get Request Token」來取得暫時的 Request Token,
接下來按下「Open Authorization URL」來開啟授權頁面:
按下「是,我要授權」後,會得到一個認證碼:
把這個六位數的認證碼記下來,然後回到 Test Console,
按下「Get Access Token」,這時會提示您輸入認證碼
把您剛剛記下來的數字填進去,按下「確定」後,
就可以得到永久有效的 Access Token 及 Access Token Secret 了
然後你就可以開始寫程式了,下面是一個用 Python 寫的噗浪機器人,
把其中 APP_KEY, APP_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET 置換掉即可
這個程式需要使用到 plurk-oauth 這個 Python library,
請把 plurk_oauth/ 這個目錄下的檔案下載回來跟你的程式放在一起就可以了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| #!/usr/bin/python
# -*- coding:utf-8 -*-
import re
import json
import urllib2
from PlurkAPI import PlurkAPI
plurk = PlurkAPI('APP_KEY', 'APP_SECRET')
plurk.authorize('ACCEESS_TOKEN', 'ACCESS_TOKEN_SECRET')
comet = plurk.callAPI('/APP/Realtime/getUserChannel')
comet_channel = comet.get('comet_server') + "&new_offset=%d"
jsonp_re = re.compile('CometChannel.scriptCallback\((.+)\);\s*');
new_offset = -1
while True:
plurk.callAPI('/APP/Alerts/addAllAsFriends')
req = urllib2.urlopen(comet_channel % new_offset, timeout=80)
rawdata = req.read()
match = jsonp_re.match(rawdata)
if match:
rawdata = match.group(1)
data = json.loads(rawdata)
new_offset = data.get('new_offset', -1)
msgs = data.get('data')
if not msgs:
continue
for msg in msgs:
if msg.get('type') == 'new_plurk':
pid = msg.get('plurk_id')
content = msg.get('content_raw')
if content.find("hello") != -1:
plurk.callAPI('/APP/Responses/responseAdd',
{'plurk_id': pid,
'content': 'world',
'qualifier': ':' }) |
#!/usr/bin/python
# -*- coding:utf-8 -*-
import re
import json
import urllib2
from PlurkAPI import PlurkAPI
plurk = PlurkAPI('APP_KEY', 'APP_SECRET')
plurk.authorize('ACCEESS_TOKEN', 'ACCESS_TOKEN_SECRET')
comet = plurk.callAPI('/APP/Realtime/getUserChannel')
comet_channel = comet.get('comet_server') + "&new_offset=%d"
jsonp_re = re.compile('CometChannel.scriptCallback\((.+)\);\s*');
new_offset = -1
while True:
plurk.callAPI('/APP/Alerts/addAllAsFriends')
req = urllib2.urlopen(comet_channel % new_offset, timeout=80)
rawdata = req.read()
match = jsonp_re.match(rawdata)
if match:
rawdata = match.group(1)
data = json.loads(rawdata)
new_offset = data.get('new_offset', -1)
msgs = data.get('data')
if not msgs:
continue
for msg in msgs:
if msg.get('type') == 'new_plurk':
pid = msg.get('plurk_id')
content = msg.get('content_raw')
if content.find("hello") != -1:
plurk.callAPI('/APP/Responses/responseAdd',
{'plurk_id': pid,
'content': 'world',
'qualifier': ':' })
執行方式:
# python my-robot.py
這個範例程式作的事情很簡單,就是一個無窮迴圈,首先每次都會先接受所有成為朋友的請求,然後看看有沒有新的噗,如果有新的噗,而且內容有 ‘hello’ 字串的話,就會自動回覆一個 ‘world’ 字串
提醒大家,噗浪並不反對機器人的存在,但使用這個範例程式請注意以下幾點:
- 建議使用新的帳號,不要用原有的帳號
- 機器人請勿主動去加網友為朋友
- 機器人請勿去關注(追蹤)任何其他網友
- 請勿自動回覆未成為機器人的朋友所發的噗
- 請勿張貼廣告訊息
- 請注意回覆頻率,以不過度干擾使用者的方式為原則