-6

我正在尝试从 Twitter 获取推文。

将所有数据存储到数据库中,然后将其传递给 Siebel。

我收到一个错误:

指数超出范围

下面是代码:

 public void Call_Tweet_Update()
    {
        var service = new TwitterService(Consumer_Key, Consumer_Secret);
        service.AuthenticateWith(Access_Token, AccessToken_Secret);

        var tweets = service.ListTweetsOnHomeTimeline(new ListTweetsOnHomeTimelineOptions { Count = 200 });
        string[] twt_id = new string[50];
        long id = 0;
        int i = 0;
        int increment = 0;
        string twtid;
        string screenname;

        foreach (var tweet in tweets)
        {
            if (tweet.InReplyToStatusId.ToString() != "")
            {
                if ((tweet.User.ScreenName == "IIPL_LTD") || (tweet.Text.StartsWith("@IIPL_LTD")))
                {
   string replyid = tweet.InReplyToStatusId.ToString();

    while (replyid != "")
    {
        if (i == 0)
        {
            twt_id[i] = tweet.Id.ToString();
        }
        id = Convert.ToInt64(replyid);
        twtid = tweet.Id.ToString();

        i = i + 1;
        twt_id[i] = twtid;
        replyid = tweet.InReplyToStatusId.ToString();//Here I get an error
        increment = increment + 1;
    }
  }
}

有任何想法吗?提前致谢。

4

1 回答 1

6

您要求 200 条推文,而您只将字符串数组的大小设置为 50,因此它在处理的第 51 条推文时爆炸。

这段代码是问题所在:

var tweets = service.ListTweetsOnHomeTimeline(
    new ListTweetsOnHomeTimelineOptions { Count = 200 });
string[] twt_id = new string[50];

更改您请求的推文数量或更改字符串数组的大小以匹配请求的推文数量。

更新:

至少可以说,这种逻辑适得其反:

if (i == 0)
{
    twt_id[i] = tweet.Id.ToString();
}
id = Convert.ToInt64(replyid);
twtid = tweet.Id.ToString();

i = i + 1;
twt_id[i] = twtid;

您正在将相同的推文添加到字符串数组中的两个不同索引,将代码更改为:

twt_id[i] = tweet.Id.ToString();
i = i + 1;

的目的是什么replyid = tweet.InReplyToStatusId.ToString();,您在每次循环迭代时都设置一个值,只是为了不在任何地方使用它,与id = Convert.ToInt64(replyid);and相同increment = increment + 1;。您肯定需要清理代码中未使用的逻辑。

于 2013-08-12T13:57:24.357 回答