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);
    }
}

值得注意的是,除了对我来说看起来不太正确的之外,您不会使用i其他if (i == 0) ... else ...优化,除了另一个优化是不为每次迭代运行 LINQ,而是提前选择您想要的那些,以便您可以将实际推文传递给progressTweet.

至于保持这个实际答案,我不希望.ToList().ToString()是正确的。

于 2012-11-15T11:21:54.647 回答
0

我不熟悉您正在使用的库,但是您会看到代码部分有tweet.Type,tweet.Count等......必须有一个名为“Description”或“Body”或“Content”的成员。Intellisense 应该能够为您提供帮助(按推文。应该展开您可以对对象执行的操作的列表)。知道了这一点,您现在可以构造要存储在列表中的字符串(通过迭代 中的所有对象statusTweets),可能类似于用户名和推文正文?

ToString 是一个运算符,当未定义时,它将简单地将对象类型输出为字符串,这不是您想要的。

于 2012-11-15T11:20:12.657 回答
0

如果您需要最新的 1000 行,为什么不尝试 Take(1000) 以 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 回答