Facebook の API は、アクセスしようとしているデータが原因で、少し奇妙になることがあります。この質問にはいくつかの部分があります。
限界
制限は、データが返されたときに適用されますが、アクセス許可とアクセス制御が生成される前に適用されます。これについては、昨年のブログ投稿: Limits in the Graph API で説明されています。
権限
さらに重要なことは、可能な限りすべての FB 権限を持つトークンを自分自身に与えたとしても、作成したすべてのものにアクセスできるわけではないということです。友人のフィードに何かを投稿したとしますが、そのフィードはパブリック プライバシーに設定されていません。あなたのトークンを使用してその友人のフィードに対してクエリを実行しても、データが返されることはありません (または、少なくとも約 1 年前はそうでした)。
API自体
昨年グラフ API を使用していたときに発見した最も驚くべきバグの 1 つは、ページングの処理方法です。Graph API では、limit、offset、since/until の 3 つのフィルターを使用できます。Facebook はどこかで、可能な限りページングのために since/until の日付のみを使用することを推奨しています (そして当然のことです)。なぜそれを行うのか、理論に基づいてオフセットを行うのかについての議論を無視します。実際には、次のクエリは時間の経過とともに劣化するために使用されます。
// This obviously isn't valid as written, but you the params change as described
limit=fixed-value&offset=programmatic-increase&since=some-fixed-date-here
理由: 日付範囲とオフセットは、互いに適切に動作しません。例として、次の初期クエリを作成したとします。
// My example query
limit=20&since=1334555920
--> {#1,#2, ... #20}
当然、より多くのデータをページングする必要があります。結果は次のようになります (正確なパターンは思い出せませんが、一番上n
は繰り返しになり、結果のリストは次のように切り捨てられn/2
ます)。
// My example query
limit=20&since=1334555920&offset=20
---> {#10, #11 ... #25}
なぜそれが起こったのかはわかりませんでしたが、最終的にクエリは先細りになり、何も返さず、約 50 ~ 100 個の一意の値しか取得できなくなりました。ただし、日付のみを使用してページングした場合は、データが許す限り続けることができます。
これはバグであり、これは少し前のものであることに注意してください。ここでの主な教訓は、クエリを変更してまったく同じ結果になるように変更しなければ、このバグを見つけることはできなかったということです (投稿 #10-30 に基づく特定の日付範囲を、制限 = 20、オフセット = 10 と比較)。結果はかなり異なっていました。