1

Songkick API を解析して、アーティストの今後のショーの日付のリストを取得しようとしています。私が見つけたものから、次のようにする必要があります。問題は、それが機能しないことです。

コードは何も返しません。

$artist_id = "id";
$api_key = "API key";

$request_url    =    urlencode("http://api.songkick.com/api/3.0/artists/" . $artist_id . "/calendar.xml?apikey=" . $api_key);
$load_api           =    simplexml_load_file($request_url) or die("Songkick API error.");

foreach ($load_api->event as $shows) {
        $venue      =   $shows->venue["displayName"];
        $city       =   $shows->location["city"];
        $skdate =   $shows->start["date"];
                            $date = date("M d", strtotime($skdate));
        $artists    =   $shows->event->performance->artist["displayName"];

        echo $shows;
        echo $city;
        echo $date;
        echo $artists;

XML ファイルは、次のいくつかのインスタンスのように見えます。

<event type="Concert" status="ok" displayName="Band with supporting acts" popularity="0.000495" uri="songkick address for this show" id="248">
        <metroArea displayName="SF Bay Area" uri="songkick address for this metro area" id="26330">
            <state displayName="CA"/>
            <country displayName="US"/>
        </metroArea>
    </venue>
    <start time="21:30:00" datetime="2013-05-31T21:30:00-0800" date="2013-05-31"/>
    <location lat="37.7650545" lng="-122.3963593" city="San Francisco, CA, US"/>
    <performance billingIndex="1" displayName="headliner" billing="headline" id="31239239">
        <artist displayName="Band Name" uri="uri for headling band" id="4114066"/>
    </performance>
    <performance billingIndex="2" displayName="Opener 1" billing="support" id="31239244">
        <artist displayName="Opener 1" uri="Opener 1 uri to songkick band page" id="4852118"/>
    </performance>
    <performance billingIndex="3" displayName="Opener 2" billing="support" id="31239249">
        <artist displayName="Opener 2" uri="Opener 2 uri to songkick band page" id="3527036"/>
    </performance>
</event>

どんなアドバイスでも大歓迎です...私は途方に暮れています。

ありがとう!


更新:それを理解しました!ありがとう!

<?php
    $artist_id  =   "*songkick artist id*";
    $api_key    =   "*api key*";
    $perm_link  =   "http://www.songkick.com/artists/$artist_id";

    $request_url    =   "http://api.songkick.com/api/3.0/artists/" . $artist_id . "/calendar.xml?apikey=" . $api_key;
    $xml            =   simplexml_load_file($request_url) or die("Songkick API error.  Click <a href=\"" . $perm_link . "\" target=\"_blank\">Click here for show dates</a>."); // load file, or if error, print direct link to songkick page

    foreach ($xml->results->event as $event) {
        $skdate     =   $event->start["date"];
            $date   =   date("M d", strtotime($skdate));
        $venue      =   $event->venue["displayName"];
        $city       =   $event->location["city"];
        $artists    =   $event->xpath("./performance/artist/@displayName");

        echo $venue, $city, $date . ":<br />" . implode(', ',$artists) . "<br />";
    }

?>
4

1 に答える 1

0

コードのデバッグ方法を学びます:

  1. 上記の XML は有効ではありません --> http://www.xmlvalidation.com
  2. $load_apiを使用して、それが行うと思うものが含まれていることを確認してくださいvar_dump($load_api);
  3. PHP のエラー報告が最適なレベルにあることを確認してください。その方法については SO を検索してください。
  4. XML には複数の<artist>ノードがあるため、$artists別の方法で設定する必要があります。
  5. 反響しているあなたecho $shows-子供がいるので何もありませんが、価値はありません。

    $xml = simplexml_load_string($x); // assume **valid** XML in $x
    
    foreach ($xml->event as $shows) {
        $venue = $shows->venue["displayName"];
        $city  = $shows->location["city"];
        $date = date("M d", strtotime($shows->start["date"]));
        $artists = $shows->xpath("//artist/@displayName"); // returns array!
    
        echo "$city $date: " . implode(', ',$artists) . "<br />";
    }
    

動作を確認してください: http://codepad.viper-7.com/yrAjYI

于 2013-05-17T13:07:00.770 に答える