Узнайте, что представляют собой новые данные из RSS-канала, по сравнению с записями, уже имеющимися в базе данных. Затем поместите новые записи в БД. Как? - PullRequest
1 голос
/ 05 октября 2008

Допустим, у меня есть база данных и канал RSS. Я должен выяснить, какие новые данные из ленты RSS, которых еще нет в базе данных. Как бы вы подошли к решению этой проблемы?

Ответы [ 5 ]

2 голосов
/ 05 октября 2008

Сначала вы должны уникально идентифицировать каждый предмет. Это проблематично, потому что некоторые сайты используют элемент guid, а некоторые - нет, а для некоторых элементов элемент link никогда не меняется, а для некоторых он меняется. Я думаю, что общее практическое правило заключается в том, что если у элемента есть guid, вы используете его в качестве ключа, в противном случае вы используете link в качестве ключа и надежды.

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

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

2 голосов
/ 05 октября 2008

Как насчет генерации хеш-кода или некоторого уникального идентификатора для каждого элемента RSS, а затем сохранения его в базе данных? Затем вы просто генерируете хеш-код для каждого элемента в новом RSS и проверяете его по базе данных.

1 голос
/ 05 октября 2008

У большинства RSS-каналов будет дата с каждой историей, поэтому сделайте запрос, чтобы извлечь дату последней истории из базы данных, извлечь все последние новости из ленты RSS и сравнить даты.

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

0 голосов
/ 05 октября 2008

От руки, несколько предложений:

  • Выполните контрольную сумму по каждому элементу в ленте, сохраните результат в базе данных. Сравните результаты в базе данных с каждым новым файлом / потоком из источника RSS.
  • Хэш заголовка. дата и время для каждого элемента и хранить в базе данных. Сравните с каждым обновленным потоком RSS.
0 голосов
/ 05 октября 2008

Вытащить из уникального поля определенного элемента в RSS-канал. Затем проверьте, есть ли этот элемент в БД. Запустите эту логику в цикле.

...