json YQL查询服务替换,雅虎关闭了它

beq87vna  于 2023-06-25  发布在  其他
关注(0)|答案(3)|浏览(98)

那么,现在雅虎关闭了query.yahooapis.com,如以下消息所示,有人知道一个免费的替代品吗?
“重要的EOL通知:周四,1月。2019年3月3日,www.example.com的YQL服务query.yahooapis.com将退役。这将影响www.example.com的用户datatables.org以及使用此YQL服务创建功能的开发人员。要继续使用我们免费的Yahoo Weather API,请使用https://weather-ydn-yql.media.yahoo.com/forecastrss作为您的新API端点。联系yahoo-weather-ydn-api@oath.com获取证书,以登上这个免费的雅虎天气API服务。使用www.example.com的其他基于YQL的服务query.yahooapis.com将不再运行。
需要更换"//query.yahooapis.com/v1/public/yql?q="为我的rss刮刀工作。

function yql(a, b) {
        return (
          "**//query.yahooapis.com/v1/public/yql?q=**" +
          encodeURIComponent(
            "select * from " +
              b +
              ' where url="' +
              a +
              '" limit ' +
              params.feedcount
          ) +
          "&format=json"
        );
      }
vohkndzv

vohkndzv1#

我发现了这个,它对我很有效。https://api.rss2json.com有一个免费的层,它比YQL更直接,用于RSS到JSONP的转换。

kgqe7b3p

kgqe7b3p2#

我构建了CloudQuery,它能够将大多数网站转换为API,它有一个简单的Web界面来创建API。它在github上开源

a7qyws3x

a7qyws3x3#

这里有一个可能的解决方案。
a)您需要某种代理来允许 AJAX 加载来自不同来源的内容。建议加入白名单并添加CORS标头等。以防止利用您的代理。例如,使用此功能在您的服务器上创建一个php文件:

$valid_url_regex = '/.*(rss|feed|atom).*/';
$url = $_GET['url'];
if ( !preg_match( $valid_url_regex, $url ) ) exit;

$feeds = file_get_contents($url);
//this is some workaround to get special namespaces into the json
$feeds = str_replace("<content:encoded>","<contentEncoded>",$feeds);
$feeds = str_replace("</content:encoded>","</contentEncoded>",$feeds);
$feeds = str_replace("<media:content ","<mediaContent ",$feeds);
$feeds = str_replace("</media:content>","</mediaContent>",$feeds);

$simpleXml = simplexml_load_string($feeds, "SimpleXMLElement", LIBXML_NOCDATA);//this is for CDATA
$json = json_encode($simpleXml);
header("Access-Control-Allow-Origin: http://yourdomainnamehere");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); 
print $json;

B)对代理脚本执行异步ajax-call并处理数据:

function loadRss(url)
{
    $.ajax({
        url: 'yourserverurl/rssproxy.php?url='+url,
        type: 'GET',          
        success: function(response) {
            handleResponse(JSON.parse(response));
        }
    });
}

function handleResponse(response) { 
    var entries; 

    if(response.entry) //ATOM
        entries = response.entry;
    else if(response.channel.item) //RSS 1/2
        entries = response.channel.item;

    var feedTitle="";

    if(response.title)
        feedTitle = response.title;
    else if(response.channel.title)
        feedTitle = response.channel.title;

    //iterate all news entries
    $.each(entries, function (i, e) {
            console.log("Entry #"+i);
            console.log(e);
            //access the data as necessary like e.content, e.summary, e.contentEncoded etc....
    }
    );

}

几年前,我把谷歌rss API改成了YQL,现在我不得不在今天再做一次,花了几个小时,但这次你不会依赖于一些第三方供应商,希望你可以使用你的新阅读器代码,直到rss消失在人类的优先地位,为著名的过滤器泡沫;)
上面的代码只是一个提示,当然,如果你想将响应Map到广义的YQL结构,你必须花一些时间。我没有这样做,并在必要时访问响应的属性。

相关问题