1

PHPAPIを使用してSoundCloudHTML5ウィジェットをレンダリングしようとしていますが、コマンドを実行するたびに、ウィジェットのHTMLを返す必要があると思いますが、単に例外が発生します。

The requested URL responded with HTTP code 302

これはリダイレクトだと思います。私が知らないのは、なぜそれが私が今までに得たすべてなのか、またはウィジェットHTMLを実際に取得するためにそれについて何をすべきかということです。

APIのドキュメントには、PHPを使用してウィジェットを埋め込むには、次のようにする必要があると記載されています。

<?php
    require_once 'Services/Soundcloud.php';

    // create a client object with your app credentials
    $client = new Services_Soundcloud('YOUR_CLIENT_ID', 'YOUR_CLIENT_SECRET');

    // get a tracks oembed data
    $track_url = 'http://soundcloud.com/forss/flickermood';
    $embed_info = $client->get('/oembed', array('url' => $track_url));

    // render the html for the player widget
    print $embed_info['html'];

私はこれを実行しています:

// NB: Fully authorised SoundCloud API instance all working prior to this line
// $this->api refers to an authorised instance of Services_Soundcloud

try {   
        $widget = array_pop(
            json_decode( $this->api->get('oembed', array('url' => $track_url)) )
        );

        print_r($widget);

    } catch (Exception $e)
    {
        print_r($e->getMessage());
    }

ここで、「track_url」は実際には、同じAPIを使用してアプリの前半でSoundCloudにトラックオブジェクトを要求したときに返されるURLです。

そもそもこのURLが正しいかどうかはわかりません。これは、返されるトラックオブジェクトが次の形式で「uri」を提供するためです。

[uri] => https://api.soundcloud.com/tracks/62556508

ドキュメントの例にはすべてストレートなhttp://soundcloud.com/username/track-permalinkURLがありますが、パブリックトラックへの既知のパスを使用しても、APIoembedメソッドを実行しようとして失敗します...それでも302例外が発生します。

最後に、「get」コマンドで「allow_redirects」をfalseに設定することについての言及がありますが、APIへのクエリの作成に使用されるパラメーターに追加しても効果はありません。また、cURLオプションを追加してみましたが、それでも効果はありませんでした。

私は間違いなくSoundCloud内のトラックへのAPIアクセスを有効にしました。

これで壁から頭を叩くようなものです。誰かが何かポインタを持っているなら、私はそれらを聞いてとても感謝しています。わかりやすくするために、作成したAPIインスタンスを介してすべてのユーザーデータやコメントなどにアクセスできるため、正常に機能しているように見えます。

4

1 に答える 1

2

これを指摘してくれてありがとう。ドキュメントにバグがあり、それがあなたを迷わせました。申し訳ありません。バグを修正するためにドキュメントを更新しました。更新されたコードサンプルは次のとおりです。

<?php

require_once 'Services/Soundcloud.php';

// create a client object with your app credentials
$client = new Services_Soundcloud('YOUR_CLIENT_ID', 'YOUR_CLIENT_SECRET');
$client->setCurlOptions(array(CURLOPT_FOLLOWLOCATION => 1));

// get a tracks oembed data
$track_url = 'http://soundcloud.com/forss/flickermood';
$embed_info = json_decode($client->get('oembed', array('url' => $track_url)));

// render the html for the player widget
print $embed_info->html;

違いに注意してください。

  • 上記のコメントで述べたように、CURLOPT_FOLLOWLOCATIONを1に設定する必要があります。
  • $client->getからのリターンをラップする必要がありますjson_decode
  • 結果はstdClassオブジェクトであり、ではないArrayため、演算子htmlを使用してプロパティにアクセスする必要があります。->

お役に立てば幸いです。それでも問題が解決しない場合は、遠慮なくコメントしてください。回答を修正します。

于 2012-10-10T21:15:34.640 に答える