十月 282011
 

這篇文章說明如何用 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': ':' })

執行方式:

# python my-robot.py

這個範例程式作的事情很簡單,就是一個無窮迴圈,首先每次都會先接受所有成為朋友的請求,然後看看有沒有新的噗,如果有新的噗,而且內容有 ‘hello’ 字串的話,就會自動回覆一個 ‘world’ 字串

提醒大家,噗浪並不反對機器人的存在,但使用這個範例程式請注意以下幾點:

  1. 建議使用新的帳號,不要用原有的帳號
  2. 機器人請勿主動去加網友為朋友
  3. 機器人請勿去關注(追蹤)任何其他網友
  4. 請勿自動回覆未成為機器人的朋友所發的噗
  5. 請勿張貼廣告訊息
  6. 請注意回覆頻率,以不過度干擾使用者的方式為原則
 Posted by at 17:04

  12 Responses to “噗浪機器人範例程式 – 使用 Plurk API 2.0”

  1. 你好,這幾天想製作一個噗浪機器人
    不料在申請API的時候就出現了問題
    在申請頁面需輸入”官方網站”的部分我照著你的方法做了
    填入 http://www.plurk.com/XXX (我的噗浪網址)
    不過他卻跑出「* 請輸入應用服務所屬的官方網站網址 – http://…」
    這個是什麼意思呢? 我的噗浪帳號已經先註冊好也經過E-mail認證了
    不知道是不是我輸入錯東西了?

    希望能得到解答! 謝謝你! 😮

  2. 您好,最近想製作個機器人
    但…大大所提供的 plurk-oauth 似乎連結消失
    可否麻煩大師可以再提供呢

    希望大師能為我提供並解惑,謝謝

  3. 請問你說的下載下來的程式是放在 “Response:” 裡面嗎?

  4. 請問一下 出現
    ImportError: No module named oauth2

    是什麼原因?

  5. 請問一下 plurk_oauth資料夾下有三個檔案
    PlurkAPI.py
    PlurkOAUTH.py
    _init_.py
    我是要下載哪一個呢?
    還是進去後 直接複製他的程式碼
    還有
    複製完後分別是要貼在
    Plurk API & OAuth test console for Developers頁面的哪幾個格子呢? 謝謝

  6. 你好
    我選了功能後
    按下INVOKE APP
    他下面的欄位會自動跑出程式碼耶
    我可以用這個就好了嗎?

    請問一下
    1. 自動發噗的是選哪個功能 (以及是在GET OR POST下)
    2. 自動回噗的是選哪個功能 (以及是在GET OR POST下)
    3. 自動接受全部好友邀請的是哪個功能 (以及是在GET OR POST下)

    還有 我按完INVOKE APP後
    雖然跑出程式碼
    但我要怎樣才算確認我已將此功能將入我的帳號使用呢?
    謝謝

  7. 你好
    我下載並安裝了PYTHON 27的程式
    開新檔案後貼入以上程式碼
    跑的時候出現ImportError: No module named PlurkAPI的訊息
    我有到PLURK OAUTH 去下載PLURKPAI.PY但是下載的卻是HTML檔案
    請問我還需要做甚麼才不會在執行時再出現錯誤訊息呢?
    謝謝

  8. 請問一下,小弟最近開始寫機器人程式,想問一下這支程式碼有辦法改成自行去抓取別人時間軸上的噗文嗎? (純粹要用來做研究用的)

歡迎留下您的意見