YQL: la tabla html ya no es compatible

Yo uso YQL para obtener algunas páginas html para leer información de él. Desde hoy recibo el mensaje de devolución “la tabla html ya no es compatible. Consulte https://policies.yahoo.com/us/en/yahoo/terms/product-atos/yql/index.htm para ver los Términos de uso de YQL”.

Ejemplo en la consola: https://developer.yahoo.com/yql/console/#h=select+ * + from + html + where + url% 3D% 22http% 3A% 2F% 2Fwww.google.de% 22

¿Yahoo detuvo este servicio? ¿Alguien sabe una especie de anuncio de Yahoo? Me pregunto si esto es simplemente un error o si realmente detuvieron este servicio …

Toda la documentación todavía está allí (html scraping): https://developer.yahoo.com/yql/guide/yql-select-xpath.html , https://developer.yahoo.com/yql/

Hace un tiempo publiqué en un foro YQL de Yahoo, ahora este ya no existe (o al menos no lo encuentro). ¿Cómo puede ponerse en contacto con Yahoo para saber si este servicio realmente se detuvo?

Saludos cordiales, hebr3

Parece que Yahoo terminó su soporte de la biblioteca html a partir del 6/8/2017 (según mis registros de errores). No parece haber ningún anuncio oficial de esto todavía.

Afortunadamente, hay una biblioteca de comunidad YQL que se puede usar en lugar de la biblioteca html oficial con algunos cambios en su base de código. Consulte la tabla htmlstring en la consola YQL .

Cambie su consulta YQL para hacer referencia a htmltable en lugar de html e incluya el entorno de la comunidad en su consulta REST. Por ejemplo:

/*/ 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"; 

Muchas gracias por tu código

Me ayudó a crear mi propio script para leer las páginas que necesito. Nunca programé PHP antes, pero con tu código y la sabiduría de Internet podría cambiar tu script a mis necesidades.

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) { } }); 

Aunque YQL ya no es compatible con la tabla html, me he dado cuenta de que, en lugar de realizar una llamada de red y analizar los resultados, es posible realizar varias llamadas. Por ejemplo, mi llamada anterior se vería así:

 select html from rss where url="http://w1.weather.gov/xml/current_obs/KFLL.rss" 

Que debería darme la información como tal a continuación

enter image description here

Ahora tendría que usar estos dos:

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"

.. para obtener lo que quiero. No sé por qué menospreciarían algo como esto sin un respaldo claramente enumerado, pero deberían poder obtener sus datos de esta manera.