0

作成中のアプリケーションに Last.fm API を使用しようとしていますが、検証で問題が発生しています。

API リクエストでエラーが発生した場合、レスポンス XML で次のようなコードとメッセージが返されます。

<lfm status="failed">
<error code="6">No user with that name</error>
</lfm>

ただし、リクエストは HTTP ステータス 400 (場合によっては 403) も返します。DOMDocument はこれをエラーと見なし、XML の解析を拒否します。

エラーコードとメッセージを取得できるように、これを回避する方法はありますか?

ありがとう

ピート

4

4 に答える 4

1

try & catch を使用して問題を解決しました。それが誰かの役に立てるなら

    function getXML($xml) {
            $dom = new DomDocument();
        try {
            @$dom->load($xml); // The '@' is necessary to hide error if it's a error 400 - Bad Request
            $root = $dom->documentElement;
            return $root;
        }
        catch(Exception $e)
        {
            return false;
        }
    }
于 2011-12-22T10:08:27.303 に答える
1

解決策は、操作を 2 つのステップに分けることです。

  • まず、たとえばcurlを使用して XML 文字列を取得します。
  • 次に、その文字列で作業しますDOMDocument


curl_execマニュアルページ に curl の使用例があります。いくつかの便利なオプションを追加すると、次のようなものを使用できると思います:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "YUR_URL_HERE");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xml_string = curl_exec($ch);
curl_close($ch);

// You can now work with $xml_string

その他のオプション(たくさんあります ^^ )については、 のマニュアル ページを参照してくださいcurl_setopt

于 2010-04-11T12:38:14.940 に答える
0

関数:

function getAlbum($xml,$artist,$album)
{
  $base_url = $xml;
  $options = array_merge(array(
    'user' => 'YOUR_USERNAME',
    'artist'=>$artist,
    'album'=>$album,
    'period' => NULL,
    'api_key' => 'xYxOxUxRxxAxPxIxxKxExYxx', 
  ));

  $options['method'] = 'album.getinfo';

  // Initialize cURL request and set parameters
  $ch = curl_init($base_url);
  curl_setopt_array($ch, array(
    CURLOPT_URL            => 'http://ws.audioscrobbler.com/2.0/',
    CURLOPT_POST           => TRUE,
    CURLOPT_POSTFIELDS     => $options,
    CURLOPT_RETURNTRANSFER => TRUE,
    CURLOPT_TIMEOUT        => 30,
    CURLOPT_HTTPHEADER        => array( 'Expect:' ) ,
    CURLOPT_USERAGENT      => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'
  ));

  $results = curl_exec($ch);
  unset ($options);
  return $results;
}

使用法:

// Get the XML
$xml_error = getAlbum($xml,$artist,$album);

// Show XML error
if (preg_match("/error/i", $xml_error)) {
    echo " <strong>ERRO:</strong> ".trim(strip_tags($xml_error));
}
于 2011-05-05T16:53:29.207 に答える
0

次のような他の関数を使用していつでも応答を取得し、次のようfile_get_contentsにして XML を解析できます。DOMDocument::loadXML

編集:

http://www.php.net/manual/en/domdocument.load.php#91384

于 2010-04-10T23:04:23.873 に答える