2016-06-17 20 views
0

私はカールを使用してWeb外部サーバーと通信しますが、応答のタイプはhtmlです.Jsonコード(4000行以上)に変換できましたが、どのように私の結果を含む指定された行を取得するアイデア。何か案が ?ここでcUrlを使用して指定行を取得する方法PHP

は私のカールコードです:

require_once('getJson.php'); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://www.reputationauthority.org/domain_lookup.php?ip=website.com&Submit.x=9&Submit.y=5&Submit=Search'); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
$data = curl_exec($ch); 
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
curl_close($ch); 
$data = '<<<EOF'.$data.'EOF'; 
$json = new GetJson(); 
header("Content-Type: text/plain"); 
$res = json_encode($json->html_to_obj($data), JSON_PRETTY_PRINT); 
$myArray = json_decode($res,true); 

getJson.php

class GetJson{ 

    function html_to_obj($html) { 
     libxml_use_internal_errors(true); 
     $dom = new DOMDocument(); 
     $dom->loadHTML($html); 
     return $this->element_to_obj($dom->documentElement); 
    } 
    function element_to_obj($element) { 
     if ($element->nodeType == XML_ELEMENT_NODE){      
      $obj = array("tag" => $element->tagName); 
      foreach ($element->attributes as $attribute) { 
       $obj[$attribute->name] = $attribute->value; 
      } 
      foreach ($element->childNodes as $subElement) { 
       if ($subElement->nodeType == XML_TEXT_NODE) { 
        $obj["html"] = $subElement->wholeText; 
       } 
       else { 
        $obj["children"][] = $this->element_to_obj($subElement); 
       } 
      } 
      return $obj; 
     } 
    } 
} 

について私の考えは、(のようなものやって2175 lignを達成するために代わりにブラウズ行は次のとおりです。 '子供' [$データを子ども] ['子供'] ['子供'] ['子供'] ['子供'] [[子供]] [0] ['子供'] [ 1] ['children'] ['children'] ['children'] ['children'] [2] ['children'] [0] ['children'] [0] ['html']は私には良いアイデア)、私はそれに直接行きたいです。

+0

どのようにJSONに変換しましたか?通常、データを解析し、データを変数(配列/オブジェクト)に入れ、JSONにエンコードします。最後のステップをスキップして、データを取得します。より詳しいヘルプが必要な場合は、コードとJSON構造を表示してください。 – GolezTrol

+0

こんにちは、私はいくつかの情報を追加しました。 – Zacki

答えて

0

返されるHTMLが毎回一貫した構造を持ち、その一部から1つの特定の値だけが必要な場合は、正規表現を使用してHTMLを解析し、必要な部分を見つけることができます。これは、あなたが配列全体にしようとする代替です。私はHTML文書を解析して特定の項目を見つける前に、この手法を使用しました。ここに簡単な例があります。求めているデータの正確な性質を指定していないため、ニーズに合わせて調整する必要があります。適切なビットを見つけるために、いくつかのレベルの解析を行う必要があります:

$data = curl_exec($ch); 
//Split the output into an array that we can loop through line by line 
$array = preg_split('/\n/',$data); 
//For each line in the output 
foreach ($array as $element) 
{ 
    //See if the line contains a hyperlink 
    if (preg_match("/<a href/", "$element")) 
    { 
     ...[do something here, e.g. store the data retrieved, or do more matching to find something within it]... 
    } 

} 
+0

ありがとうございます@アディソン。 – Zacki

関連する問題