顯示具有 api 標籤的文章。 顯示所有文章
顯示具有 api 標籤的文章。 顯示所有文章

2011年9月27日 星期二

Ruby on Rails 發佈 Twitter 消息

image

圖片來源:https://dev.twitter.com/

 

流程大綱

要在 Twitter 發佈消息,要做幾件事情:

  1. 註冊一個 Twitter 帳號
  2. 用 Twitter 帳號申請 Twitter APP
  3. 將 Twitter APP 權限調整成 「Read and Write」
  4. 在 Ruby on Rails 透過 Twitter OAuth 認證機制取得 access_token
  5. 利用 Ruby on Rails 用 access_token 呼叫 Twitter API 進行發佈

 

參考資訊

https://github.com/oauth/oauth-ruby

https://github.com/twitter4r/twitter4r-core

http://twitter4r.rubyforge.org/

 

流程說明,直接從「用 Twitter 帳號申請 Twitter APP」開始

登入你的 Twitter ,在右下方找到「開發人員」

image

 

一樣在右下方,點擊「Create an app」

image

 

填寫 APP 所需資訊,在這邊 Web Site / Callback URL 的 host:port 是填寫你自己的網站位址(測試用的話,填 127.0.0.1:3000 也可以)

PS:"myapp" 若跟人家衝突到,就自己亂 key 一個名字吧,實際上我是 key “myapp1234”

image

 

填好之後,打勾按下同意

image

 

按下 Settings

image

 

將 Access 的 permission 更改為 Read and Write 按下送出

image

 

image

 

回到 Details

image

 

把 Key 跟 Secret 記下來

image

 

接著產生一個 RoR 的專案

SNAGHTML240def4

 

在 GemFile 裡加上這兩行

image

 

下達 bundle install

SNAGHTML242353e

 

接著下達 rails g controller twitter

SNAGHTML243dd11

 

打開 controller twitter_controller.rb 貼上以下程式碼

image 

class TwitterController < ApplicationController
  def consumer
    consumer = OAuth::Consumer.new('你剛剛申請到的 Key ', '你剛剛申請到的 Secret', {
      :site => 'https://api.twitter.com',
      :authorize_path => '/oauth/authorize'
    })
    return consumer
  end
  
  def login
    request_token = consumer.get_request_token(:oauth_callback => File.join(request.protocol + request.host_with_port, 'twitter/callback'))
    session[:request_token] = request_token.token
    session[:request_token_secret] = request_token.secret
    redirect_to request_token.authorize_url
  end
  
  def callback
    request_token = OAuth::RequestToken.new(consumer, session[:request_token], session[:request_token_secret])
    access_token = request_token.get_access_token(:oauth_verifier => params[:oauth_verifier])
    client = Twitter::Client.new(:oauth_access => {
      :key => access_token.params[:oauth_token], :secret => access_token.params[:oauth_token_secret]
    })
    client.status(:post, '你要發佈的消息')
    render :text => access_token.params
  end
end

 

到 config/routes.rb 把最下面一行註解拿掉

image

 

接著打開 rails server

SNAGHTML24df66a

 

打開瀏覽器輸入底下網址

image

 

授權應用程式

image

 

稍等一下會跳轉到 callback 頁面

image

 

此時到 Twitter 上看,就可以看到消息成功發佈了!

image

 

 

PS:若你要發佈的消息為中文,記得把檔案編碼改為 utf-8 並在檔案上方加入 「#encoding: utf-8」 喔!

image

image

2011年9月16日 星期五

Google+ API 與 php

image

如果你沒有用過 Facebook API,那建議你可以先閱讀底下的文章釐清一些觀念

透過 Facebook API,讓你的 Facebook Application 發佈動態消息

 

Google+ API 已經可以使用囉!但目前只開放讀取部分資訊。

image

 

其實照著 Google+ 的文件進行就可以了,大概分幾個步驟:

 

到這裡註冊你的 Google Application,註冊方式可以參考這裡。

 

特別要注意的是,如果你用的是 php 的 Library,這個步驟結束之後…

 

要記得把 Redirect URI 改成這樣(實際上還是得以你放置的路徑為主,這個例子,我是將 index.php 放置在 www root 底下)

image

 

到這裡可以看到等會需要輸入的資訊(黃色框住的部分)

image

 

到這裡打開你的 Google+ API。

image 

 

到這裡下載你使用的語言的 Library,這個範例是用 php 完成的(但 Ruby 的部分,我也測試過)

image

 

接著把 google-plus-php-client.zip 跟 google-plus-php-starter.zip 解壓縮到 Apache Web 的根目錄下。

SNAGHTML1efe26c

 

打開 index.php 填寫剛剛申請獲得的資訊。

image

 

打開 localhost 就完成囉!

SNAGHTML1fb85bc

 

如果操作過程中,出現了

CURL Error 60: SSL certificate problem, verify that the CA cert is OK.
Details: error:14090086:SSL routines
SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

