首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linq-to-twitter泛洪get

linq-to-twitter泛洪get
EN

Stack Overflow用户
提问于 2020-05-18 22:44:55
回答 1查看 79关注 0票数 0

我尝试了下面的代码,但它不完全是我想要的。只有一次珍珠洪水要来了。有90次洪水。RT不应该出现,而应该只通过调用来泛洪。

作为一个例子,我分享了这张照片。在这种情况下,我必须做什么。

代码语言:javascript
复制
  const int MaxSearchEntriesToReturn = 100;
        const int SearchRateLimit = 180;

        string searchTerm = "HANEDANLAR MASASININ YER ALTI EGEMENLİĞİ:RİO TİNTO";

        // oldest id you already have for this search term
        ulong sinceID = 1;

        // used after the first query to track current session
        ulong maxID;

        var combinedSearchResults = new List<Status>();

        List<Status> searchResponse =
            await
            (from search in ctx.Search
             where search.Type == SearchType.Search &&
                   search.Query == searchTerm &&
                   search.Count == MaxSearchEntriesToReturn &&
                   search.SinceID == sinceID &&
                   search.TweetMode == TweetMode.Extended
             select search.Statuses)
            .SingleOrDefaultAsync();

        if (searchResponse != null)
        {
            combinedSearchResults.AddRange(searchResponse);
            ulong previousMaxID = ulong.MaxValue;
            do
            {
                // one less than the newest id you've just queried
                maxID = searchResponse.Min(status => status.StatusID) - 1;

                Debug.Assert(maxID < previousMaxID);
                previousMaxID = maxID;

                searchResponse =
                    await
                    (from search in ctx.Search
                     where search.Type == SearchType.Search &&
                           search.Query == searchTerm &&
                           search.Count == MaxSearchEntriesToReturn &&
                           search.MaxID == maxID &&
                           search.SinceID == sinceID &&
                           search.TweetMode == TweetMode.Extended
                     select search.Statuses)
                    .SingleOrDefaultAsync();

                combinedSearchResults.AddRange(searchResponse);
            } while (searchResponse.Any() && combinedSearchResults.Count < SearchRateLimit);


            combinedSearchResults.ForEach(tweet => 
                Console.WriteLine(
                    "\n  User: {0} ({1})\n  Tweet: {2}",

                    tweet.User.ScreenNameResponse,
                    tweet.User.UserIDResponse,
                    tweet.Text ?? tweet.FullText)
                );
        }
        else
        {
            Console.WriteLine("No entries found.");
        }

        ViewBag.Twet = combinedSearchResults.ToList();
EN

回答 1

Stack Overflow用户

发布于 2020-05-21 04:40:48

我拥有LINQ to Twitter。分页搜索可以返回更多的值。下面是一个例子:

代码语言:javascript
复制
const int MaxSearchEntriesToReturn = 100;
const int SearchRateLimit = 180;

string searchTerm = "Flood Name";

// oldest id you already have for this search term
ulong sinceID = 1;

// used after the first query to track current session
ulong maxID; 

var combinedSearchResults = new List<Status>();

List<Status> searchResponse =
    await
    (from search in twitterCtx.Search
     where search.Type == SearchType.Search &&
           search.Query == searchTerm &&
           search.Count == MaxSearchEntriesToReturn &&
           search.SinceID == sinceID &&
           search.TweetMode == TweetMode.Extended
     select search.Statuses)
    .SingleOrDefaultAsync();

if (searchResponse != null)
{
    combinedSearchResults.AddRange(searchResponse);
    ulong previousMaxID = ulong.MaxValue;
    do
    {
        // one less than the newest id you've just queried
        maxID = searchResponse.Min(status => status.StatusID) - 1;

        Debug.Assert(maxID < previousMaxID);
        previousMaxID = maxID;

        searchResponse =
            await
            (from search in twitterCtx.Search
             where search.Type == SearchType.Search &&
                   search.Query == searchTerm &&
                   search.Count == MaxSearchEntriesToReturn &&
                   search.MaxID == maxID &&
                   search.SinceID == sinceID &&
                   search.TweetMode == TweetMode.Extended
             select search.Statuses)
            .SingleOrDefaultAsync();

        combinedSearchResults.AddRange(searchResponse);
    } while (searchResponse.Any() && combinedSearchResults.Count < SearchRateLimit);

    combinedSearchResults.ForEach(tweet =>
        Console.WriteLine(
            "\n  User: {0} ({1})\n  Tweet: {2}",
            tweet.User.ScreenNameResponse,
            tweet.User.UserIDResponse,
            tweet.Text ?? tweet.FullText)); 
}
else
{
    Console.WriteLine("No entries found.");
}

有几件事需要注意:

  • Count设置为MaxSearchEntriesToReturn,因为它的默认值为15,并且您希望最小化查询的数量。
  • while循环检查SearchRateLimit,因为存在速率限制,这将导致您获得HTTP429。
  • 注意到我是如何使用SinceID和MaxID来浏览结果的。请参阅Twitter API文档中的Working with Timelines以了解这些是什么。
  • 另外,请阅读Search API文档并注意
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61872234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档