0

私は、毎日ユニークなコメント投稿者ごとに Web ページのすべての毎日のコメントをカウントするコンテストを実行しています。月末にコメント票が最も多かった人が優勝。私はこれのために完全に機能するロジックを書いています...今日まで。

ページに 900 を超えるコメントがあると、投票カウンターの上昇が止まります。これはページネーションに関係していると考えたので、FQL クエリを変更して LIMIT と OFFSET を使用して一度に 100 個のコメントを解析し、投票カウント関数の結果を結合しましたが、クエリを実行すると (手動でも、https://graph.facebook.com/comments url をアドレス バーに追加) 500 から 600 のコメントが大量に生成されるため、Web ページの最後の 400 程度のコメントは返されません!

このメソッドは失敗しているため、コメント データを取得するためのより信頼できる方法はありますか?

更新: いくつかのコードを提供していますが、Graph API と同じ問題が FQL にも残っていることがわかりました。これが私のグラフ API 呼び出しです。

https://graph.facebook.com/comments/?ids=http://www.burlesquebitch.com/article.php?id=538&limit=500

900 を超えるコメントが存在する場所で制限を最大 600 まで上げると (または結果がその範囲を超えるオフセットを追加すると)、失敗し始めます。以前のコメントは消えます。結果を数えてみると、500 から 600 の間のどこかにあります。

    https://graph.facebook.com/comments/?ids=http://www.burlesquebitch.com/article.php?id=538&limit=1000

その後、最終的に fql が機能するようになりました。

$fql_query_result =  file_get_contents("https://graph.facebook.com/fql?q=SELECT+object_id,+id,+text,+time+,+fromid+FROM+comment+WHERE+object_id='366760226746431'+LIMIT+1000");
$data = json_decode($fql_query_result,true);

これも失敗しますが、800 ~ 900 くらいです。いずれにせよ、悪い行動は同じです。結果を日付範囲に分離することで、失敗のしきい値内に収まることを期待して、クエリを時間で制限するいくつかの実験も行いました。

$fql_query_result =  file_get_contents("https://graph.facebook.com/fql?q=SELECT+object_id,+id,+text,+time,+fromid+FROM+comment+WHERE+object_id='366760226746431'+AND+time>1365984000+AND+time<1366416000+LIMIT+500");
$data = json_decode($fql_query_result,true);

しかし、サイコロはありません。時間比較で < を > にすると、クエリ全体が失敗し、何も返されません。理想的には、以下の回答で示唆されているように、ページング情報を取得したいのですが、クエリで SELECT できません... _cursor で終わるものを取得しようとすると、クエリは空を返します。

私は、Graph API コードに存在する恐ろしいバグが何であれ、FQL コードにも拡張されていると結論せざるを得ません。このサイズの Facebook オブジェクトからデータを取得する方法は他にありません。

4

1 に答える 1

1

https://developers.facebook.com/docs/reference/api/pagination/で説明されているように、カーソルのページネーションを試してみてください。

カーソル ページングで返される結果は、表示する権限のないレコードを非表示にした後でも、要求された制限に一貫して一致します (たとえば、10 レコードを要求したが、それらのレコードのうち 3 つのレコードを表示する権限がない場合、3 つの追加レコード透過的にプルされるため、完全な 10 レコードがプルされます)。

post_id_cursor の例:

SELECT text, post_id, post_id_cursor FROM comment WHERE post_id='22707976849_10151395520781850' ORDER BY time DESC limit 50

最後のコメントの post_id_cursor を取得し、>post_id_cursor記号で次のページに移動します

SELECT text, post_id, post_id_cursor FROM comment WHERE post_id='22707976849_10151395520781850' AND  post_id_cursor>'Mjg3NA==' ORDER BY time DESC limit 50

object_id_cursor の例は同じです:

SELECT text, post_id, object_id_cursor FROM comment WHERE object_id='10151395520696850' ORDER BY time DESC limit 50

SELECT text, post_id, time, object_id_cursor FROM comment WHERE object_id='10151395520696850' AND object_id_cursor>'Mjg3NA==' ORDER BY time DESC limit 50

アプリの詳細設定 ( https://developers.facebook.com/apps/YOUR_APP_ID/advanced ) で「2013 年 7 月の重大な変更:」フィールドが有効になっていることを確認して ください。詳細については、https: //developers.facebook.com/roadmap をご覧ください。

ここに画像の説明を入力

于 2013-05-08T04:13:58.740 に答える