![[記錄] 用 php + Plurk API 2.0 寫噗浪抽獎程式 [記錄] 用 php + Plurk API 2.0 寫噗浪抽獎程式](https://cheyi.idv.tw/wp/wp-content/uploads/2020/06/macbook1983_TP_V.jpg)
找不到適合的照片,就這張吧XD
好,講完。沒有啦,上面那是結果,現在是要記錄我用了什麼跟心路歷程(?)
ami 大大那個噗上面是利用 javascript 解析網頁內容,然後不需要寫成程式不用有空間可以放,只要有 Chrome 就可以達到(Chrome 的開發者人員模式真的可以做很多事情XD)。
缺點就在於每次要抽獎,如果人數太多就得多花時間,還是稍微有些不方便。
因為寫成網頁我只會用 php ,所以本來想說用這個概念,來把這些寫成網頁程式方便使用(雖然我沒辦過抽獎XD)但後來發現噗浪載留言的方式以我自學爛爛的 php 爬不了網頁內容,雖然後續的篩選tag取得名字方式順利寫好,但最終只寫了「需要從開發者工具複製整個網頁內容,然後貼上後一鍵完成抽獎」的半成品。
於是我就想放棄了。 >A<
後來浩剛大大提到他在研究 Plurk API 2.0 ,以前研究過一次的我,開心的向大大請教了一些之後,決定全部都用 API 把資料擷取回來再做處理。
內容目錄
使用的工具及參考
- Plurk API 2.0:最主要擷取噗浪資料的方法
- Plurk API 的 test console:寫成程式之前,或是測試取得回應的結果,這個官方的 console 都非常的好用!
- 註冊 API 的參考網頁:要使用 API 需要 Key,我參考了這篇文章
- OAUTH 認證程式:找了很多網路好心人寫好的內容,這個是最簡單而且乾淨的 OAUTH 程式(php)
使用到的 API Function
Plurk API 的 test console 真的很好用,因為可以測試所有的 function,包含帶入的參數,所以可以先在上面測試哪些是有用的。我就列出我有用到的 function。
/APP/Timeline/getPlurk
- 可以取得單一噗的資料,帶入的參數是 plurk_id
- plurk_id 並不是網頁後面帶的資料,需要先使用 base32 decode 之後才是真實的 id(數字)
- 帶回來的資料主要是主噗的內容,可以取得 [“plurk”] 下 [“favorers”] (喜歡)、[“replurkers”](轉噗)
- [“favorers”] (喜歡)、[“replurkers”](轉噗)記錄的都是使用者的編號(非帳號)
- 還可以取得噗主資料:[“user”],這就帶有帳號跟暱稱資料
/APP/Responses/getById
- 可以取得單一噗的所有回應,帶入的參數是 plurk_id
- plurk_id 並不是網頁後面帶的資料,需要先使用 base32 decode 之後才是真實的 id(數字)
- 帶回來的資料是所有的回應內容,包含發回應的使用者帳號、編號、暱稱
/APP/Profile/getPublicProfile
- 可以取得使用者資料,帶入的參數是 user_id
- [“favorers”] (喜歡)、[“replurkers”](轉噗)的資料就是 user_id
- 可以取得使用者帳號、編號、暱稱
程式流程構想
本來我以為取得回來跟使用者相關的都是完整資料(就是有使用者帳號、編號、暱稱),但實際測試下,發現並不是!只有噗的回應可以直接取得,其他的都只是使用者編號。
但抽獎結果必須要有誰得獎,貼回噗浪才有用,但編號貼回去也是不能辨識,所以還是得去重新抓資料回來。
一開始是想最後抽獎的時候已經有完整資料,這樣抽完可以組顯示資料。但後來發現不對,喜歡跟轉噗要是人數多,先抓資料就會花上好幾分鐘,所以最後決定都先取得使用者編號陣列,然後抽完之後再去比對,至少要抽的個數不會幾十嘛!(吧!?)
所以最終的作法:
- 先解析輸入的網址,取得 plurk_id
- 根據勾選來源(留言、喜歡、轉噗)取得資料,去掉重複的,還有去掉噗主編號,產生被抽清單
- 根據輸入的抽選個數,用 php 取亂數(rand)取出結果
- 再從結果去擷取帳號的資料提供顯示跟複製的內容
- 大功告成!
每次寫完程式,再來寫怎麼弄的過程都覺得很簡單沒什麼,但實際的測試跟調整都花了不少力氣,重點是在試誤的過程真的不少。但寫完真的很有成就感,不管是書評網或是現在這個,能動能有成果都覺得開心。