Open Graph APIとRestFB クライアントを使用してFacebook のユーザーのニュース フィードをクエリするときに、パラメータを 4 つの異なる値 (10、100、1000、10000)でテストするlimit
Java で小さなスクリプトを作成しました。ご覧のとおり、奇妙な動作をしています...
シナリオ:
public static void main(String[] args) {
// vars
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
FacebookClient client = new DefaultFacebookClient(accessToken);
Connection<Post> home;
List<Post> postList;
Map<String, Post> postMap;
int i;
// limits to test
String[] limits = {"10", "100", "1000", "10000"};
for (String limit : limits) {
// init list and map (looking for duplicate posts)
postList = new LinkedList<Post>();
postMap = new LinkedHashMap<String, Post>();
// get news feed
home = client.fetchConnection(id + "/home", Post.class, Parameter.with("limit", limit));
// going through pages
i = 1;
for (List<Post> page : home) {
for (Post post : page) {
// store into list
postList.add(post);
// store into map (unique post id)
postMap.put(post.getId(), post);
}
i++;
}
// sort posts by created time
Collections.sort(postList, new Comparator<Post>() {
@Override
public int compare(Post post1, Post post2) {
return post1.getCreatedTime().compareTo(post2.getCreatedTime());
}
});
// log
try {
FileWriter out = new FileWriter("log/output.txt", true);
out.write("LIMIT: " + limit + "\n");
out.write("\tPAGES: " + (i - 1) + "\n");
out.write("\tLIST SIZE: " + postList.size() + "\n");
out.write("\tMAP SIZE: " + postMap.size() + "\n");
out.write("\tOLDER POST: " + dateFormat.format(postList.get(0).getCreatedTime()) + "\n");
out.write("\tYOUGNER POST: " + dateFormat.format(postList.get(postList.size() - 1).getCreatedTime()) + "\n");
out.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
出力:
LIMIT: 10
PAGES: 7
LIST SIZE: 56
MAP SIZE: 56
OLDER POST: 2009-03-22 14:58:03
YOUGNER POST: 2012-05-11 15:48:49
LIMIT: 100
PAGES: 3
LIST SIZE: 174
MAP SIZE: 172
OLDER POST: 2012-01-12 23:01:34
YOUGNER POST: 2012-05-11 15:48:49
LIMIT: 1000
PAGES: 2
LIST SIZE: 294
MAP SIZE: 292
OLDER POST: 2009-03-22 14:58:03
YOUGNER POST: 2012-05-11 15:48:49
LIMIT: 10000
PAGES: 2
LIST SIZE: 294
MAP SIZE: 292
OLDER POST: 2009-03-22 14:58:03
YOUGNER POST: 2012-05-11 15:48:49
解釈と質問:
明らかに、ユーザーがアカウントを作成してからニュース フィードに投稿したすべての投稿を取得することはできません。リミットは有限ですか?
100、1000、および 10000 の場合、返されたニュース フィード全体で
limit
毎回2 つの重複した投稿があったに違いありません (174 - 172 = 194 - 192)。なんで?個人のニュース フィードで同じ投稿を 2 回見たことはありません...a が 100 の場合 (およびその場合のみ)、
limit
取得する古い投稿は 2012 年に作成されたものであり、一方、limit
make の他の値は、2009 年に作成された投稿を取得するクエリを作成します。上限limit
(1000または 10000)、クエリは古い投稿を取得します。しかし、なぜalimit
of 10 を使用すると、クエリが 100 で制限されたクエリよりも古い投稿を取得するようになるのでしょうか?最後になりましたが、同じ数の投稿が得られません。明らかに、
limit
が高いほど、検索された投稿の数が多くなります。私が最初に考えたのは、小さいページの唯一の結果はlimit
ページ数の増加であり (実際にはそうです)、取得された投稿の数は変わらないということです。しかし、そうです。なんで?とはいえ、投稿数は1000のaと10000のlimit
aと同じなので、投稿数は100と1000の間で収束しているようです。limit
limit
PS:since
および/またはuntil
パラメータをクエリに指定しても、何も変わりません。
回答/コメントは大歓迎です:)
乾杯。
編集:
これは私の最高の思い出です:
LIMIT: 200
PAGES: 3
LIST SIZE: 391
MAP SIZE: 389
OLDER POST: 2012-01-27 14:17:16
YOUGNER POST: 2012-05-11 16:52:38
なんで200?ドキュメントのどこかに指定されていますか?