廢話前言:
已經很久沒寫部落格了,其實很懶得寫,但這東西真的花了我很多時間
一個專案可能半天就寫完了,剩下一天半都在處理 fb cache 的問題
facebook 官方提供的 Debugger 工具不知道按過幾百次了,抓到的圖文還是舊的
所以以下提供解決的方法,會造成這樣的原因有很多種
但最重要的是.....最好要求需求單位文案不要改來改去,因為 fb 的 cache 真的很難搞
廢話前言:
已經很久沒寫部落格了,其實很懶得寫,但這東西真的花了我很多時間
一個專案可能半天就寫完了,剩下一天半都在處理 fb cache 的問題
facebook 官方提供的 Debugger 工具不知道按過幾百次了,抓到的圖文還是舊的
所以以下提供解決的方法,會造成這樣的原因有很多種
但最重要的是.....最好要求需求單位文案不要改來改去,因為 fb 的 cache 真的很難搞
不想看廢話前言直接按此
===================================================
會來研究這個是因為有網友在問,怎麼用 sharedposts 都取不到資料,所以就來研究一下
因為我印象中之前好像是可以的~
如果只看標題似乎感覺很簡單似的,因為語法官網也寫得很清楚
就是使用 /{object-id}/sharedposts
https://developers.facebook.com/docs/graph-api/reference/v2.1/object/sharedposts
痾.....雖然之前寫過判斷是否加入粉絲團的方式
但是 pages.isFan 似乎存在一些問題
有些人可以正常 run,有些人看到一片空白,有些人一直跳出來說他沒加入粉絲團 = =
然後我找了一下 pages.isFan 這東西在 Facebook Developer 裡面似乎找不到了
不知道是換地方還是根本就是舊方法要淘汰了?
因為寫法其實很多種,所以這次改用 FQL 來寫
然後此篇不限於 Facebook APP,一般web 網站也是一樣寫法
想跳過廢話前言直接看Graph API的請點進內文後 按此
====================================
前言 :
因為前一篇......
取得Facebook 粉絲團中,某篇文章按讚的人數 + 名單 + 個人資料 (使用 FQL)
根據有人使用過後的結果後熱心的回報....用FQL取得的返回內容有個致命的問題
就是會有筆數上限的限制
相關文章更新歷程
=======================================
update : 2014/9/23
使用Graph API 取得留言分享的名單 (sharedposts) 請看這篇 :
使用Facebook Graph API 取得分享Po文的使用者名單 (sharedposts)
update : 2014/9/11
此篇是使用FQL,如要改成使用 Graph API 請看下面這篇 :
** 老文新貼 **
這篇其實是 2011年我在公司做部門分享時寫的
用的也是我在公司寫的專案,剛剛試用了一下還可以玩耶!
( code 寫得很爛請別在意,精神有到就好 = =)
因為 FB 改了 n 版了
如果在發佈塗鴉牆有遇到 API Error Code: 191 的可以參考一下這篇
Facebook 發佈到塗鴉牆
其實 FB.ui 跟 FB.api 都可以發佈到塗鴉牆
兩者的差異是一個會跳出 dialog 詢問,一個是直接就貼塗鴉牆了
FB.init({ appId: '你的 app ID', status: true, cookie: true, xfbml: true, channelURL: 'http://www.xxxxxxxx.com.tw/channel.html', oauth: true }); FB.getLoginStatus(function (response) { if (response.status === 'connected') { var uid = response.authResponse.userID; //var accessToken = response.authResponse.accessToken; //accessToken 的功用可以看這裡 http://developers.facebook.com/docs/reference/api/">http://developers.facebook.com/docs/reference/api/ login_success(uid); } else { FB.login(function (response) { if (response.authResponse) { var uid = response.authResponse.userID; var accessToken = response.authResponse.accessToken; login_success(uid); } else { alert('登入失敗!'); } }, { scope: 'email,publish_stream' }); } }) function login_success(uid){ /*var body = '測試一下測試一下測試一下測試一下'; FB.api('/me/feed', 'post', { message: body }, function(response) { if (!response || response.error) { alert('Error occured'); } else { alert('Post ID: ' + response.id); } }); */ FB.ui( { method: 'feed', name: 'Facebook Dialogs', link: 'http://www.suncolor.com.tw', picture: 'http://fbrell.com/f8.jpg', caption: '測試一下', description: '測試兩下測試兩下測試兩下' }, function(response) { if (response && response.post_id) { alert('Post was published.'); } else { alert('Post was not published.'); } } ); }
FB.ui 會長這樣
FB.api 會直接這樣
工作上常常會用到需要結合 FB 的功能
以下就我有寫過且遇到的筆記一下
首先不管你要幹嘛,當然是要有個 Facebook 的 APP ID
申請方式如下 :
首先來到此頁 https://developers.facebook.com/apps
點右上方的建立新應用程式
然後填寫 APP 名稱與命名空間後按繼續
是這樣的
前幾天在寫 Facebook APP 的時候有使用到 FB.login
因為那天 FB.getLoginStatus 莫名奇妙壞去
只好每次開頁面都呼叫 FB.login 出來檢查一次
但這其實是個很不智的作法,因為會有....
1.會跳出視窗,某些瀏覽器會擋
2.會有錯誤訊息,說你沒有權限
這其實是老梗了,應該不少人知道
但是這個老梗還是有讓我學到些東西
就是別人分享你網址到塗鴉牆的時候,可以用下面這些meta tag 來事先定義好內容
http://ogp.me/ <----- 請來這查
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<title>The Rock (1996)</title>
<meta property="og:title" content="The Rock"/>
<meta property="og:type" content="movie"/>
<meta property="og:url" content="http://www.imdb.com/title/tt0117500/"/>
<meta property="og:image" content="http://ia.media-imdb.com/rock.jpg"/>
<meta property="og:site_name" content="IMDb"/>
<meta property="fb:admins" content="USER_ID"/>
<meta property="og:description" content="A group of U.S. Marines, under command of a renegade general, take over Alcatraz and threaten San Francisco Bay with biological weapons."/>
... </head> ...
</html>
但是如果你之前已經分享過,但是你現在想要改成上面這樣自訂分享訊息的話
請到這個網頁來輸入網址 http://developers.facebook.com/tools/debug
因為據說 facebook 會暫存這個資料24h
只是一個發佈到塗鴉牆的動作讓我搞了很久.....
一直卡在發佈時會被瀏覽器擋住 (頁面載入就發佈到塗鴉牆)
印象中之前寫某個facebook app也發生過,後來發現好像是跟IE安全性有關
XSS篩選器停用應該就可以.....但又不能叫每個user 自己停用
然後那時候就懶惰了....沒有繼續找如何解決
然後這次搞定了 code 如下 :
首先當然是要先建一個 APP
官網有飯粒
https://developers.facebook.com/docs/appsonfacebook/tutorial/
然後記得 Canvas URL結尾一定要是 / or ?
所以我是這樣打
http://localhost:2600/FBTest/default.aspx?
再來先引用這個