2013-07-27 25 views
0

我有一個Facebook應用,我想過濾用戶的新聞提要,以獲取最新的帖子/操作,通過我的應用發佈在Graph API中。如何在Graph API中過濾用戶的新聞提要到特定應用的帖子/操作

我找到了這個:How to get activity from my app with Facebook Graph API? 這是一個可以得到一個特定的朋友(或用戶本身)的行動/職位,我需要的是幾乎相同的,差異是我需要這個「流」由使用我的應用程序的用戶的所有朋友,而不是一個用戶。

然後我發現這個:Facebook graph api : how to filter app feeds。對於這一個,問題中的示例本身會返回空數據(具有read_stream權限的相應訪問令牌)。唯一的答案表明使用FQL。我試過SELECT post_id, message, comments, likes FROM stream WHERE app_id = MY_APP_ID,我得到這個錯誤:

{ 
    "error": { 
    "message": "Your statement is not indexable. The WHERE clause must contain an 
     indexable column. Such columns are marked with * in the tables linked from 
     http://developers.facebook.com/docs/reference/fql ", 
    "type": "NoIndexFunctionException", 
    "code": 604 
    } 
} 

如何檢索所有用戶的最後一個(如100)員額,由一個特定的應用程序和他們的朋友列表,從用戶的範圍是什麼?

+0

[Facebook Graph API:如何按應用程序過濾home&feed?](http://stackoverflow.com/questions/7910725/facebook-graph-api-how-to-filter-home-feed-按應用程序) –

回答

2

對於所有的FQL查詢,您的WHERE子句必須包含至少一個可索引字段(這些字段在文檔中的字段名旁邊標有星號) - 出於性能原因。

因此,對於stream table,您可以選擇source_id(該帖子所在牆的用戶的ID)或filter_key。您可以從stream_filter表中讀取有效的過濾器密鑰 - 但每個用戶都擁有過濾器密鑰nf以顯示其新聞Feed中顯示的內容。 (post_id也是可編入索引的,但對我們來說沒有用處)

因此,您可以嘗試使用WHERE filter_key = 'nf' AND app_id = 'YOUR_APP_ID'進行篩選 - 這應該會讓您的活動用戶能夠在其Feed中看到通過您的應用。

您也可以嘗試用SOURCE_ID,過濾即要麼等於me()(當前用戶在FQL),或在你的朋友(他的ID,您就可以從friend表中獲取名單之中,再次使用me() ,作爲一個子查詢) - 所以這個樣子,

… WHERE (source_id = me() OR source_id IN (SELECT uid1 FROM friend WHERE uid2 = me())) AND app_id = 'YOUR_APP_ID'

- 但我認爲,將有較少的良好表現,所以我帶過濾器的鍵第一次嘗試,看看是否讓你的帖子,你想。


編輯:所以,作爲提問者發現,使用/me/home?filter=app_MY_APP_ID作品顯然更好,也更容易。無論哪個人可能需要這個,他們應該使用這個版本,因爲它更可靠 - FQL通常會給人們期望的結果更少。

+0

您的第一個示例(使用'nf'鍵進行篩選)有效,但它只從我的源中返回2個帖子。當我訪問https://www.facebook.com/?sk=app_MY_APP_ID時,我可以看到來自我的應用的更多帖子,沒有任何問題。爲什麼我只能從fql查詢中得到兩個結果? (不,我不限制,不,也沒有返回分頁數據) –

+1

我認爲有這樣做的更好的方法:http://stackoverflow.com/questions/7910725/facebook-graph-api- how-to-filter-home-feed-by-application有一個答案圖路徑:me/home?filter = app_MY_APP_ID完美地工作。返回一些結果,但分頁,所以它是可以接受的。我現在已經意識到我的問題是這個問題的重複。 –

+0

好的,如果這樣做更好的話,可以這樣做:-)使用FQL更簡單,是的,因爲他們實現的方式,通過FQL獲取所需的或期望的所有數據可能非常棘手(或者有時是不可能的) FQL。我會更新我的答案,將您的發現考慮在內。 – CBroe

相關問題