4

自分のタイムラインに投稿したすべてのツイートを返したいです。

私はLinq To Twitterライブラリを使用しています-

var statusTweets =
                from tweet in twitterCtx.Status
                where tweet.Type == StatusType.User
                      && tweet.UserID == MyUserID
                      && tweet.Count == 200
                select tweet;

                statusTweets.ToList().ForEach(
                    tweet => Console.WriteLine(
                    "Name: {0}, Tweet: {1}\n",
                    tweet.User.Name, tweet.Text));

これは正常に機能し、最初の 200 を戻します。ただし、最初の 200 は、1000 を戻す方法があるため、取得できる最大のようです。next cursor movementこのライブラリの他の部分にあるように、次のページに移動するオプションはないようです。

4

1 に答える 1

4

Count、MaxID、SinceID の組み合わせを使用して、ツイートをページングします。これは奇妙に聞こえますが、ツイート ストリームが継続的に更新されていることを考えると、このアプローチには十分な理由があります。Twitter のドキュメントを参照し、LINQ to Twitter がこれをどのように行うかを説明するブログ投稿、LINQ to Twitter でタイムラインを操作するを書きました。

// last tweet processed on previous query set
ulong sinceID = 210024053698867204;

ulong maxID;
const int Count = 10;
var statusList = new List<status>();

var userStatusResponse =
    (from tweet in twitterCtx.Status
     where tweet.Type == StatusType.User &&
       tweet.ScreenName == "JoeMayo" &&
       tweet.SinceID == sinceID &&
       tweet.Count == Count
     select tweet)
    .ToList();

statusList.AddRange(userStatusResponse);

// first tweet processed on current query
maxID = userStatusResponse.Min(
    status => ulong.Parse(status.StatusID)) - 1;

do
{
    // now add sinceID and maxID
    userStatusResponse =
        (from tweet in twitterCtx.Status
         where tweet.Type == StatusType.User &&
               tweet.ScreenName == "JoeMayo" &&
               tweet.Count == Count &&
               tweet.SinceID == sinceID &&
               tweet.MaxID == maxID
         select tweet)
        .ToList();

    if (userStatusResponse.Count > 0)
    {
        // first tweet processed on current query
        maxID = userStatusResponse.Min(
            status => ulong.Parse(status.StatusID)) - 1;

        statusList.AddRange(userStatusResponse); 
    }
}
while (userStatusResponse.Count != 0 && statusList.Count < 30);
于 2013-09-05T15:59:57.297 に答える