Привет, члены stackoverflow. Я не человек, который любит просить о помощи, но в этом случае это ИМО единственный способ решить мою проблему. Google не очень помог мне.
Так. Моя проблема: я хочу получить некоторые данные с помощью Twitch API. Звучит просто? Хотелось бы. Ниже я отправляю свой фактический код (он маленький, но он был изменен разным раза, и теперь он выглядит как …):
$user = json_decode(file_get_contents('https://api.twitch.tv/kraken/oauth2/authorize?response_type=code&client_id=MY_CORRECT_CLIENT_ID&redirect_uri=http://localhost/php/twitch.php&scope=user_read'), true); print_r($user); // returns nothing $token = $user['access_token']; print_r($token); // same as above $ch = curl_init(); // some stupid curls curl_setopt($ch, CURLOPT_URL, 'https://api.twitch.tv/kraken/streams/followed'); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_HTTPHEADER, 'Authorization: OAuth '.$token ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $retval = curl_exec($ch); curl_close($ch); $result = json_decode($retval, true);
Он возвращается … Ничего. Поэтому я использовал готовое решение из discussion.twitch. (Мне жаль, что я не мог написать имя автора этого кода, но я слишком устал, чтобы снова его искать. В любом случае спасибо!):
$ch = curl_init("https://api.twitch.tv/kraken/oauth2/token"); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); $fields = array( 'client_id' => 'blablabla_correct', 'client_secret' => 'blablabla_also_correct', 'grant_type' => 'authorization_code', 'redirect_uri' => 'http://localhost/php/twitch.php', 'code' => $_GET['code'] ); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); $data = curl_exec($ch); $response = json_decode($data, true); //var_dump($response); $access_token = $response["access_token"]; echo $access_token; function get_data($url) { $ch = curl_init(); $timeout = 5; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $returnobj = curl_exec($ch); curl_close($ch); return $returnobj; } $testobj = json_decode(get_data("https://api.twitch.tv/kraken/user?oauth_token=".$access_token."&client_id=".$fields['client_id'])); echo "<br>Data: "; print_r($testobj);
Этот код выше немного лучше. Только немного. Он возвращает ошибку 401 . Зачем? Потому что он не может получить токен аутентификации . Ну, это что-то, но не то, что я хотел получить. Что мне теперь делать? Может, это ошибка локального адреса?
Часто задаваемые вопросы (?): Да, я использую правильные данные на странице настроек приложения Twitch. Да, я смущен
Вы делаете два вызова API Twitch, и вам нужно их самостоятельно отлаживать.
Пока просто пропустите второй вызов. Сосредоточьтесь на том, где вы захватываете токен доступа.
Попробуй это:
// to start, just use the code you've already got: $ch = curl_init("https://api.twitch.tv/kraken/oauth2/token"); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); $fields = array( 'client_id' => 'blablabla_correct', 'client_secret' => 'blablabla_also_correct', 'grant_type' => 'authorization_code', 'redirect_uri' => 'http://localhost/php/twitch.php', 'code' => $_GET['code'] ); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); $data = curl_exec($ch); // Now, here we believe the first error comes into play, so let's check it out print_r($data); // confirm that this is not what we want $info = curl_getinfo($ch); // let's get some details about that last request // print it out and see what we get echo '<pre>'; print_r($info); echo '</pre>';
… это должно дать вам отправную точку для выяснения того, что происходит. Если вы видите токен аутентификации, вы не получаете доступ к нему правильным образом. Если вы этого не сделаете, информация предоставит вам некоторую информацию о том, почему.
Я не знаю, что такое redirect_uri
(можете ли вы ссылаться на документы, которые его объясняют?), Поэтому я не знаю, есть ли проблема с локальным хостом.