#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. Фильтрация-это именно то, что мне было нужно, спасибо!