前言
如果應用程式是以 Web 為 base,那麼要能取得 Facebook 的 access_token 是比較容易的。這篇主要是讓非 Web Application 的開發者取得 access_token 的紀錄。
這篇適合稍微碰過 Facebook API 的人,若你對 Facebook API 並不熟,那麼閱讀這篇之前,你可以先試著閱讀...
facebook 官方也提到他們的 OAuth 2.0 認證機制並不直接支援一般的應用程式。
https://developers.facebook.com/docs/authentication/
可參考底下網站,有更詳細的解說
http://blog.ericsk.org/archives/1422
雖不直接支援,但 https://developers.facebook.com/docs/authentication/ 仍有提供解法,但前提是你的應用程式必須能呼叫 Browser。
在 Windows 上,只要透過 win32 api,其實要辦到這件事情並不困難,以下用 Ruby 做為範例語言:
程式碼
require 'win32ole'
# Enter Your app_id & app_secret
app_id = ''
app_secret = ''
ie = WIN32OLE.new('InternetExplorer.Application')
ie.Visible = true
ie.Navigate('http://www.facebook.com/dialog/oauth?
client_id=' + app_id + '&
redirect_uri=http://www.facebook.com/connect/login_success.html&
scope=publish_stream,read_stream,read_friendlists,user_likes,friends_likes,offline_access')
sleep(2) until ie.ReadyState == 4
loop do
break if ie.document.body.innertext.strip() == "Success"
end
code = ie.LocationURL.sub('http://www.facebook.com/connect/login_success.html?code=', '')
ie.Navigate('https://graph.facebook.com/oauth/access_token?
client_id=' + app_id + '&
client_secret=' + app_secret + '&
redirect_uri=http://www.facebook.com/connect/login_success.html&
code=' + code)
sleep(2) until ie.ReadyState == 4
dummy, access_token = ie.document.body.innertext.strip().split('=')
puts 'access_token : '
puts access_token
ie.Quit
其實只是利用 win32 api 開啟瀏覽器連結到 Facebook 提供的網址,而使用者照著操作之後,再利用 win32 api 取得瀏覽器中的資料而已。
操作畫面像這樣,
執行程式
跳出瀏覽器要求使用者登入
授權請求
接著你的程式就得到 access_token 啦!(在這邊我只是印出來而已)
沒有留言:
張貼留言