的錯誤,可以參考底下這個網站解決!

http://richardwarrender.com/2007/05/the-secret-to-curl-in-php-on-windows/

2011年9月7日 星期三

Facebook API 循序圖

image
(圖的來源在 http://developers.facebook.com/docs/authentication/)

圖裡指的 APP 為 Facebook 中的 APP,通常以 WebSite 方式存在,以下皆以 WebSite 稱之。

步驟解說如下:

  1. 使用者來到 WebSite
  2. WebSite 提供一個連結至 Facebook 的「請求授權」頁面,連結的參數裡,帶有 WebSite 指定成功後跳轉的網址(通常指回自己身上),「請求授權」頁面會自動偵測使用者登入狀況來決定是否跳轉登入頁面。
  3. 「請求授權」成功後,Facebook 會通知 Browser 跳轉到步驟 2 指定的網址,並帶有 "code" 的參數。(這邊的 "code" 指的是「請求授權」成功的密鑰)
  4. WebSite 收到 "code" 之後,透過 "code" 連接到 Facebook 表示使用者已同意 WebSite 取得「access token」
  5. 取得「access token」之後,WebSite 便可透過「access token」直接對 Facebook 下達任何使用者授權的存取動作。

能請求的授權如下:
(來源在 http://developers.facebook.com/docs/reference/api/permissions/)

image
image
image
image

2011年9月6日 星期二

Ruby on Rails and Facebook API (koala)

 

我很訝異我無法在第一時間就 google 到 RoR 整合 Facebook API 的 solution。雖然不到千辛萬苦,但也是兜了一圈才找到這個 koala 套件。

https://github.com/arsduo/koala/wiki

 

如果要直接下載專案範例,那麼可以試試看

https://github.com/omeryavuz/yemek_koala

 

不知道是不是使用 VirtualBox 的關係,get_access_token 這個指令每次都回應我 auth_code 與 App id 不 match…但如果第二次訪問就可以正常取得 access_token,目前暫時用這個方式來解,還是得找時間實測看看實體機器。

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

2011年4月21日 星期四

透過 Facebook API,讓你的 Facebook Application 發佈動態消息

目的

是讓發佈動態消息可程式化,可依自己撰寫的應用邏輯,來決定何時發佈消息。

 

建議可以先閱讀

 

假設已經準備好了...

  1. 已經在 http://www.facebook.com/developers/ 建立了新的應用程式。 (在這例子上,我的應用程式叫 bmfriend_testapp)
  2. 準備了可執行 php 的 Web Server 環境。(在這例子上,我的 Web Server Domain Name 是 bmcool.no-ip.org)

 

 

開始進行

取得 fb_ca_chain_bundle.crt 以及 facebook.php

下載 facebook-php-sdk
image

 

下載最新版本(我抓到的是 facebook-php-sdk-v2.1.2-6-g04168d5.zip)
image

 

解壓縮至此
image
 

 

在src資料夾找到 fb_ca_chain_bundle.crt 以及 facebook.php
image

 

下載 demo 檔案與建置

下載 index.php ,在 Web Server 上建個資料夾(在這例子上,我的資料夾名稱是 facebook),將 fb_ca_chain_bundle.crt、facebook.php 以及 index.php 置入此資料夾
image

 

在 Facebook 上,編輯 Facebook Application 的設定

打開 Facebook Application Setting 頁面(我的 Application ID 是 204672162899646)

http://www.facebook.com/developers/apps.php?app_id=204672162899646

按下編輯設定(正常情況下,請保護好應用程式密鑰,不要讓自己以外的人知道)
image

 

點擊 Web Site
image

 

記下黃色螢光標示的部分,一個是你的 Application ID,一個是 Application Secret(正常情況下,請保護好應用程式密鑰,不要讓自己以外的人知道);而 Site URL 填入放置 fb_ca_chain_bundle.crt、facebook.php 以及 index.php 的位址並按下儲存
image

 

編輯 index.php 檔案,讓它與 Facebook Application 連結起來

打開 index.php,將底下紅框部分,改為應用程式的 Application ID 與 Application Secret
image

 

將底下紅框部分,改為應用程式的 Application ID 以及 Site URL
image 
image

 

開始使用建置好的 Facebook Application

來到 http://bmcool.no-ip.org/facebook/ 按下其中一個按鈕(我選了上面的)
image

 

登入
SNAGHTML3918ab4

 

按下同意
SNAGHTML3925294

 

跳轉回 http://bmcool.no-ip.org/facebook/ 此時已是登入狀態,此時輸入想發送的訊息以及按下送出
image

 

回到登入帳號的 facebook 主頁,便會發現發送成功!下方會標示是由申請的 Application 所發送的
image

 

 

還可以試試

  1. 將所有發送的訊息,依日期集中在同一個主題之下。(comments)
  2. 將訊息廣播給所有的朋友。(read_stream)
  3. 每天定時發送訊息給所有登入過 Facebook Application 的網友。

 

參考連結