Blogger 自動發文

需求很簡單,希望餵個標題跟內容,就自動產生文章貼到 Blogger 上,但弄的跌跌撞撞的,紀錄一下,留給麵包屑給未來的自己和有需要的人。

先來看一下官方作法 - 新增 Post 的做法,可以透過 Restful Web API 或是官方提供的 Java Library 來完成。理想上是這樣,看起來很間單,那為什麼我會跌的狗吃屎?

Restful Web API 的方式,參考指南這一篇,才發現 HTTP Header 還要填入 Authorization: /* OAuth 2.0 token here */,基本上就還是要透過 OAuth 2.0 的方式得到 token 才走的下去。那換成官方提供的 Java Library,反正連 Sample Code 都有了應該很簡單,貼上去才發現範例中的 OAuth2Native 根本沒有,需要自己實作。

做到這邊我心已死,成功之路沒有捷徑,只好去翻這兩份文件來看:

大概的問題就是想辦法通過 OAuth 2.0 取得 Token,再來拿這個 Token,看是要用 Restful Web API 還是 Java Library 來新增 Post 都可。步驟如下:
  1. 到 https://console.developers.google.com/ 下的 API 和驗證>API 把 Blogger API 啟用。
  2. 到 https://console.developers.google.com/ 下的 API 和驗證>同意畫面 把該填的資訊填一填。
  3. 到 https://console.developers.google.com/ 下的 API 和驗證>憑證>OAuth 建立用戶端 ID,類型選取已安裝的應用程式(我的 APP 是一個桌面執行程式)。
  4. 此時會得到用戶端 ID,用戶端密碼。
  5. 修改官方範例碼如下:
當執行這段範例碼時,在 Po 文之前,瀏覽器會自動打開,告知使用者有應用程式嘗試要存取你的 Blogger ,使用者同意之後就會自動 Po 文。

但實際上這段程式碼還是需要人為介入(在瀏覽器上同意),其實在 https://console.developers.google.com/ 下的 API 和驗證>憑證>OAuth 建立用戶端 ID,有一個類型叫做服務帳戶(Service Account)可以自動通過 OAuth 認證,但因為 Blogger 平台不支援用服務帳戶來發文,所以我們會得到 HTTP 403 授權失敗的錯誤。

PS: Google 關於通過 OAuth 的範例程式碼