Интеграция 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