//Logo Image
作者:黃于珍(2012-08-07);推薦:徐業良(2012-08-07)

Arduino Ethernet發送訊息顯示於Facebook帳戶的塗鴉牆

本文說明如何透過伺服器端(Server-side)的動態網站結合Facebook SDKArduino Ethernet發送的訊息顯示於專屬Facebook帳戶的塗鴉牆上。

1.    流程簡介

如圖1所示,本文的目的是將外部感測器(external sensor)傳至分散式資料伺服器(Distributed Data Server, DDS)的訊息,透過雲端的動態網站(Personal Health Cloud)結合Facebook SDK,發佈於專屬Facebook帳戶塗鴉牆上。本文中敘述以Arduino Ethernet為基礎之DDS之應用。

使用者須先為其Arduino Enthernet申請專屬之Facebook帳戶,並至動態網站註冊,登錄Arduino Enthernet之出廠編號並登入專屬Facebook帳戶,完成啟用功能。將Arduino Ethernet發送的訊息顯示於專屬Facebook帳戶的塗鴉牆上之具體步驟簡述如下:

(1)  Arduino Ethernet傳送URL指令給動態網站的接收程式;

(2)  動態網站的接收程式判斷Arduino Ethernet傳送的URL指令格式是否正確、參數是否有遺漏;

(3)  如果指令正確將傳送指令中Arduino Ethernet出廠編號的參數值至動態網站的資料庫中,查詢URL指令中訊息代碼所對應的訊息內容及專屬Facebook帳戶的Facebook access-token

(4)  動態網站呼叫Facebook SDK,將訊息內容發佈至專屬Facebook帳戶的塗鴉牆。

1. 動態網站結合Facebook SDKArduino DDS發送的訊息顯示於Facebook帳戶的塗鴉牆中的流程圖

2.    定義Arduino Ethernet與動態網站溝通的URL指令

如前所述,Arduino Ethernet以傳送URL指令的方式與伺服器端的動態網站作溝通,下表1URL指令的參數說明。

1. Arduino Ethernet與動態網站溝通的URL指令參數說明

URL範例

http://grc.yzu.edu.tw/PHC/eventpost.aspx?dt=ADL&dv=2012&sn= ADL201205141613A0 &mi=2

URL說明

http://存放動態網站的伺服器所屬的網域名稱/.../../伺服器端動態網站接收程式?dt=Arduino Ethernet的類別&dv=Arduino Ethernet的版本&sn=Arduino Ethernet出廠的編號&mi=訊息編號

URL傳送的字數有限制,且為滿足日後讓使用者可以自由地變更顯示於塗鴉牆上的訊息內容,當使用者登入動態網站並決定使用此項功能模組時,動態網站會自動將預設的訊息內容及訊息編號建置於伺服器端的資料庫中,下表2為訊息內容及訊息編號的範例對照表,其中訊息編號是在Arduino DDS中依應用項目事先定義,使用者可以在動態網站上編輯訊息內容欄位中的內容。

2. 訊息內容及訊息編號的範例對照表

使用者編號

訊息編號

訊息內容

u26

1

今天天氣好熱

u26

2

今天室內的溼度好高

u26

3

電視剛打開

u26

4

有人經過

u26

5

今天室內的溼度好低

3.    程式設計

3.1 建立Facebook應用程式

Facebook提供很多API給想要結合Facebook至其它應用的程式開發者來使用,使用者必須先至http://www.facebook.com/developers/申請,於手機驗證或信用卡驗證成功後即可成為Facebook開發人員。Facebook開發人員才具有建立應用程式的權力,每組應用程式具有一組密鑰,開發人員需使用此組密鑰才可以存取Facebook內的資源。下圖2為建立Facebook應用程式頁面,畫面中Display Name為應用程式名稱、App ID為此應用程式的編號、App Secret為應用程式的密鑰、App Domains為此應用程式所在的網域名稱,開發人員可透過此頁面來編輯及應用程式的相關資訊。

未命名 - 1

2. 建立Facebook應用程式頁面

3.2 Facebook帳戶的認證與授權機制

Facebook平台中採用OAuth 2.0協定來執行使用者的認證與授權。OAuthOpen Authorization的縮寫,透過這種協定使用者可以允許第三方網路應用服務存取使用者在某一網站中的資料,如照片、電子信箱地址等,而不需使用者提供登入該網站的帳號及密碼給第三方網路應用服務。目前很多平台皆採用OAuth協定,如GoogleWindows LiveTwitter等,有關OAuth協定更詳細的資料可參考http://oauth.net

當使用者成功登入Facebook後,Facebook就會產生一組“access-token”,中文名稱有人稱為「存取權杖」也有人稱為「訪問令牌」,簡單的來說就是使用者的「通行證」。此時只要第三方程式取得此access-token在有效的使用期間內就可以取得此位使用者在Facebook中的資料,如訊息、相簿等。在Facebook中每組access-token有使用的期限,當超過使用期限時,Facebook會自動要求使用者重新登入Facebook取得新的access-token。圖3Facebook提供伺服器端的網站或App取得access-token的流程圖。

https://developers.facebook.com/attachment/serversideflow.png

3. Facebook提供伺服器端的網站或App取得access-token的流程圖https://developers.facebook.com/docs/authentication/server-side/

3.3   取得專屬Facebook帳戶中的access-token之程式邏輯

Arduino Ethernet傳送URL指令給動態網站並確認之後,動態網站取得專屬Facebook帳戶中的access-token,並發佈對應訊息之程式邏輯如下:

IF (Facebook帳戶的access-token已經存在於資料庫中)

THEN

IF (Facebook帳戶的access-token已經過期)

THEN

(1)  請使用者重新登入Facebook取得新的access-token

(2)  更新資料庫中此Facebook帳戶的access-token,並呼叫Facebook API來發佈對應訊息

ELSE

    取出access-token,並呼叫Facebook API來發佈對應訊息

    END

ELSE

(1)  請使用者登入Facebook取得一組access-token

(2)  將此組access-token存入資料庫

(3)  呼叫Facebook API來發佈對應訊息

END