我一直试图获取最新的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>
时,它不起作用。
答案 0 :(得分: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()
是正确的。
答案 1 :(得分:0)
我不熟悉您正在使用的库,但是您看到代码部分有tweet.Type
,tweet.Count
等等...必须有一个名为“Description”的成员,或“身体”或“内容”。 Intellisense应该能够为您提供帮助(按推文。应该扩展您可以对该对象执行的操作的列表)。知道这一点,你现在可以构建你想要存储在列表中的字符串(通过迭代statusTweets
中的所有对象),可能是用户名和推文正文?
ToString是一个操作符,如果没有定义,只会将对象类型输出为字符串,这不是你想要的。
答案 2 :(得分:0)
如果您需要最新的1000行,为什么不按推文日期降序尝试Take(1000)。
就像这样
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.
}