Замена сервиса запросов YQL теперь, когда Yahoo закрыл его - PullRequest
0 голосов
/ 05 января 2019

Итак, теперь, когда Yahoo закрыл query.yahooapis.com, как показано в следующем сообщении, кто-нибудь знает о бесплатной замене?

"Важное замечание EOL: по состоянию на четверг, 3 января 2019 года, служба YQL на query.yahooapis.com будет удален. Это повлияет на пользователей datatables.org, а также разработчики, которые создают функции с помощью этого YQL сервис. Чтобы продолжить использовать наши бесплатные API погоды Yahoo, используйте https://weather -ydn-yql.media.yahoo.com / forecastrss в качестве вашего нового API конечная точка. Свяжитесь с yahoo-weather-ydn-api@oath.com для получения учетных данных на борту этого бесплатного сервиса Yahoo Weather API. Другое на основе 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"
        );
      }

Ответы [ 3 ]

0 голосов
/ 25 января 2019

Я нашел это, и это прекрасно сработало для меня. https://api.rss2json.com Существует бесплатный слой, и он намного проще, чем YQL, для преобразования RSS в JSONP.

0 голосов
/ 25 марта 2019

Я создаю CoudQuery , который способен превратить большинство веб-сайтов в API и имеет простой в использовании веб-интерфейс для создания API. И это с открытым исходным кодом на GitHub

0 голосов
/ 09 января 2019

Вот возможное решение для вас.

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-вызов прокси-скрипта и обработать данные:

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

}

Я изменил свой google rss api несколько лет назад на YQL, теперь мне пришлось сделать это снова сегодня, это заняло несколько часов, но на этот раз вы не будете зависеть от какого-либо стороннего поставщика и, надеюсь, вы сможете использовать свой новый читательский код до тех пор, пока rss не исчезнет в пользу человечества для знаменитого пузыря фильтров;)

Вышеприведенный код является лишь подсказкой, и, конечно, вам придется потратить некоторое время, если вы хотите отобразить ответ на обобщенную структуру YQL. Я не пошел по этому пути и обращался к свойствам ответа по мере необходимости.

...