1

最新の 1000 ツイートを取得しようとしています。LinqToTwitter のすべてのドキュメントを読みました。私は自分自身を書いてみました:

 void GetUserTimeLine(TwitterContext ctx)
     {
        List<String> tweetList = new List<String>();
        String[] breakWords;
        ulong maxID = 0000;
        ulong sinceID = 3396455589; //oldest tweetID
        for (int i = 0; i < 5; i++)
        {
            if (i == 0)
            {
                var statusTweets =
               from tweet in twitterCtx.Status
               where tweet.Type == StatusType.User &&
                     tweet.Count == 200 &&
                     tweet.SinceID == sinceID &&
                     tweet.ScreenName == "nyptweets"
               select tweet;



                tweetList.Add(statusTweets.ToList().ToString());
                breakWords = tweetList[tweetList.Count - 1].Split(' ');
                maxID = Convert.ToUInt64(breakWords[5].ToString());
            }
            else
            {
                var statusTweets =
               from tweet in twitterCtx.Status
               where tweet.Type == StatusType.User &&
                     tweet.Count == 200 &&
                     tweet.SinceID == sinceID &&
                     tweet.MaxID == maxID &&
                     tweet.ScreenName == "nyptweets"
               select tweet;
               tweetList.Add(statusTweets.ToList().ToString());
               breakWords = tweetList[tweetList.Count - 1].Split(' ');
               maxID = Convert.ToUInt64(breakWords[5].ToString());
            }


        }
       string dwnloadFilePath = @"C:\temp\Tweet.log";

        // CREATE AN EMPTY TEXT FILE
        FileStream fs1 = null;
        if (!File.Exists(dwnloadFilePath))
        {
            using (fs1 = File.Create(dwnloadFilePath)) ;
        }

        // WRITE DATA INTO TEXT FILE
        if (File.Exists(dwnloadFilePath))
        {
            using (StreamWriter sw = new StreamWriter(dwnloadFilePath))
            {
                File.WriteAllLines(dwnloadFilePath, tweetList);
             }
          }
       }

誰かがそれを手伝ってくれますか?問題は、単一のツイートを選択するとそれが ではないstringため、それを に追加してList<string>も機能しないことです。

4

3 に答える 3

1

そのためだけに、次のようにコードをクリーンアップすることを検討する必要があります (半分の長さ):

public class Twitter
{
    private List<String> tweetList;
    private String[] breakWords;
    private ulong maxID = 0000;
    private ulong sinceID = 3396455589; //oldest tweetID

    private void progressTweet(int i)
    {
        var statusTweets =
               from tweet in twitterCtx.Status
               where tweet.Type == StatusType.User &&
                     tweet.Count == 200 &&
                     tweet.SinceID == sinceID &&
                     tweet.ScreenName == "nyptweets"
               select tweet;

        if (i == 0)
            tweetList.Add(statusTweets.ToList().ToString());
        else
            tweetList.Add(statusTweets.Where(x => x.MaxID == maxID).ToList().ToString());

        breakWords = tweetList[tweetList.Count - 1].Split(' ');
        maxID = Convert.ToUInt64(breakWords[5].ToString());
    }

    void GetUserTimeLine(TwitterContext ctx)
    {
        tweetList = new List<String>();

        for (int i = 0; i < 5; i++)
            progressTweet(i);

        File.WriteAllLines(@"C:\temp\Tweet.log", tweetList);
    }
}

注目に値するのは、別の最適化は、反復ごとにLINQを実行するのではなく、事前に必要なものを選択することであるということを除いて、私にはまったく正しくないifor 以外を使用しないことです。if (i == 0) ... else ...実際のツイートを に転送しprogressTweetます。

これを実際の答えにしておくために、私は.ToList().ToString()正しいとは思っていません。

于 2012-11-15T11:21:54.647 に答える
0

最新の 1000 行が必要な場合は、Take(1000) order by tweek 日付の降順を試してみませんか。

こんなふうになります

    var latestTweets= (from tweet in twitterCtx.Status
                   where tweet.Type == StatusType.User &&
                         tweet.Count == 200 &&
                         tweet.SinceID == sinceID &&
                         tweet.ScreenName == "nyptweets"
                       orderby <tweet.tweetdate> descending
                   select tweet).Take(1000);

foreach(var tweet in latestTweets){
 // Work on each tweet object.
}
于 2012-11-15T11:36:32.767 に答える
0

私はあなたが使用しているライブラリに精通していませんがtweet.Typetweet.Count、 などがあるコード セクションが表示されます...「説明」、「本文」、または「コンテンツ」と呼ばれるメンバーが必要です。インテリセンスはそれを手助けできるはずです (つぶやきを押すと、オブジェクトでできることのリストが展開されます)。これを知っていれば、リストに保存したい文字列を作成できます ( 内のすべてのオブジェクトを反復することによりstatusTweets)。おそらく、ユーザー名やツイート本文のようなものでしょうか?

ToString は、定義されていない場合、オブジェクト タイプを単に文字列として出力する演算子です。これは、必要なものではありません。

于 2012-11-15T11:20:12.657 に答える