Получить только новые записи RSS с PHP Script? - PullRequest
0 голосов
/ 12 апреля 2010

Что я пытаюсь сделать:

Извлечение X номеров RSS-каналов из моих блогов и отображение только новых записей. Моя проблема в том, как узнать, какие элементы уже проанализированы?

Решение до сих пор:

Получать канал каждые 5 часов, хранить все заголовки в таблице базы данных или плоском файле. Затем выполните проверку, если заголовок уже есть в базе данных, если не распечатываете его, и сохраните его в базе данных.

Но я не уверен, что это лучшая практика для этого?

Если кто-то знает быстрый путь, это было бы здорово. Извините за мой плохой английский.

Ответы [ 4 ]

3 голосов
/ 12 апреля 2010

Если записи блога, которые вы анализируете, имеют какой-либо индикатор даты, просто создайте в вашей базе данных поле CREATED типа DATETIME и сохраните это значение даты там. Затем, когда вы анализируете, выберите последнюю дату DATETIME SELECT MAX(CREATED) FROM posts LIMIT 1 и не вставляйте ничего, у которой есть дата ранее этой.

Это решение может иметь небольшой недостаток, если вы ожидаете, что некоторые из ваших блогов обновят свои rss с задержкой, но сохраните дату в качестве своей временной метки.

1 голос
/ 12 апреля 2010

Я считаю, что обычной практикой является отработка элемента guid в ленте RSS. Иногда это URI исходной статьи, иногда число, иногда традиционный GUID.

Использование этого элемента для проверки того, что вы уже получили статью, сведет на нет необходимость разбора даты, и именно так Google Reader обычно определяет, был ли элемент уже собран.

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
    <atom:link href="http://www.stevefenton.co.uk/RSS/Blog/" rel="self" type="application/rss+xml" />
    <title>Steve Fenton Blog</title>
    <link>http://www.stevefenton.co.uk/RSS/Blog/</link>
    <description>Blog</description>
    <language>en</language>
    <copyright>Copyright 2008 - 2010 Steve Fenton</copyright>
    <category>Blog</category>
    <generator>Swift Point Content Management System</generator>
    <ttl>60</ttl>
    <managingEditor>info@stevefenton.co.uk (Site Admin)</managingEditor>
    <item>
        <title><![CDATA[Jquery Plugin Infinite Scroller With AJAX]]></title>
        <link>http://www.stevefenton.co.uk/Content/Blog/Date/201004/Blog/Jquery-Plugin-Infinite-Scroller-With-AJAX/</link>
        <description><![CDATA[Friday, 9th April 2010 - Jquery Plugin Infinite Scroller With AJAX <p>I have just finished a new plugin for the jQuery framework.</p><p>The jQuery Infinite Scroller is a great way to deliver a really long list of things, in smaller chunks. For example, if you were displaying articles you could load a page with the first 10 results, then dynamically add more results to the bottom of the list when people start scrolling down. The further they scroll, the more articles you add - thus making it theoretically infinite.</p><p>When the plugin detects that no more results are available, it stops trying to get more items to add.]]> &lt;a href="http://www.stevefenton.co.uk/Content/Blog/Date/201004/Blog/Jquery-Plugin-Infinite-Scroller-With-AJAX"&gt;View Details&lt;/a&gt;.</description>
        <guid>http://www.stevefenton.co.uk/Content/Blog/Date/201004/Blog/Jquery-Plugin-Infinite-Scroller-With-AJAX</guid>
    </item>
    <item>
        <title><![CDATA[Auto Load Your PHP Classes]]></title>
        <link>http://www.stevefenton.co.uk/Content/Blog/Date/201004/Blog/Auto-Load-Your-PHP-Classes/</link>
        <description><![CDATA[Wednesday, 7th April 2010 - Auto Load Your PHP Classes <p>In PHP5 you can create classes to organise your code and represent objects that you want to pass around. This has long been a feature of other languages and was a fundamentally important step forward for PHP.</p><p>There was one thing, though, that I didn't like about PHP classes. If I wanted to instantiate a new "Customer" or "Product", I had to make sure that I included the PHP file that contained the "Customer" or "Product" class. This meant doing this:</p><p>[[#CODE:php:<br>include_once 'classes/Customer.php';</p>]]> &lt;a href="http://www.stevefenton.co.uk/Content/Blog/Date/201004/Blog/Auto-Load-Your-PHP-Classes"&gt;View Details&lt;/a&gt;.</description>
        <guid>http://www.stevefenton.co.uk/Content/Blog/Date/201004/Blog/Auto-Load-Your-PHP-Classes</guid>
    </item>

</channel>
</rss>
1 голос
/ 12 апреля 2010

Я думаю, вы должны хранить дату последнего поста, который вы загрузили. Когда вы получите в следующий раз, вы можете собрать только те, которые новее, чем дата, которую вы сохранили ...

0 голосов
/ 12 апреля 2010

Каждый канал имеет уникальный идентификатор, связанный с ним. Вы можете проверить этот идентификатор и сохранить его в базе данных вместо того, чтобы хранить название.

Попробуйте прочитать документы из Pubsubhb http://superfeedr.com/documentation#pubsubhubbub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...