相關文章更新歷程
=======================================
update : 2014/9/23
使用Graph API 取得留言分享的名單 (sharedposts) 請看這篇 :
使用Facebook Graph API 取得分享Po文的使用者名單 (sharedposts)
update : 2014/9/11
此篇是使用FQL,如要改成使用 Graph API 請看下面這篇 :
使用Graph API 解決FQL 最多上限1000筆的問題
=======================================
前言廢文:
之所以會寫這東西......是因為有某人說他們公司的工程師兩光
只是想要叫他抓出粉絲團某篇文章按讚的人,然後把他們的照片配對但寫不出來
然後我們公司行銷好像也有拿FB按讚的名單當抽獎的例子
而且我也沒有做過這種東西,所以就來嘗試研究一下
看了一下發現利用FQL的話就非常簡單~
>>懶得了解想要直接試試看請到這裡來<<
下面還是先使用 javascript 來寫
=======================================
事前功課
第一步:
首先先看一下 FQL 可查詢的 Table 列表,Table 點進去有欄位名稱
https://developers.facebook.com/docs/reference/fql/
FQL 語法就像下SQL一樣,只是沒那麼強大
就算不會下SQL,你點進頁面裡面都會有範例
第二步:
到 https://developers.facebook.com/tools/explorer 這邊
來測試一下你的FQL是否正確,要記得切換到 FQL (如下圖)
再來按下上面的"取得存取代碼" (AccessToken),勾選你想要取得的權限
以我要做的例子而言,我要抓取的是 user_likes (其他是我亂勾的)
要注意FQL裡面有些資料是需要正確的Permissions才能抓取
再來就可以直接在輸入框測試 FQL
以我要做的例子而言,我要抓取某粉絲團內某篇文章按讚的使用者資訊
所以我要查的資料表有
1. stream (查詢粉絲團內的Po文編號,還有各文章按讚的總人數)
https://developers.facebook.com/docs/reference/fql/stream/
2. like (取得針對某篇Po文 ID按讚的 user_id)
https://developers.facebook.com/docs/reference/fql/like/
3. profile (用user_id 去抓使用者個人資料)
https://developers.facebook.com/docs/reference/fql/profile/
首先找 stream 看看我要追蹤的文章 post_id 到底是什麼
FQL:
select post_id,source_id,attachment,permalink,message,likes,type,
created_time from stream where source_id = '382384165146381'
source_id 是粉絲團編號,可以到你的粉絲團 / 編輯專頁 / 更新專頁資訊,裡面有寫
然後就會取得如下的 JSON 字串
裡面的 post_id 還有 likes/count 就是我要的了
找到 post_id 之後,再來是找這篇文章裡面到按讚的是誰
FQL:
select user_id from like where post_id = '382384165146381_565322490185880'
就會回傳有按讚的 user_id
再用 user_id 去 profile 找個人資料就搞定了
上面是查詢步驟,但是真的要下的時候一個一個查也太累
於是改成這樣一次查比較快
SELECT pic_big,name,id,url FROM profile
WHERE id in (
SELECT user_id FROM like
WHERE post_id = '382384165146381_565322490185880'
)
查出來就會是這篇文章按讚的大頭照、名字、編號、個人檔案連結了
(不太好意思列出別人的資料)
再來只要解析 JSON 就搞定了
第三步:
現在就來程式化一下,還是使用 javascript 來寫
首先你要先建立一個應用程式,這些前置步驟就不寫了,請看這邊
http://sweeteason.pixnet.net/blog/post/37284400
雖然他又改版了,但輸入的資料還是大同小異
首先引用一下 .js
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" src="http://connect.facebook.net/zh_TW/all.js"></script>
還有標籤
<div id="fb-root"></div>
再來就開始程式,首先初始化 FB.init
$(document).ready(function () {
//網頁位置,要跟應用程式裡面設定的一致
var url = "http://localhost:50175/Default.aspx";
//我的應用程式編號
var appid = "693808703975156";
//我要追蹤的文章編號
var post_id = "382384165146381_565322490185880";
FB.init({
appId: appid,
status: true,
cookie: true,
xfbml: true,
channelURL: 'http://www.test.com.tw/channel.html',
oauth: true
});
//再來檢查登入狀態與授權
FB.getLoginStatus(function (response) {
if (response.authResponse) {
//var accessToken = response.authResponse.accessToken;
FB.api({
method: 'fql.query',
//取得po文按讚的使用者資料
query: "SELECT pic_big,name,id,url FROM profile WHERE id in (SELECT user_id FROM like WHERE post_id = '" + postid + "')"
}, function (res) {
for (var key in res) {
var pic_big = res[key].pic_big;
var name = res[key].name;
var id = res[key].id;
//跑迴圈一個一個就抓到啦,下面視個人情況運用
//............................
//............................
}
});
} else {
//取得授權,這個例子是抓使用者 email + likes
window.top.location.href = "http://www.facebook.com/connect/uiserver.php?app_id=" + encodeURIComponent(appid) + "&next=" + encodeURIComponent(url) +"&display=popup&perms=email,user_likes&fbconnect=1&method=permissions.request";
}
});
});
PS:FQL 查回來預設是有限制筆數的,你可以自己加 LIMIT 來看你要幾筆
SELECT pic_big,name,id,url FROM profile
WHERE id in (
SELECT user_id FROM like WHERE post_id = '" + postid + "'
) LIMIT 100
(可以自己去找 Oracle 的SQL來看,MSSQL沒有LIMIT)
然後FQL 有個最大限制筆數,目前是1000筆
如果你想抓的資料超過一千筆而且想要做分頁的話
建議使用 Graph API 去做喔!
請看一下這篇
使用Graph API 解決FQL 最多上限1000筆的問題 (就是改用Graph API的意思)
然後我有寫了一個頁面可以讓想查又懶得寫code的人查
網址 : http://socute.somee.com/fblike.aspx (這個常在維修)
備用網址 : http://socute.gear.host/FBTool/fblike.aspx (這個比較穩定)
只要輸入你的粉絲團 id 即可 (粉絲團id 怎查上面有提到)
查詢結果
按下去文章編號,就會顯示針對該篇文章按讚的使用者,如下
然後我就發現用這個頁面來找妹其實蠻快的
留言列表