Twitch API 集成到 Discord Bot - 更有效的方式?

Posted

技术标签:

【中文标题】Twitch API 集成到 Discord Bot - 更有效的方式?【英文标题】:Twitch API Integration into Discord Bot - More efficient way? 【发布时间】:2017-09-26 22:21:27 【问题描述】:

我目前正在用 C# 编写一个 Discord Bot。我已经完成了大部分机器人,但对于下一次更新,我想添加检查 Streamer 是否已上线的功能。目前我正在轮询 Twitch API 并提取它拥有的 JSON 文件并检查 JSON 流对象是否为空。但这需要在流媒体上线后 3-5 分钟才能最终看到 Stream 不是 Null,即使我每 5 秒轮询一次 JSON。反正有没有更有效地做到这一点?我的代码如下:

       private const string Url = "https://api.twitch.tv/kraken/streams/streamer";
        var request = (HttpWebRequest)WebRequest.Create(Url);

        request.Method = "Get";
        request.Timeout = 12000;
        request.ContentType = "application/vnd.twitchtv.v5+json";
        request.Headers.Add("Client-ID", "ID");

        using (var s = request.GetResponse().GetResponseStream())
        
            using (var sr = new System.IO.StreamReader(s))
            

                var jsonObject = JObject.Parse(sr.ReadToEnd());
                var jsonStream = jsonObject["stream"];

                // twitch channel is online if stream is not null.
                LastTwitchStatus = jsonStream.Type != JTokenType.Null;
            
        

【问题讨论】:

【参考方案1】:

看起来这是 Twitch API 的预期行为。 他们肯定更专注于将他们的能力推向流媒体,而不是通过 API 提供即时数据。

虽然可能存在这样的限制,但如果时间很关键,并且您不想等待 3-5 分钟等待已经发生的事情,您可以尝试取消该页面。 一种想法是每 5 秒左右轮询一次页面,然后查询 html 文档以获取区分离线和在线渠道的特征。

javascript 中报废的想法(只需在 .NET 中复制):

例如,我尝试在 JavaScript 中查询用户页面(https://www.twitch.tv/用户名):

$(".recent-past-broadcast").length > 0

对于不广播的用户,它产生true,而对于广播用户,它产生false。不过,问题可能出在没有最近广播历史的用户身上。

您也可以尝试检查视频页面(https://www.twitch.tv/用户名/videos/all)的实时指示器,例如:

$(".cn-livestatus__circle").length > 0

它将为流媒体用户生成true,为不流媒体用户生成false(即使他/她在线)。

当然,这样做是最不有效的方法,并且与仅轮询相比需要大量下载,但是......它似乎仍然比每 5 秒询问一次 API 并且仍然将实际状态延迟 3-5 分钟来更新。

只需在 .NET 中复制上述查询即可。

您也可以混合使用两种方法,如果您看到有人开始流式传输,只需禁用页面抓取并切换到仅 API 调用以检查您是否仍然是最新的。

用于报废的有用工具:

要解析 HTML 文档,请使用 AngleSharp 之类的解析器在 .NET 中执行此操作: https://github.com/AngleSharp/AngleSharp

【讨论】:

以上是关于Twitch API 集成到 Discord Bot - 更有效的方式?的主要内容,如果未能解决你的问题,请参考以下文章

在同一应用程序中运行 Flask 和 Discord 机器人

不和谐.js |如何检测 API 是不是返回 null?

在 PHP 中使用 Twitch API 获取 Twitch 关注者

插入的 BIGINT 与 SQL 数据库中显示的不同

如何在 discord.py 中循环任务

在 Twitch bot 中添加帐户和更加用户友好的集成