這篇文章說明如何用 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’ 字串
提醒大家,噗浪並不反對機器人的存在,但使用這個範例程式請注意以下幾點:
建議使用新的帳號,不要用原有的帳號
機器人請勿主動去加網友為朋友
機器人請勿去關注(追蹤)任何其他網友
請勿自動回覆未成為機器人的朋友所發的噗
請勿張貼廣告訊息
請注意回覆頻率,以不過度干擾使用者的方式為原則