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