YQLを使用して、情報を読み取るためのHTMLページを取得します。今日から「htmlテーブルはサポートされなくなりました。参照してください。 https://policies.yahoo.com/us/en/yahoo/terms/product-atos/yql/index.htm YQL利用規約」
コンソールの例: https://developer.yahoo.com/yql/console/#h=select+ * + from + html + where + url%3D%22http%3A%2F%2Fwww google.de%22
Yahooはこのサービスを停止しましたか?ヤフーからの一種の発表を知っている人はいますか?これは単なるバグなのか、それとも本当にこのサービスを停止したのか疑問に思っています...
すべてのドキュメントはまだあります(htmlスクレイピング): https://developer.yahoo.com/yql/guide/yql-select-xpath.html 、 https://developer.yahoo .com/yql /
しばらく前に、私はYahooのYQLフォーラムに投稿しましたが、現在はこのフォーラムはもう存在しません(または、少なくとも見つかりません)。このサービスが本当に停止したかどうかを調べるために、どうやってYahooに連絡できますか?
よろしく、hebr3
コードをありがとうございました。
必要なページを読み取るための独自のスクリプトを作成するのに役立ちました。以前にPHP=をプログラムしたことはありませんが、コードとインターネットの知恵により、スクリプトを必要に応じて変更することができました。
PHP
<?
header('Access-Control-Allow-Origin: *'); //all
$url = $_GET['url'];
if (substr($url,0,25) != "https://www.xxxx.yy") {
echo "Only https://www.xxxx.yy allowed!";
return;
}
$xpathQuery = $_GET['xpath'];
//need more hard check for security, I made only basic
function check($target_url){
$check = curl_init();
//curl_setopt( $check, CURLOPT_HTTPHEADER, array("REMOTE_ADDR: $ip", "HTTP_X_FORWARDED_FOR: $ip"));
//curl_setopt($check, CURLOPT_INTERFACE, "xxx.xxx.xxx.xxx");
curl_setopt($check, CURLOPT_COOKIEJAR, 'cookiemon.txt');
curl_setopt($check, CURLOPT_COOKIEFILE, 'cookiemon.txt');
curl_setopt($check, CURLOPT_TIMEOUT, 40000);
curl_setopt($check, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($check, CURLOPT_URL, $target_url);
curl_setopt($check, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($check, CURLOPT_FOLLOWLOCATION, false);
$tmp = curl_exec ($check);
curl_close ($check);
return $tmp;
}
// get html
$html = check($url);
$dom = new DOMDocument();
@$dom->loadHTML($html);
// apply xpath filter
$xpath = new DOMXPath($dom);
$elements = $xpath->query($xpathQuery);
$temp_dom = new DOMDocument();
foreach($elements as $n) $temp_dom->appendChild($temp_dom->importNode($n,true));
$renderedHtml = $temp_dom->saveHTML();
// return html in json response
// json structure:
// {html: "xxxx"}
$post_data = array(
'html' => $renderedHtml
);
echo json_encode($post_data);
?>
Javascript
$.ajax({
url: "url of service",
dataType: "json",
data: { url: url,
xpath: "//*"
},
type: 'GET',
success: function() {
},
error: function(data) {
}
});
Yahooは2017年6月8日の時点でhtmlライブラリのサポートを実際に終了したようです(私のエラーログによると)。公式の発表はまだないようです。
幸い、公式のhtmlライブラリの代わりに使用できるYQLコミュニティライブラリがあり、コードベースをほとんど変更しません。 YQLコンソールのhtmlstringテーブル を参照してください。
Htmlではなくhtmltableを参照するようにYQLクエリを変更し、コミュニティ環境をRESTクエリに含めます。例:
/*/ Old code /*/
var site = "http://www.test.com/foo.html";
var yql = "select * from html where url='" + site + "' AND xpath='//div'";
var resturl = "https://query.yahooapis.com/v1/public/yql?q="
+ encodeURIComponent(yql) + "&format=json";
/*/ New code /*/
var site = "http://www.test.com/foo.html";
var yql = "select * from htmlstring where url='" + site + "' AND xpath='//div'";
var resturl = "https://query.yahooapis.com/v1/public/yql?q="
+ encodeURIComponent(yql) + "&format=json"
+ "&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";
YQLはhtmlテーブルをサポートしていませんが、1つのネットワーク呼び出しを行って結果を解析する代わりに、複数の呼び出しを行うことが可能であることに気付きました。たとえば、以前の私の呼び出しは次のようになります。
select html from rss where url="http://w1.weather.gov/xml/current_obs/KFLL.rss"
以下のような情報を私に与える必要があります
今、私はこれら2つを使用する必要があります:
select title from rss where url="http://w1.weather.gov/xml/current_obs/KFLL.rss"
select description from rss where url="http://w1.weather.gov/xml/current_obs/KFLL.rss"
..欲しいものを手に入れるため。フォールバックが明確にリストされていないのに、なぜこのようなものが非推奨になるのかわかりませんが、この方法でデータを取得できるはずです。
CloudQuery ( ソースコード )という名前のオープンソースツールを作成し、最近yqlと同様の機能を提供します。数回クリックするだけで、ほとんどのWebサイトをAPIに変換できます。