【问题标题】:How to use cursors to navigate a collection of twitter data scraped using a twitter API call如何使用游标导航使用 twitter API 调用抓取的 Twitter 数据集合
【发布时间】:2014-10-19 21:21:08
【问题描述】:

如何使用游标通过 twitter api 调用进行迭代?我正在尝试使用GET followers/list API 调用获取我的 Twitter 关注者的位置。我已经在我的应用程序中完成了所有与身份验证相关的事情。

这是我到目前为止所做的

            var resource_url = "https://api.twitter.com/1.1/followers/list.json";
            var cursor = "-1";
            var api_path = resource_url;

            do {
                var url_with_cursor = api_path + "&cursor=" + cursor; 

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url_with_cursor);
                request.Headers.Add("Authorization", authHeader);
                request.Method = "GET";
                request.ContentType = "application/x-www-form-urlencoded";

                WebResponse response = request.GetResponse();

                string result = new StreamReader(response.GetResponseStream()).ReadToEnd();

                JObject j = JObject.Parse(result);                    
                cursor = j["next_cursor_str"].ToString();
                Console.WriteLine(cursor);

            }
            while ( cursor != "0" );

但是当我运行上面的代码时,我得到一个异常说“远程服务器返回一个错误:(401)未经授权。”在我的代码的以下行中:

WebResponse response = request.GetResponse();

也就是说,响应有问题。

除了developer site 之外,我还没有在任何地方看到关于如何使用游标获取 twitter 数据以导航集合的适当示例。

【问题讨论】:

  • That means there's something wrong with the response. - 是的,这就是异常的含义。那么有什么例外呢?
  • 哦,很抱歉!我没有放那个!我会编辑帖子。并且异常说“远程服务器返回错误:(401)未经授权”
  • 这意味着您没有正确设置 OAuth 令牌。
  • 我能够获取前 20 个关注者的数据,而不是其他关注者的数据,因为我必须使用 next_cursor 或 next_cursor_str 访问下一组 20 个关注者。但我不知道把它放在哪里。是在提出请求之前还是之后?
  • 你为什么不用你实际使用的代码更新你的问题,或者更好的是stackoverflow.com/help/mcve

标签: c# api twitter


【解决方案1】:

Twitter 要求您在允许提取数据之前使用 api 进行身份验证/授权。您需要按照他们的文档获取 OAuth 令牌。

另外,使用包装库可能比直接访问 twitter 更容易。 Twitter 为 .Net 列出了几个:https://dev.twitter.com/docs/twitter-libraries

例如tweetSharp:

 using TweetSharp;

 // In v1.1, all API calls require authentication
 var service = new TwitterService(_consumerKey, _consumerSecret);
 service.AuthenticateWith(_accessToken, _accessTokenSecret);

 var tweets = service.ListTweetsOnHomeTimeline(
                      new ListTweetsOnHomeTimelineOptions());

 foreach (var tweet in tweets)
 {
     Console.WriteLine("{0} says '{1}'", tweet.User.ScreenName, tweet.Text);
 }

【讨论】:

  • 再次感谢。我已经在我的应用程序中完成了身份验证。 :) 我会尝试使用包装库。 :)
  • 我必须下载 tweetsharp 并将其中的所有内容都包含到我的项目中吗?它有很多东西。 ://
  • 一般来说,使用将网络调用封装到社交媒体 API 的库通常更容易。不会消除所有的麻烦,但确实有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 2013-09-01
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多