Я не уверен, что вы подразумеваете под «автоматическим определением» нового фида?
Вы ищете код, который может обнаружить, когда кто-то создает новый канал на сайте? Или, вы хотите узнать, когда в существующем фиде есть новая статья?
Первый жесткий, потому что ваш код должен знать, на каком сайте смотреть, поэтому ему нужно какое-то автоматическое обнаружение сайтов с новыми фидами. Поиск google для «новых rss-каналов» не возвращает ничего полезного, по крайней мере, не на первой странице. Если вы или ваши пользователи знаете новый сайт, вы можете иметь интерфейс для добавления новых сайтов для поиска. Затем вы захватываете страницу по этому URL-адресу, ищите ссылки для автоматического обнаружения RSS/Atom и оттуда. Соединения автообнаружения могут открывать банку червей из-за дублирования контента, который используется с использованием разных протоколов (RDF, RSS и Atom), поэтому вам нужно определить, какие из них использовать, или несколько каналов с указанным альтернативным содержимым.
Если вы хотите узнать, когда в существующем фиде есть новые статьи, вам необходимо следить за последним просмотром кода, а также последней статьей, которую вы видели, а затем получить фид и посмотреть если какие-либо статьи не были в вашем списке ранее увиденных статей. Ваш код должен быть чувствительным к информации о времени для жизни во множестве каналов. Нападение на канал каждые пятнадцать минут, когда они обновляются раз в неделю, является плохим. Большинство кодов агрегирования могут делать эти вещи уже, но вам может понадобиться настроить базу данных и рассказать код, как ее найти.
Как правило, для этой задачи я создаю запись crontab в производственной Linux или Unix-системе и периодически запускаю работу, просматривая в базе данных те фиды, чье время последнего запуска, а также сохраненное время от времени, живое значение в прошлом.
Это помогает?
Я забыл про использование головы() по URL-адресу и поиск заголовков etag и last-modified. Я должен был написать агрегатор около двух лет назад и шел из моей сильно поврежденной памяти. +1 за ваш ответ! –
Спасибо, Грег :) –