これを何と呼ぶかわからなかったので、すぐに詳しく説明します。
YQLコンソールを使用して構築しようとしているスクリーンスクレイパーがあります。クエリは、ユーザーにXMLまたはJSONの選択を提供します。コンソールのYQL>data>htmlアスペクトをターゲットにしており、出力形式としてXMLを選択しました。
私のYQLクエリ:
これにより、XMLでのGoogle.comドキュメントツリーの読み取りが提供されます。この投稿に貼り付けるには出力が多すぎるため、リンクをクリックするだけです。
私の問題は、このリクエストからの出力を適切に表示するためにPHPでXMLツリーをトラバースすることにあります。foreachステートメント(またはその他のステートメント)を効果的に作成して、XML出力を効果的にスクレイプし、ドキュメントツリーを収集して、自分のニーズに合わせて再表示する方法がわかりません。
私のPHP:
$searchUrl = "google.com";
if(isset($_REQUEST['searchUrl'])) {
$searchUrl = $_REQUEST['searchUrl'];
}
$query = "select * from html where url=\"http://".$searchUrl."\"";
$url = "http://query.yahooapis.com/v1/public/yql";
// Get Subcategory Article Data
$parameterData = "q=".urlencode($query);
$parameterData .= "&diagnostics=true";
// setup CURL
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $parameterData);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
// send
$response = trim(urldecode(curl_exec($ch)));
// parse response
$xmlObjects = @simplexml_load_string($response);
foreach ($xmlObjects->diagnostics as $diagnostics) {
echo "<a href=".$diagnostics->url." target='_blank'>".$diagnostics->url."</a>";
}
foreach ($xmlObjects->results as $result) {
// here is where I would go echo $result->body or something along those lines
}
このタイプのフォーマットでXMLツリーをナビゲートするために次にどこを向くべきかを知る知識が不足しているため、この時点で少し困惑していると思います。XMLの後query>results>body
で、残りのオブジェクトを収集し、それをpre
タグまたはその性質のものでドキュメントに出力する場所がわかりません。
ユーザーが独自のドメインを入力するための入力フィールドを提供したいと思います。PHPはクエリを送信し、応答を繰り返し、HTMLの表示とデバッグのためにドキュメントツリーをユーザーに返します。
私は、RSSフィードなどの同じ内部構造を持つ多数の親要素を反復処理するという文脈でPHPとXMLに精通しています。この場合、1つの大きな応答オブジェクトと変動する内部構造を持つ動的XMLツリーを扱っています。