Использование jQuery.parseXML
Я пытаюсь создать агрегатор, который будет извлекать элементы из RSS-канала и сохранять их в массиве jQuery (чтобы я мог циклически перемещаться по массиву и рандомизировать вывод).
Я нашел некоторую информацию об использовании jQuery.parseXML
для этого, однако, демо, если я не могу понять, потому что у меня нет особых знаний в этой области, и демо не показывает где-нибудь, где добавлена ссылка на RSS-канал?
<p id="someElement"></p>
<p id="anotherElement"></p>
<script>
var xml = "<rss version='2.0'><channel><title>RSS Title</title></channel></rss>",
xmlDoc = $.parseXML( xml ),
$xml = $( xmlDoc ),
$title = $xml.find( "title" );
// Append "RSS Title" to #someElement
$( "#someElement" ).append( $title.text() );
// Change the title to "XML Title"
$title.text( "XML Title" );
// Append "XML Title" to #anotherElement
$( "#anotherElement" ).append( $title.text() );
</script>
Где я могу добавить ссылку на RSS-канал? И где сделан массив?
В конечном итоге это будет мозаичная стена со всеми элементами, выводимыми визуально в HTML.
У меня есть данные из RSS-канала для каждого элемента:
- заглавие
- описание
- ссылка на сайт
- дата публикации
- категория
Мне нужно вытащить все эти данные, чтобы я мог вывести заголовок, описание, обернуть их в теге ссылки, а затем сохранить категорию и использовать сохраненную дату публикации для рандомизации вывода (например, выберите последние 30 дней и выведите эти элементы в случайный порядок).
Вот код, который я написал, используя страницу Ajax, но я не знаю, правильно ли это или что он должен делать, чтобы работать....
jquery.ajax(http://www.sagittarius-digital.com/news.rss [, dataType xml])
2 ответа
Вам не нужно использовать $.parseXml() при вызове канала rss через ajax с dataType 'xml'.
$.ajax({
url:'news.rss',
dataType:'xml',
success:function( xmlString ){
var $xml = $( xmlDoc ),
$title = $xml.find( "title" );
$title.each(function(){
console.log($(this).text());
});
}
});
Помните, что URL-адрес RSS должен находиться в том же домене, в котором находится файл javascript. Если нет, то вам потребуется выполнить некоторую логику на стороне сервера, например, cURL, чтобы получить канал rss.
Попробуйте что-то вроде
jQuery(function(){
$.ajax({
url: 'news.rss', //place the your rss feed url here
dataType: 'xml'
}).done(function(xml){
var items = $(xml).find('item').map(function(){
var $item = $(this);
var array = ['<li>'];
array.push('<a href="' + $.trim($item.find('link').text()) + '">')
array.push('<h3>' + $item.find('title').text() + '</h3>')
array.push('</a>');
array.push('<p>' + $item.find('description').text() + '</p>');
array.push('<span class="category">' + $item.find('category').text() + '</span>')
array.push('<span class="pub-date">' + $item.find('pubDate').text() + '</span>')
array.push('</li>');
return array
}).get();
$('ul').append(items.join(' '));
}).fail(function(){
conole.log('error', arguments)
})
})
Демо: Плункер