1

このウェブサイトからいくつかのデータを取得したい: http ://sites.target.com/site/en/spot/search_results.jsp?&mapType = enhanced&startAddress = 72756&startingLat = 36.322757720947266&startingLong = -93.99922943115234&_requestid = 2573352

上記のWebページのhtmlソースには次の行があります。

<script>
    function GetMap(){
    var results = new Array();
    results[results.length] = {"lat" : "36.299484", "lon" : "-94.173495", "id" : "2498", "name" : "test", "phoneNumber" : "(479) 986-1100", "hours" : "test", "address" : {"city" : "Rogers", "state" : "AR", "zip" : "72758", "street" : "2404 Promenade Blvd" }, "concepts" : [{"name" : "Pharmacy", "phoneNumber" : "(479) 986-1101", "hours" : "<b>M-Fr:</b> 10:00AM-7:00PM<br><b>Sa:</b> 10:00AM-7:00PM" }, {"name" : "PhotoLab", "hours" : "<b>M-Fr:</b> 9:00AM-9:00PM<br><b>Sa:</b> 9:00AM-9:00PM<br><b>Su:</b> 10:00AM-8:00PM" }, {"name" : "Wine"}, {"name" : "Starbucks"}]};
    results[results.length] = {"lat" : "36.1157", "lon" : "-94.1555", "id" : "1470", "name" : "test", "phoneNumber" : "(479) 443-5517", "hours" : "test", "address" : {"city" : "Fayetteville", "state" : "AR", "zip" : "72703", "street" : "3545 N Shiloh Dr" }, "concepts" : [{"name" : "Pharmacy", "phoneNumber" : "(479) 443-5628", "hours" : "<b>M-Fr:</b> 9:00AM-7:00PM<br><b>Sa:</b> 9:00AM-5:00PM<br><b>Su:</b> 11:00AM-5:00PM" }]};
    results[results.length] = {"lat" : "36.6738", "lon" : "-93.2257", "id" : "2098", "name" : "test", "phoneNumber" : "(417) 243-4500", "hours" : "test", "address" : {"city" : "Branson", "state" : "MO", "zip" : "65616", "street" : "1200 Branson Hills Pkwy" }, "concepts" : [{"name" : "Pharmacy", "phoneNumber" : "(417) 243-4513", "hours" : "<b>M-Fr:</b> 9:00AM-9:00PM<br><b>Sa:</b> 9:00AM-6:00PM<br><b>Su:</b> 9:00AM-6:00PM" }, {"name" : "PhotoLab", "phoneNumber" : "(417) 243-4500", "hours" : "<b>M-Fr:</b> 12:00PM-6:00PM<br><b>Sa:</b> 12:00PM-6:00PM<br><b>Su:</b> 12:00PM-6:00PM" }, {"name" : "Wine"}, {"name" : "Starbucks"}]};
    results[results.length] = {"lat" : "37.0849", "lon" : "-94.474", "id" : "774", "name" : "test", "phoneNumber" : "(417) 659-8755", "hours" : "test", "address" : {"city" : "Joplin", "state" : "MO", "zip" : "64801", "street" : "3151 E 7th St" }, "concepts" : [{"name" : "FreshGrocery"}, {"name" : "Pharmacy", "phoneNumber" : "(417) 206-3377", "hours" : "<b>M-Fr:</b> 9:00AM-9:00PM<br><b>Sa:</b> 9:00AM-6:00PM<br><b>Su:</b> 9:00AM-6:00PM" }, {"name" : "Wine"}, {"name" : "Starbucks"}]};
    results[results.length] = {"lat" : "37.1511", "lon" : "-93.2623", "id" : "1031", "name" : "test", "phoneNumber" : "(417) 889-1511", "hours" : "test", "address" : {"city" : "Springfield", "state" : "MO", "zip" : "65804", "street" : "1825 E Primrose St" }, "concepts" : [{"name" : "FreshGrocery"}, {"name" : "Pharmacy", "phoneNumber" : "(417) 520-1745", "hours" : "<b>M-Fr:</b> 9:00AM-7:00PM<br><b>Sa:</b> 9:00AM-5:00PM<br><b>Su:</b> 11:00AM-5:00PM" }, {"name" : "PhotoLab", "phoneNumber" : "(417) 889-1511", "hours" : "<b>M-Fr:</b> 12:00PM-6:00PM<br><b>Sa:</b> 12:00PM-6:00PM<br><b>Su:</b> 12:00PM-6:00PM" }, {"name" : "Starbucks"}]};

緯度、経度、ID、名前、電話番号、都市、州、郵便番号を分離したい。

上記のjavaScriptコードからデータを解析することは可能ですか、そのような複雑な行の正規表現を作成するのに混乱しています。

次の形式でPHPのデータを取得できますか?

Array
(
    [lat] => 36.299484
    [lon] => -94.173695
    [id] =>  2498
    [name] => Rogers
    [phoneNumber] => (479) 986-1100
    [city] => Rogers
    [state] => AR
    [zipcode] => 72758

)。

これは私の不完全なアプローチです。

   $fp = fopen("file.csv","w");
    $contents = file_get_contents('http://sites.target.com/site/en/spot/search_results.jsp?&mapType=enhanced&startAddress=72756&startingLat=36.322757720947266&startingLong=-93.99922943115234&_requestid=2573952');
    preg_match_all('Regular Expression Here', $contents, $matches);        
    foreach ($matches[1] as $index) {       
        preg_match('Regular Expression Here', $contents, $matches);
        preg_match_all('Regular Expression Here', $matches [1], $matches);
        $c = count ($matches [1]);
        $results = array();
        for ($i=0; $i<$c; $i++)  {
            $results [$matches [1] [$i]] = trim($matches [2] [$i], "\'");
        }
        fwrite($fp,implode(";",array_values($results))."\r\n");
    }
    fclose($fp);
4

2 に答える 2

1

情報はJSONと呼ばれる形式です。PHPにはJSONパーサーがあります。

http://php.net/manual/en/book.json.php

于 2012-06-06T22:16:24.193 に答える
1

あなたの例のようにフォーマットが固​​定されていれば、正規表現を気にする必要はありません。

私がすることは:

  1. file代わりにを使用file_get_contentsして、配列の内容を取得します(配列要素ごとにファイルの1行)。
  2. 配列をループします。
  3. 多くの文字列関数のいくつかを使用して、それ自体results[results.length] =を含むその前のすべてをチェックして削除します。results[results.length] =
  4. trim末尾と先頭、および末尾のスペースを削除するために使用します;
  5. json_decode残りのjsonオブジェクトをデコードするために使用します。この例を参照してください。
于 2012-06-06T22:32:57.963 に答える