Я программирую .Net Core (2.1 превью, C # 7.3) Потоковое консольное приложение с L2T (5.0.0 beta 2), но даже с strm.TweetMode == TweetMode.Extended
запрос возвращает «компат» твиты, свойство FullTextпусто.
Вы можете воспроизвести это с помощью запроса L2T ниже.
Я искал в Интернете, я нашел что-то похожее (с 'search' вместо 'Streaming'), но ответов нет, кромедобавить && strm.TweetMode == TweetMode.Extended
, что я и сделал.
Есть идеи?
try
{
await
(from strm in twitterCtx.Streaming
.WithCancellation(cancelTokenSrc.Token)
where
strm.Type == StreamingType.Filter
&& strm.Track == "twitter"
&& strm.Language == "nl"
&& strm.TweetMode == TweetMode.Extended
select strm)
.StartAsync(async strm =>
{
await HandleStreamResponse(strm);
if (count++ >= 20)
cancelTokenSrc.Cancel();
});
}
[ Обновление 30 мая ]
Нашел что-то.Он находится в подпрограмме «HandleStreamResponse» (код ниже).Status.TweetMode
и Status.ExtendedTweet.TweetMode
оба возвращают "Compat" для всех твитов, но полный текст твита находится в status.ExtendedTweet.FullText
Но даже с этой проверкой ретвиты усекаютсядо 140 символов макс.Мне не нужны ретвиты для моей программы, поэтому я отфильтровываю их.
Я пока не знаю, как напрямую отфильтровать ретвиты из потока ( возможно ли это? ), поэтому я проверяю статус ретвитов статуса из результата потока.Это в коде ниже.
К вашему сведению: в примерах Linq To Twitter для этой подпрограммы Джо Майо использует следующую строку кода, но это не работает: Console.WriteLine("{0}: {1} {2}", status.StatusID, status.User.ScreenNameResponse, status.Text ?? status.FullText);
Дажес && strm.TweetMode == TweetMode.Extended
в запросе L2T status.FullText
пусто.
В приведенном ниже примере кода больше, чем необходимо, но я использовал его для ясности.
static async Task<int> HandleStreamResponse(StreamContent strm)
{
switch (strm.EntityType)
{
case StreamEntityType.Status:
var status = strm.Entity as Status;
if (status.RetweetedStatus.StatusID == 0)
{
if (status.ExtendedTweet.FullText != null)
{
Console.WriteLine("Longer than 140 - \"@{0}\": {1} (TweetMode:{2})",
status.User.ScreenNameResponse, status.ExtendedTweet.FullText, status.TweetMode);
}
else
{
Console.WriteLine("Shorter than 140 - \"@{0}\": {1} (TweetMode:{2})",
status.User.ScreenNameResponse, status.Text, status.TweetMode);
}
}
// Console.WriteLine("{0}: {1} {2}", status.StatusID, status.User.ScreenNameResponse, status.Text ?? status.FullText);
break;
default:
Console.WriteLine("Unknown - " + strm.Content + "\n");
break;
}
return await Task.FromResult(0);
}
}