排程自動更新 Facebook Token
小蛙負責的系統中,有一個後台需要定期去撈 Facebook 的資料,撈資料的時候需要 Facebook Token,而這個 token 之前都是到期後,小蛙手動去申請或展延,雖然很快,但是就是感覺麻煩,如果忘記了後台會撈不到資料 …
昨天要下班前又過期了,早上實在受不了,花一點時間 survey 相關資料,來讓他自動展延~這邊先說明小蛙的環境,主要的 code 會放在下面,再依照自己的需求修改使用。
- crontab -e 每兩個月(或每一個月)去做更新
- 更新時需要拿舊的 token 去換新的回來
- 將取回的新 token 存到一個檔案
- JSP 後台則從上述檔案中取得 token 以做後續處理
大概了解小蛙要做的事情之後就開始吧!
建立 token 檔案
小蛙把 token 放在 JSP 專案下的某個目錄,例如:WEB-INF/conf/token,把現有存活可用的 token 先貼進去,小蛙是直接把 facebook 回傳的 json 處理好之後,只留 token,不留其他 json 資訊(當然你要把 facebook 回傳的 json 全部留下來,之後在程式中處理也是可以,不過下次要更新的時候就要在 bash 中處理)
撰寫 bash 及加入排程
建立一個新檔案 update_fb_token.sh,並填入以下內容,這裡的重點只有 Facebook 那串網址,其他的部份根據自己的需求修改即可
#!/bin/bash otoken="$(head -n 1 上面建立的token位置)" url="https://graph.facebook.com/oauth/access_token?client_id=你的app_id&client_secret=fb後台登入後可以看到&grant_type=fb_exchange_token&fb_exchange_token=$otoken" json=$(curl -X GET $url) ntoken=$(echo $json | sed -E 's/.*"access_token":"([^"]*).*/\1/') if [ ! -z "$ntoken" ] then echo $ntoken > 上面建立的token位置 fi
上面的步驟簡單說一下,首先從本機 token 位置中讀取目前 token,連同 client_id、client_secret(這兩個 Facebook 後台都可以找到)去跟 Facebook 要一個新的 token,取得 Facebook 回傳的 json 後,小蛙只有簡單判斷能不能取到 access_token,如果有的話用 sed 擷取出來,並判斷不為空的話才更新到本機的 token 檔案裡,這裡可以根據自己的需求去做額外處理。
設定為可執行然後加入到 crontabe -e 定期執行
chmod +x update_fb_token.sh crontab -e # 每月 20 號 0:00 執行 0 0 20 * * /root/update_fb_token.sh
怎麼使用
小蛙這篇不打算講 OpenGraph 要怎麼使用,只是針對既有使用 OpenGraph 要每兩個月更新 token 的麻煩事,做了一個取巧的排程解法~已經把 token 存到一個指定的路徑中了,只要在使用 Facebook SDK 的地方,修改成動態載入這個 token 就可以正常運行了!省了很多麻煩~~