9

restfb を使用してすべての投稿メッセージを取得しようとしています。私のコードは次のとおりです。

public Connection<Post> publicSearchMessages(Date fromDate, Date toDate) {
    Connection<Post> messages = publicFbClient.fetchConnection("search",
            Post.class,
            Parameter.with("q", "Watermelon"),
            Parameter.with("since", fromDate),
            Parameter.with("until", toDate),
            Parameter.with("type", "post"));

    return messages;
}

これは、最新の 25 件の投稿メッセージのみを提供します。

Parameter.with("制限",100 )

制限パラメーターを設定すると、100 メッセージが返されますが、投稿メッセージの取得に制限したくありません。そう、

limit パラメータを設定せずに、検索条件に一致する投稿メッセージの完全なリストを取得できる方法はありますか?

4

4 に答える 4

5

たぶん、ループを使用してみてください。FB は毎回 1000 を超えることはできないため、ループを使用してフィード全体を取得できます。次のようにオフセットを使用します。

Parameter.with("limit", 1000));
Parameter.with("offset", offset));

オフセットは変数になり、その値は 1000、2000、3000... になります。

于 2012-03-30T08:44:05.667 に答える
2

FB から無制限の結果を取得する方法はありません。デフォルトの制限は 25 に設定されています。ご存じのとおり、limitパラメーターを使用してこれを変更できます。Web の検索を制限するための上限が見つかりませんでした。たぶん、あなたはそれを非常に高い金額に設定することができます.

于 2011-11-04T07:55:19.820 に答える
0

最近テストしたように、何も指定する必要はありません。Connection クラスは Iterable を次のように実装します。

  • 25 件の結果を取得する
  • hasNext 処理する次の項目があるかどうかを確認します
  • そうでない場合は、25 件の結果の次のページを取得します

したがって、基本的に行う必要があるのはこれだけです。

Connection<Post> messages = publicFbClient.fetchConnection("search",
        Post.class,
        Parameter.with("q", "Watermelon"),
        Parameter.with("since", fromDate),
        Parameter.with("until", toDate),
        Parameter.with("type", "post"));

for (List<Post> feedConnectionPage : messages) {
        for (Post post : myFeedConnectionPage) {
                 // do stuff with post
        }
}

結果を返す何らかのメソッドが必要な場合は、非常に注意が必要です。何千もの結果を返し、それらをクロールするのに時間がかかる場合があり (数秒から数分、さらには数時間)、結果オブジェクト配列が次のようになる可能性があるためです。本当に大きくなります。非同期呼び出しを使用して、メソッドの結果を定期的にチェックすることをお勧めします。

パラメータ「since」は無視されているようですが。投稿は最新のものから古いものへと取得されますが、ページングを行う際にこのパラメーターが省略されていると思います。

私はあなたのためにそれをより明確にしたことを願っています:)

于 2014-09-10T08:30:30.560 に答える