Twitch API возвращает неверный канал

#javascript #node.js #api #twitch #twitch-api

Вопрос:

В настоящее время я работаю с API Twitch, и по какой-то причине запрос GET /api.twitch.tv/helix/search/channels?query=[STREAMER_NAME] , похоже, возвращает неверный стример/пользователя. Вот пример:

/api.twitch.tv/helix/search/channels?query=loltyler1 возвращает неверного пользователя, так broadcaster_login как он ошибается. "broadcaster_login": "loltyler1dotcomdiscoalpha"

Похоже, это происходит не только с этой конкретной учетной записью. Другим примером был случай, когда в качестве запроса использовался imkaicenat, и он вернул пользователя с именем imkaidenbtw. Вот пример функции, отправляющей запрос GET в их api из моего собственного кода, надеюсь, это не проблема на конце Twitch, и здесь есть что-то, что можно исправить:

 client.on("message", (msg) => {
  // split message into array of words
  const args = msg.content.split(" ");

  // If bot sends message end functions
  if (msg.author.bot) return;

  // Get info
  if (msg.content.startsWith(`${prefix}live`)) {
    // Make get request to Twitch API with streamer name
    axios
      .get(`https://api.twitch.tv/helix/search/channels?query=${args[1]}`, {
        headers: {
          "client-id": process.env.TWITCH_CLIENT_ID,
          Authorization: `Bearer ${process.env.TWITCH_ACCESS_TOKEN}`,
        },
      })
      .then((res) => {
        let response = res.data.data;
        response[0].is_live
          ? msg.reply(
              `${response[0].broadcaster_login} is live playing ${response[0].game_name}. Watch here: https://twitch.tv/${response[0].broadcaster_login}`
            )
          : msg.reply(`${response[0].broadcaster_login} is not live`);
      })
      .catch((err) => console.log(err));
  }
 

Не уверен, поможет ли это, но это часть проекта discord bot. Спасибо за любую помощь!

Ответ №1:

Несколько месяцев назад мне также пришлось иметь дело с Twitch API тем, что у меня была та же проблема. Если вы log используете свою res переменную, вы должны заметить, что она возвращает много streamers с похожими именами

Для того, чтобы получить желаемое, вы должны отфильтровать data получаемое. Кроме того, вы должны сначала использовать res.json() :

 const streamer = 'name of the streamer'.toLowerCase();

[...]

.then(res => res.json())
.then(res = {
   if(!res.data) return console.log('Streamer not found!');
   
   const broadcaster = res.data.filter(filter => filter.display_name.toLowerCase() === streamer)[0];
})
 

Примечание:

Если хотите, вы можете взглянуть на мой twitch live command , но я отмечу, что мне придется воссоздать этот, так как он не совсем надежен. Но для вашей проблемы вы можете хорошо сориентироваться в ней

Комментарии:

1. Фильтрация-это именно то, что мне было нужно, спасибо!