排程自動更新 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 就可以正常運行了!省了很多麻煩~~

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

    這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料