Help us understand the problem. What is going on with this article?

yahooショッピングの商品パラメーターをJSON化する為にした事。

あるWEBツールを作るためにYahooショッピングの商品パラメーターが必要になったので

一旦、パラメーターをJSON化して使用することに。

行ったこと。

  1. スクレイピング
  2. JSONファイルを生成処理
  3. 生成したJSONをobjectとして使用。

尚、スクレイピングしている先がHTMLの変更があった場合、変更が必要になります。

スクレイピング先URL:https://developer.yahoo.co.jp/webapi/shopping/editItem.html

スクレイピング+JSONファイルを生成処理
<?php
$html = file_get_contents("https://developer.yahoo.co.jp/webapi/shopping/editItem.html");
$dom = new DOMDocument();
$html = mb_convert_encoding($html, "HTML-ENTITIES", 'UTF-8');
@$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);

try {
    $i = 0;
    $cnt = 2;
    while (isset($xpath->query("//*[@id=\"catchBx\"]/table[1]/tr[$cnt]/td[1]")->item(0)->textContent)) {
        preg_match("/[a-z|A-Z|0-9|_]{1,}/", $xpath->query("//*[@id=\"catchBx\"]/table[1]/tr[$cnt]/td[1]")->item(0)->textContent, $parameter);
        $patterns = array('/(\\\は)/u','/["]{1,}/u',"/[\n]{0,}/u");
        $replacements = array('\\\\\\は','\\\\"',"");
        $obj[] =
            "       \"Field" . $i . "\":{\n".
            "           \"parameter\":\"" . $parameter[0] . "\",\n" .
            "           \"value\":\"" . $xpath->query("//*[@id=\"catchBx\"]/table[1]/tr[$cnt]/td[2]")->item(0)->textContent . "\",\n" .
            //" \"comment\":\"" . mb_strimwidth(preg_replace($patterns,$replacements,$xpath->query("//*[@id=\"catchBx\"]/table[1]/tr[$cnt]/td[3]")->item(0)->textContent),0,250,"...") ."\"\n".
            "           \"comment\":\"" . preg_replace($patterns,$replacements,$xpath->query("//*[@id=\"catchBx\"]/table[1]/tr[$cnt]/td[3]")->item(0)->textContent) ."\"\n".
            "       }";
        $cnt++;
        $i++;
    }
    $res["json"] = "[\n {\n" . implode(",\n", $obj)."   }\n]\n" ;

    var_dump(file_put_contents("yahoo-item-data.json",$res["json"]));
    //echo json_encode($res);
} catch (\Throwable $th) {
    echo '[{{"json":"not data"}}]';
}
生成したJSONをobjectとして使用
<?php
$item = file_get_contents("yahoo-item-data.json");
$obj = (object)json_decode($item);

foreach($obj->{0} as $key=>$val){
    print "<br><br>[Field:".$key."]<br>";
    print "parameter:".$val->parameter."<br>";
    print "value:".$val->value."<br>";
    print "comment:".$val->comment."<br><br>";
}
question909
アイディアや個人用として使用しています。
https://taoka-toshiaki.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away