загрузить все элементы из одного RSS-канала Atom

Я использую SimplePie, и это вызывает у меня головную боль. Во-первых, позвольте мне объяснить, что я пытаюсь сделать. У моего друга, для которого я делаю сайт, уже есть блог с не таким уж маленьким количеством постов и я хочу загрузить оттуда все элементы, разобрать их и отобразить, если метка правильная. Проблема начинается, когда SimplePie загружает не весь фид, а ограничивает до 25. Согласно этому SO question, ограничение по умолчанию равно 10, и я также проверил фид с расширением Google Chrome, где я получил весь контент блога. И чтобы уточнить, элементы не кэшируются (хорошо, на самом деле они есть), но все еще находятся в блоге, поэтому они не были удалены, и я не получаю старый контент. Кроме того, я скачал URL-адрес фида и открыл его в блокноте, там 25 элементов.

Вот мой пример кода init():

 require_once("php/autoloader.php");
 $feed=new SimplePie();
 $feed->set_feed_url("http://jadran303.blogspot.com/feeds/posts/default");
 $feed->enable_cache(false);
 $feed->init();
 $feed->handle_content_type();

и вот мой код для проверки результатов и просмотра того, что я получаю (это не производственная версия):

$i=1;$j=1;$k=1;
foreach($feed->get_items() as $item):
 echo$k." ".$item->get_title()." - ".$item->get_date('j F Y, g:i a')."<br />";
 if($category=$item->get_category()){
  echo$j". ".$item->get_title()." - ".$category->get_label()." - ".$category->get_term()."<br />";
  if($category->get_label()=="Peugeot 406 Coupé na terenu"){
   echo" - $i ".$item->get_title()."<br />";
   $i++;
  }
  print_r($category);
  $j++;
 }
 $k++;
endforeach;

Мои вопросы:

  • как заставить SimplePie загружать весь контент из блога? Должен ли я просто «foreach($feed->get_items(0,10000) as $item):», чтобы загрузить все и быть в безопасности на всю жизнь?
  • есть ли какой-нибудь другой анализатор Atom, более подходящий для моих нужд? Любая рекомендация приветствуется.
  • почему контент отсортирован по метке, даже в файле по умолчанию, который я скачал, метка пуста, но термин имеет правильные ключевые слова?

Спасибо за помощь.


person Kristjan O.    schedule 14.10.2012    source источник


Ответы (1)


Кроме того, я скачал URL-адрес фида и открыл его в блокноте, там 25 элементов.

Вот почему SimplePie больше не может загружать элементы; там ничего не дают. SimplePie (или любой другой парсер) может получить только то, что есть в ленте.

Если вам нужно больше элементов, вы можете попробовать использовать API фидов Google (они используют кешированные данные из Google Reader, поэтому в них должен быть каждый элемент). (Другой ответ на самом деле неверен, так как он не ограничен 10 элементами; это только в примере кода NewsBlocks.) В качестве альтернативы, покопайтесь на сайте и посмотрите, сможете ли вы найти способ разбиения ленты на страницы.

Согласно вашему комментарию ниже, вы должны иметь возможность добавлять ?max-results=1000 к любой ленте Blogger, чтобы вместо этого получить 1000 элементов. Это характерно для Blogger, но на большинстве сайтов есть что-то подобное.

person Ryan McCue    schedule 15.10.2012
comment
Есть ли способ увеличить количество элементов в ленте блога? Я уже проверил и кажется, что я не могу найти какой-либо вариант для этого. - person Kristjan O.; 15.10.2012
comment
После некоторого исследования этой проблемы я случайно обнаружил следующее: jadran303.blogspot. com/feeds/posts/default?max-results=xx (обратите внимание на конец ?max-results=xx), и я заменил xx на 10000, теперь он приносит мне весь контент блога. - person Kristjan O.; 15.10.2012
comment
Круто, я добавил это к ответу. - person Ryan McCue; 15.10.2012