Интеграция Twitch API в Discord Bot - более эффективный способ?

В настоящее время я пишу бот Discord в C#. Большинство ботов уже сделано, но для этого следующего обновления я хочу добавить возможность проверки того, что Streamer ушел вживую. В настоящее время я опрашиваю API-интерфейс Twitch и извлекаю имеющийся у него файл JSON и проверяю, является ли объект потока JSON пустым или нет. Но это займет 3-5 минут после запуска стримера, прежде чем он наконец увидит, что Stream не является нулевым, хотя я опрашиваю JSON каждые 5 секунд. Есть ли способ сделать это более эффективно? Мой код ниже:

       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 ответ

Похоже, это предполагаемое поведение API Twitch. Они определенно больше сосредоточены на том, чтобы подтолкнуть свои силы к потоковой передаче, а не к немедленному предоставлению данных через API.

Хотя может быть ограничение, подобное этому, вы можете попробовать очистить страницу, если время имеет решающее значение и вы не хотите ждать 3-5 минут, чтобы что-то уже произошло. Одна идея состоит в том, чтобы опрашивать страницу каждые 5 с или около того, а затем запрашивать в HTML-документе что-то характерное, что отличает автономный и онлайн-канал.

Идея утилизации в JavaScript (просто скопируйте в.NET):

Например, я попытался запросить пользовательские страницы ( https://www.twitch.tv/username) в JavaScript с помощью:

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

и для пользователя, который не вещает, это дает true в то время как для вещания пользователя это дает false, Проблема может быть для пользователя без недавней истории трансляций, хотя.

Вы можете попробовать проверить страницу видео ( https://www.twitch.tv/username/ videos / all) на предмет их живого индикатора, например:

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

Это даст true для потокового пользователя и false для той, которая не транслируется (даже если он / она онлайн).

Конечно, это наименее эффективный способ сделать это и требует много загрузки по сравнению с простым опросом, но... все же он кажется более актуальным, чем запрашивать API каждые 5 секунд, и при этом фактическое состояние задерживается на 3-5 минут.

Просто скопируйте запросы, как указано выше, в.NET, и вы там.

Вы также можете смешать два подхода, и если вы видите, что кто-то начал потоковую передачу, просто отключите очистку страниц и переключайтесь только на вызовы API, чтобы проверить, все еще ли вы в курсе.

Полезные инструменты для утилизации:

Для анализа документов HTML используйте парсеры, такие как AngleSharp, чтобы сделать это в.NET: https://github.com/AngleSharp/AngleSharp

Другие вопросы по тегам