Замена службы запросов YQL теперь, когда Yahoo закрыла ее

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

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

person Purp1eOne    schedule 04.01.2019    source источник
comment
Мое маленькое приложение тоже пострадало от этого, по-видимому, вся штука с YQL вышла из строя.   -  person enorl76    schedule 07.01.2019


Ответы (3)


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

person Xopher    schedule 25.01.2019

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

person timqian    schedule 25.03.2019

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

а) Вам нужен какой-то прокси, чтобы разрешить загрузку контента с помощью 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;

б) Выполните асинхронный 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. Я не пошел по этому пути и получил доступ к свойствам ответа по мере необходимости.

person Markus Brüderl    schedule 08.01.2019
comment
Спасибо за помощь, я посмотрю и посмотрю, смогу ли я реализовать ваше решение. - person Purp1eOne; 09.01.2019