2

こんにちはスタックオーバーフローのメンバー。私は助けを求めるのが好きな人ではありませんが、この場合、私の問題を解決する唯一の方法は IMO です。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);

戻ります... 何もありません。そこで、discussions.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が返されます。なんで?認証トークンを取得できないためです。まあ、それは何かですが、私が手に入れたかったものではありません。私は今どうすればいい?たぶんそれはローカルホストアドレスのせいですか?

FAQ(?): はい、Twitch アプリケーション設定ページの正しいデータを使用しています。はい、私は混乱しています

4

1 に答える 1

1

Twitch API に対して 2 つの呼び出しを行っており、それらを個別にデバッグする必要があります。

今のところ、2 番目の呼び出しはスキップしてください。アクセストークンを取得する場所に注目してください。

これを試して:

// 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(それを説明するドキュメントにリンクできますか?) ので、ローカルホストの参照が問題であるかどうかはわかりません。

于 2014-05-19T20:57:19.353 に答える