Feedparser: несоответствие entry.title

Я пытаюсь разобрать канал RSS с помощью feedparser.

Я получаю название так:

import feedparser
url = 'http://chem.aalto.fi/en/current/events/rss.xml'
feed = feedparser.parse(url)
for entry in feed.entries:
    title = entry.title
    print title

Обычно это работает без проблем, но я столкнулся со странным случаем. В этом конкретном фиде заголовки выглядят так:

<title>06.11.2015: Some title text</title>

Как и следовало ожидать, я иногда получаю:

06.11.2015: Some title text

... но иногда и это для того же предмета:

11/06/15: Some title text

Кто-нибудь сталкивался с подобной проблемой? Кажется, это совершенно случайно.

1 ответ

Решение

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

Если вашей целью является получение согласованной даты и названия событий, вы можете использовать дополнительные xcal метаданные в этой ленте. Например, используя dateutil:

import feedparser
import dateutil.parser
url = 'http://chem.aalto.fi/en/current/events/rss.xml'
feed = feedparser.parse(url)
for entry in feed.entries:
    title = entry.title.split(": ", 1)[1]
    start_time = dateutil.parser.parse(entry.xcal_dtstart)
    end_time = dateutil.parser.parse(entry.xcal_dtend)
    print("{} - {}: {}".format(start_time.date(), end_time.date(), title))

РЕДАКТИРОВАТЬ: Кроме того, что это стоит того, что RSS-канал, похоже, последовательно выводит заголовки в 06/15/16 формат при использовании http://chem.aalto.fi/en/current/events/rss.xml?format=rss и в 15.06.2016 форматировать при использовании http://chem.aalto.fi/en/current/events/rss.xml?format=atom для запроса.

Код, используемый для создания канала (на основе generator="FeedCreator 1.7.6(BH)" в верхней части ленты) можно посмотреть по адресу https://github.com/ajslater/feedcreator/blob/master/include/feedcreator.class.php

Исходя из этого, я предполагаю, что библиотека Feedcreator имеет некоторые непреднамеренные побочные эффекты для основного кода, который генерирует заголовок записи, и этот побочный эффект, похоже, зависит от используемого формата канала. Если формат канала не указан явно в URL-адресе, это может быть (неправильно) использование некоторой кэшированной версии формата или всего содержимого канала. В любом случае, явная установка формата в URL, скорее всего, решит эту проблему для вас.

Другие вопросы по тегам