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

Кто-нибудь испытывал подобную проблему? Вроде бы совершенно случайно.


person apiljic    schedule 15.12.2015    source источник


Ответы (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-адресе, скорее всего, решит эту проблему за вас.

person Martin Valgur    schedule 15.12.2015
comment
да. С датами никаких проблем. Но если я наткнусь на какой-либо другой заголовок с текстом: больше текста, тогда это исправление заголовка приведет к потере содержимого, или? Но тот факт, что вы заметили разницу между двумя форматами, может быть чрезвычайно полезным. Я буду тестировать его в течение более длительного периода времени, чтобы увидеть, смогу ли я получить согласованный вывод хотя бы из одного из форматов. - person apiljic; 15.12.2015
comment
К сожалению, я не могу это подтвердить. Я только что получил с? Format = rss и? Format = atom оба варианта в заголовке. - person apiljic; 16.12.2015
comment
Я отмечу это как правильный ответ, поскольку он указывает на источник проблемы. Реальное решение этой проблемы потребует участия поставщика каналов. - person apiljic; 19.12.2015