0

だから私は XML URL からデータを解析し、php を使用してテーブルに挿入しようとしています。これはここで見ることができます (このページに表示されているよりも多くの製品があることに注意してください。単に取得しようとしているわけではありません)この製品、以下のコードは、すべての製品を解析する方法を示しています)が、次のエラーが発生し続けます:


[編集]

class DataGrabber {

//The URL where data will be extracted from, which is an XML file
protected $URL = "http://json.zandparts.com/api/category/GetCategories/44/EUR/";

public function call_api($data) {


    if(count($data) == 0) return array();

    $jsondata = array();

    foreach($data as $entry){


        $url = $this->URL . $entry['model'] . "/" . urlencode($entry['family']) . "/" . urlencode($entry['cat']) . "/" . $entry['man'] . "/null";
        $json = file_get_contents($url);

        $data = json_decode($json, true);

        if(!empty($data['Products'])){
            foreach ($data['Products'] as $id => $product) {

                $jsonentry = array(
                    'productnumber' => $id,
                    'partnumber' => $product['strPartNumber'],
                    'description' => $product['strDescription'],
                    'manu' => $product['Brand']
                );

                $jsondata[] = $jsonentry;
            }
        }
    }

    return $jsondata;

}

}


[新しいエラー]

だから私はエラーを修正しました:

PHP Warning:  file_get_contents(http://json.zandparts.com/api/category/GetCategories/44/EUR/ET10B/E Series/AC Adapter/Asus/null): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request
 in /home/svn/dev.comp/Asus.php on line 82  

urlencode上記の私のコードに示すように使用して

以下の警告では、URL の値が見つかりません。

PHP Warning:  file_get_contents(http://json.zandparts.com/api/category/GetCategories/44/EUR///04G265003580/Asus/null): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found

後でわかるように、44/EURデータのない 3 つのスラッシュがあります?? どうすればこれを解決できますか??

4

2 に答える 2

3

リモート サーバーは、AcceptHTTP ヘッダーを使用して出力形式を選択しているようです。PHP のデフォルト オプションを使用すると、XML の代わりに JSON が返されます。

<?php
echo file_get_contents('http://json.zandparts.com/api/category/GetCategories/44/EUR/ET10B/E%20Series/AC%20Adapter/Asus/null');

... プリント:

{"Categories":[{"Brand":null,"Fami...

Accept ヘッダーを指定するには、他の関数でデータを取得する必要があります。

<?php
$context = stream_context_create(
    array(
        'http' => array(
            'header' => "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n",
        )
    )
);
echo file_get_contents('http://json.zandparts.com/api/category/GetCategories/44/EUR/ET10B/E%20Series/AC%20Adapter/Asus/null', false, $context);

... プリント:

<?xml version="1.0" encoding="utf-8"?><ProductCategory ...

正確なニーズに合わせて微調整します。ブラウザからヘッダーをコピーしただけです。

于 2013-05-02T09:26:38.907 に答える
2

その JSON データ内のすべての製品のstrPartNumberstrDescription、およびBrandの値を取得する方法を示すコード スニペットを次に示します。

<?php
    $url = 'http://json.zandparts.com/api/category/GetCategories/44/EUR/ET10B/E%20Series/AC%20Adapter/Asus/null';
    $json = file_get_contents($url);

    // Decode the JSON data as a PHP array
    $data = json_decode($json, true);

    if (!empty($data['Products'])) {
        foreach ($data['Products'] as $id => $product) {
            echo "Product #{$id}\n";
            echo "Part number: {$product['strPartNumber']}\n";
            echo "Description: {$product['strDescription']}\n";
            echo "Brand: {$product['Brand']}\n\n";
        }
    }

出力:

Product #0
Part number: 04G265003580
Description: POWER ADAPTER 65W19V 3PIN
Brand: Asus

Product #1
Part number: 14G110008340
Description: POWER CORD 3P L:80CM,TW(B)
Brand: Asus
于 2013-05-02T09:24:57.423 に答える