2011年9月3日 星期六

Desktop Application Get Facebook access_token via Browser (on windows)

 

前言

如果應用程式是以 Web 為 base,那麼要能取得 Facebook 的 access_token 是比較容易的。這篇主要是讓非 Web Application 的開發者取得 access_token 的紀錄。

 

這篇適合稍微碰過 Facebook API 的人,若你對 Facebook API 並不熟,那麼閱讀這篇之前,你可以先試著閱讀...

 

 

facebook 官方也提到他們的 OAuth 2.0 認證機制並不直接支援一般的應用程式。

https://developers.facebook.com/docs/authentication/

image

 

可參考底下網站,有更詳細的解說
http://blog.ericsk.org/archives/1422

 

雖不直接支援,但 https://developers.facebook.com/docs/authentication/ 仍有提供解法,但前提是你的應用程式必須能呼叫 Browser。

在 Windows 上,只要透過 win32 api,其實要辦到這件事情並不困難,以下用 Ruby 做為範例語言:

程式碼

GetAccess_Token.rb

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 取得瀏覽器中的資料而已。

操作畫面像這樣,

 

執行程式

image

 

跳出瀏覽器要求使用者登入

image

 

授權請求

image

 

接著你的程式就得到 access_token 啦!(在這邊我只是印出來而已)

image

沒有留言:

張貼留言