Twitter Tweetmode.Extended的空全文属性[5月30日更新]

Twitter Tweetmode.Extended的空全文属性[5月30日更新],twitter,linq-to-twitter,Twitter,Linq To Twitter,我正在用L2T(5.0.0 beta 2)编写一个.Net核心(2.1预览版,C#7.3)流媒体控制台应用程序,但即使使用strm.TweetMode==TweetMode.Extended查询返回“compat”tweets,全文属性也是空的 您可以使用下面的L2T查询重现这一点 我在网上搜索,发现了一些类似的东西(用“搜索”代替“流媒体”),但没有找到答案,除了添加&&strm.TweetMode==TweetMode.Extended,我这样做了 有什么想法吗 try

我正在用L2T(5.0.0 beta 2)编写一个.Net核心(2.1预览版,C#7.3)流媒体控制台应用程序,但即使使用
strm.TweetMode==TweetMode.Extended
查询返回“compat”tweets,全文属性也是空的

您可以使用下面的L2T查询重现这一点

我在网上搜索,发现了一些类似的东西(用“搜索”代替“流媒体”),但没有找到答案,除了添加
&&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();
                });
        }
[5月30日更新]

发现了一些东西。它在子程序“HandleStreamResponse”(下面的代码)中。
Status.TweetMode
Status.extendedteet.TweetMode
都会为所有tweet返回“Compat”,但tweet的全文处于
状态。extendedteet.FullText

但即使使用此检查,转发也会被截断为最多140个字符。我的程序不需要转发,所以我会过滤掉它们

我还不知道如何直接过滤流中的转发(可能吗?),所以我从流结果中检查状态的转发状态。它在下面的代码中

仅供参考:在这个子程序的Linq To Twitter示例中,Joe Mayo使用了以下代码行,但这行不通:
Console.WriteLine(“{0}:{1}{2}”,status.StatusID,status.User.screennamresponse,status.Text??status.FullText)

即使在L2T查询中使用
&&strm.TweetMode==TweetMode.Extended
,状态.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);
    }
}
静态异步任务HandleStreamResponse(StreamContent strm)
{
交换机(strm.EntityType)
{
案例StreamEntityType。状态:
var status=作为状态的标准实体;
if(status.RetweetedStatus.StatusID==0)
{
if(status.ExtendedTweet.FullText!=null)
{
WriteLine(“长度超过140-\”@{0}\“:{1}(TweetMode:{2})”,
status.User.ScreenNameResponse、status.ExtendedTweet.FullText、status.TweetMode);
}
其他的
{
WriteLine(“短于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);
打破
违约:
Console.WriteLine(“未知-”+strm.Content+“\n”);
打破
}
返回等待任务。FromResult(0);
}
}

以下是我的观察结果:

  • status.extendendedtweet.FullText
    应在正常情况下保留推文
  • 但是,如果tweet被转发,那么
    status.RetweetedStatus.extendedteet.FullText
    应该保留该tweet
  • 如果在这两种情况下都找不到
    全文
    ,请使用
    status.Text
  • 我正在使用以下内容更新示例:

        case StreamEntityType.Status:
            var status = strm.Entity as Status;
            string text = null;
            if (status.ExtendedTweet?.FullText != null)
                text = status.ExtendedTweet?.FullText;
            else if (status.RetweetedStatus?.ExtendedTweet?.FullText != null)
                text = status.RetweetedStatus?.ExtendedTweet?.FullText;
            else
                text = status.Text;
    
            Console.WriteLine("Status - @{0}: {1}", status.User.ScreenNameResponse, text);
            break;
    

    注意:Via,
    TweetMode
    不适用于流。此外,文档还说,扩展tweet应始终带有
    全文
    。正如我们所看到的,这并不是实践中的全部情况。我会在即将发布的版本中将
    流媒体。TweetMode
    标记为过时。

    谢谢你,乔,这完全回答了我的问题。我喜欢使用LinqToTwitter。我真的很感谢你在Twitter和StackOverflow上提供了大量的文档、大量的样本和回答问题。