API потоковой передачи Twitter с помощью linq2twitter/tweetinvi

Я хочу создать проект веб-API С# для i.) получить все твиты о статусе userID (нужна помощь/рекомендация, поскольку данные могут быть большими, поэтому какие у меня варианты) ii.) сохранить их в базе данных Azure (надеюсь, я смогу добиться этого) iii.) получить значения БД и отобразить вывод JSON (надеясь, что я смогу этого добиться)

Я пытаюсь добиться этого с помощью API потоковой передачи и LinqToTwitter, но не повезло.

а. StreamingType.Filter : он не возвращает желаемый объект статуса или возвращает ноль, если я использую StreamingType.Filter , Track == userName и Follow == userID

б. StatusType.User: возвращает объект, если я использую StatusType. Но я не должен использовать StatusType.

Могу ли я добиться этого с помощью Tweetinvi, если не использую LinqToTwitter. Пожалуйста, помогите мне достичь этого.

Спасибо. Цените свое время.


person sravan    schedule 21.01.2015    source источник


Ответы (2)


Веб-API по своей природе не имеет состояния, поэтому поток не будет работать независимо от LINQ to Twitter, любого другого инструмента или написания его самостоятельно. По каждому запросу поток запускается и останавливается. Это не имеет смысла, потому что поток предназначен для постоянного и длительного соединения. В Твиттере есть руководство по использованию их потокового API, и кажется, что если вы переподключаетесь слишком часто, могут произойти плохие вещи. раз.

Для веб-API лучше использовать поисковый запрос:

        var searchResponse =
            await
            (from search in twitterCtx.Search
             where search.Type == SearchType.Search &&
                   search.Query == "\"LINQ to Twitter\""
             select search)
            .SingleOrDefaultAsync();

У меня есть запись в блоге на Работа с временными шкалами с помощью LINQ to Twitter, которые могут помочь вам управлять запросом с помощью параметров OnceID и MaxID. Он основан на предыдущей версии LINQ to Twitter, но концепции остались прежними. В загружаемом исходном коде есть демонстрации для пейджинга с другими типами запросов.

Другие примечания:

  • В экземпляре TwitterContext вы можете прочитать свойство RawResult, если вам нужен JSON из запроса. JSON.NET здесь тоже очень полезен.
  • В Azure обратите внимание на DocumentDB, в которой есть хороший набор API, включая LINQ.
person Joe Mayo    schedule 21.01.2015
comment
Спасибо, Джо, я попробую поисковый запрос и сообщу, работает ли он. - person sravan; 22.01.2015
comment
Я хочу фиксировать только твиты статуса, опубликованные пользователем, но не ретвиты. Будет ли поисковый запрос отображать все твиты или есть ограничения? - person sravan; 22.01.2015
comment
Посмотрите на поисковые операторы в документации Twitter API: dev.twitter.com/rest/public/search . Есть оператор from, который вы можете использовать. Вам придется поэкспериментировать, чтобы увидеть, как далеко уходит поиск. Существует также запрос StatusType.User с LINQ для Twitter: ="nofollow noreferrer">linqtotwitter.codeplex.com/, что позволяет установить для IncludeMyRetweets значение false. Для поиска вы можете выполнить запрос LINQ to Objects (после материализации поискового запроса), чтобы исключить твиты, для которых свойство Retweet имеет значение null. - person Joe Mayo; 23.01.2015
comment
б. StatusType.User: возвращает объект, если я использую StatusType. Но я не должен использовать StatusType. А пока попробую поискать - person sravan; 27.01.2015
comment
@sravan я имел в виду запрос состояния, подобный этому: ="nofollow noreferrer">linqtotwitter.codeplex.com/ - person Joe Mayo; 27.01.2015
comment
Привет, Джо, я использовал search.Query == from:@USERID. Я вижу, что searchResponse.Statuses по умолчанию возвращает 15 твитов в качестве счетчика в поисковом запросе (включая ретвиты, ответы). Я изменил количество, установив Count в запросе как && search.Count == 10), и каждый возвращенный твит имеет Retweeted, а IncludeMyReweet имеет значение «false». Я попытался добавить несколько к запросу: tweet.InReplyToScreenName == null && tweet.ExcludeReplies == true && tweet.IncludeMyRetweet == null. Не уверен, где я делаю неправильно. Можете ли вы опубликовать пример кода, применив любой из этих фильтров в запросе LINQ к объектам. Спасибо за вашу помощь. - person sravan; 11.02.2015
comment
Я добавил код для исключения ретвитов: search.Query == "from:@USERID -retweets" //exclude retweets Затем для исключения ответов: var tweetsOnlyList = from status in statusList //Exclude replies where status.InReplyToScreenName == null select new { Text = status.Text, ScreenNameResponse = status.User.ScreenNameResponse, StatusID = status.StatusID }; foreach (var tweet in tweetsOnlyList) { Console.WriteLine("User: {0},\n Tweet: {1},\n maxID : {2}", tweet.ScreenNameResponse,tweet.Text,tweet.StatusID); } - person sravan; 12.02.2015

С tweetinvi вы можете легко сделать это, просто используя следующий код

var fs = Stream.CreateFilteredStream();
fs.AddFollow(userId);
fs.MatchingTweetReceived += (sender, args) => { Console.WriteLine(args.Tweet); };
fs.StartStreamMatchingAllConditions();
person user2465083    schedule 12.02.2015