.Net Core流控制台应用L2T设置TweetMode.Extended后FullText为空
解决Linq To Twitter 5.0.0 beta2流模式下的完整推文获取与转推过滤问题
针对你在.NET Core 2.1预览版(C#7.3)+ Linq To Twitter(L2T)5.0.0 beta2中遇到的问题,我整理了对应的解决方案和细节说明:
1. 获取完整推文内容:为什么TweetMode.Extended设置后仍返回Compat类型?
你发现从status.ExtendedTweet.FullText获取完整内容是正确的,这是因为L2T的5.0.0 beta2版本中,流模式下的TweetMode设置逻辑还存在一些预发布阶段的特性差异:
- 仅仅给Stream对象设置
strm.TweetMode = TweetMode.Extended可能不足以让Twitter API返回Extended模式的推文,建议在构建流查询时,确保所有相关参数都明确指定Extended模式。 - 官方示例中的
status.Text ?? status.FullText写法失效,是因为beta版本中Status.FullText属性并未被正确赋值,完整内容被存储在ExtendedTweet.FullText中。你可以改用更可靠的写法:
这样既兼容了可能的空值情况,又能正确获取到完整的推文内容。string fullTweetContent = status.ExtendedTweet?.FullText ?? status.Text;
2. 过滤流中的转推:更高效的处理方式
你当前通过检查RetweetedStatus来过滤转推是可行的,而且是最稳妥的方法(尤其是在beta版本中)。不过也可以在流启动前就添加过滤逻辑,减少不必要的数据流处理:
- 在构建FilterStream或UserStream时,可以直接在事件处理逻辑中跳过转推:
var stream = await ctx.Streaming.CreateFilterStreamAsync(); stream.TweetMode = TweetMode.Extended; // 添加你的跟踪关键词等过滤条件 stream.AddTweetFilter(new TweetFilter { Track = new List<string> { "your-target-keyword" } }); stream.MatchingTweetReceived += (sender, args) => { var status = args.Status; // 直接跳过转推内容 if (status.RetweetedStatus != null) return; // 处理非转推的完整推文 string fullContent = status.ExtendedTweet?.FullText ?? status.Text; // 你的业务逻辑... }; await stream.StartAsync(); - 另外,由于你使用的是beta版本,L2T可能还未提供更直接的转推过滤参数,所以检查
RetweetedStatus是目前最可靠的过滤方式。
3. 额外注意事项
因为你使用的是L2T的预发布版本(5.0.0 beta2),部分API行为可能在正式版发布后有所调整。建议后续升级到正式版时,重新测试TweetMode的赋值逻辑和推文内容的获取方式,避免出现兼容性问题。
内容的提问来源于stack exchange,提问作者Jaap
相关产品推荐
相关产品推荐

