現在很多網站都會內嵌Facebook 的 social plugin,像「讚」或是「Comments」。在這樣的情況下,如果你想要用程式去取得某個URL之下有多少的結連總數、意見總數或分享總數,該怎麼處理? 方法很多,其中最簡單的一種是用Facebook提供的REST API,雖然它不是最好的方法,但依然是可用的方法。
E07.1 關於REST API
使用REST API的方法很簡單,其實就是使用HTTP GET某個URL再加上一些特定的參數,這樣Facebook就會回傳你要的資訊,例如,下方是一個取得網站分享資訊的方法,你可以打開瀏覽器然後輸入下方的網址,這樣Facebook就會回傳本站關於Facebook分享的資訊。http://api.facebook.com/restserver.php?method=links.getStats&urls=http://www.itpt.com.tw
輸入上面的網址後,你會看到Facebook以XML的格式回傳了我們要的資訊:
<links_getStats_response xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd" list="true">
<link_stat>
<url>http://www.itpt.com.tw</url>
<normalized_url>http://www.itpt.com.tw/</normalized_url>
<share_count>5</share_count>
<like_count>0</like_count>
<comment_count>0</comment_count>
<total_count>5</total_count>
<click_count>0</click_count>
<comments_fbid>10150171304989663</comments_fbid>
<commentsbox_count>0</commentsbox_count>
</link_stat></links_getStats_response>
當然的,你可以把上面網址最後面的http://www.itpt.com.tw換成其它的URL,這樣就可以取得對應URL的分享資訊。另外這個XML文件的欄位可以參考Facebook的說明。
E07.2 程式範例
下方的程式使用Tcl內建的http套件來執行GET URL的功能:程式 E07-1 Tcl執行Facebook REST API
package require http
set urls [::http::formatQuery urls "http://www.itpt.com.tw"]
set tok [::http::geturl "http://api.facebook.com/restserver.php?method=links.getStats&$urls"]
set data [::http::data $tok]
set ncode [::http::ncode $tok]
::http::cleanup $tok
if {$ncode != 200} {
puts "執行失敗"
} else {
puts $data
}
這個程式值得注意的地方在第3行,記得使用HTTP的GET需要把URL做編碼的動作,在Tcl裡可以使用::http::formatQuery命令做URL編碼的動作, 執行完第3行urls會變成這樣:
urls=http%3a%2f%2fwww.itpt.com.tw
參考資訊:
Facebook : FQL
Facebook : Social Plugins
Facebook : REST API
按右上方的「#」號切換側邊欄