Первая программа на Python и первый вопрос о переполнении стека.Я определенно выбиваю из своей весовой категории то, что я пытаюсь сделать, но я всегда слышал, что одна из лучших мотиваций для обучения программированию - это желание решить проблему, и это оказалось так.для меня.
Я пытаюсь заставить Снипса перейти на RSS-канал моего личного календаря, проанализировать мои предстоящие встречи и использовать TTS, чтобы сообщить мне, что у меня происходит в тот день.Я добился большого прогресса (по крайней мере, как я это вижу), и на данный момент я могу запустить свою программу, и она успешно переходит на RSS-канал с помощью feedparser.py и выбирает все события в текущий день.(изучение преобразования дат и времени в Python заняло у меня совсем немного времени!) и отправляет MQTT-сообщение обратно в Snips, который использовал PicoTTS, чтобы прочитать их мне.Проблема, с которой я столкнулся, заключается в том, что RSS-канал Webcalendar упорядочивает записи о событиях, которые отформатированы как время по Гринвичу.Я не живу в часовом поясе GMT, поэтому я выучил достаточно Python, чтобы правильно форматировать время GMT в моем часовом поясе (благодаря StackOverflow и большому количеству чтения!), Поэтому я могу правильно выбирать события, запланированные надень.Например, вот лента RSS за вчерашний день, показывающая два события, оба из которых происходят 14 ноября 2018 года, когда применяется правильный часовой пояс (PST).
<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0" xml:lang="en-us">
<channel>
<title><![CDATA[WebCalendar]]></title>
<link>http://XX.XX.XX.XX/WebCalendar/</link>
<description><![CDATA[WebCalendar]]></description>
<language>en-us</language>
<generator>:"http://www.k5n.us/webcalendar.php?v=v1.2.7"</generator>
<image>
<title><![CDATA[WebCalendar]]></title>
<link>http://XX.XX.XX.XX/WebCalendar/</link>
<url>http://www.k5n.us/k5n_small.gif</url>
</image>
<item>
<title><![CDATA[Test Appointment 6]]></title>
<link>http://XX.XX.XX.XX/WebCalendar/view_entry.php?id=245&friendly=1&rssuser=__public__&date=20181114</link>
<description><![CDATA[Test Appointment 6 oclock]]></description>
<pubDate>Thu, 15 Nov 2018 02:00:00 GMT</pubDate>
<guid>http://XX.XX.XX.XX/WebCalendar/view_entry.php?id=245&friendly=1&rssuser=__public__&date=20181114</guid>
</item>
<item>
<title><![CDATA[Test Appointment 2]]></title>
<link>http://XX.XX.XX.XX/WebCalendar/view_entry.php?id=246&friendly=1&rssuser=__public__&date=20181114</link>
<description><![CDATA[Test Appointment 8]]></description>
<pubDate>Wed, 14 Nov 2018 22:00:00 GMT GMT</pubDate>
<guid>http://XX.XX.XX.XX/WebCalendar/view_entry.php?id=246&friendly=1&rssuser=__public__&date=20181114</guid>
</item>
Итак, вот моя проблема.Из-за того, как Webcalendar представляет события (упорядоченные по дате / времени по Гринвичу) в ленте RSS, и из-за того, что я перебираю все записи с начала до конца, я получаю события, представленные в неправильном порядке, например, Назначение 6 (который находится в 6 часов вечера по тихоокеанскому времени) вводится в мой список ПЕРЕД назначением 2 (которое происходит в 2 часа по тихоокеанскому времени), и когда список отправляется Snips через MQTT, события считываются мне изпорядок (не то, что я хочу!) Я думаю, что я могу использовать вставку Python для решения проблемы (но я открыт для других предложений!) на основе этой публикации переполнения стека ( Как работает сортировка вставкой Python?) но я не уверен, как сохранить заголовок и pubDate из ленты RSS вместе, когда я использую сортировку вставкой в список, поскольку мне нужен список, содержащий обе записи, и мои строки, чтобы сделать TTSсмысл, поскольку все примеры сортировки вставками, которые я обнаружил, показаны с использованием it для сортировки одной переменной.
Буду очень признателен за любую помощь или направление !!
d = feedparser.parse('http://XX.XX.XX.XX/WebCalendar/rss.php?numdays=3&repeats=1')
global parsedListOfCalendarEntryTitles # Create a global variable:parsedListOfCalendarEntryTitles that will be used to hold the list of parsed RSS feed entry titles & Time
parsedListOfCalendarEntryTitles = [] # Define the global variable: parsedListOfCalendarEntryTitles as a list
global mqttFormattedListOfCalendarEntryTitles #Create a global variable: mqttFormattedListOfCalendarEntryTitles that will be used to hold the list of MQTT RSS feed entry titles & Time
mqttFormattedListOfCalendarEntryTitles = [] # Define the global variable: mqttFormattedListOfCalendarEntryTitles as a list
for entry in d.entries:
from_zone = tz.tzutc()
to_zone = tz.tzlocal()
date = entry.published
utc = datetime.strptime(date, '%a, %d %b %Y %H:%M:%S %Z')
utc = utc.replace(tzinfo=from_zone)
pacificTime = utc.astimezone(to_zone)
today = datetime.now()
if today.date() == pacificTime.date():
parsedListOfCalendarEntryTitles.append("You have " + entry.title + " at " + pacificTime.strftime("%I:%M %p"))
print(parsedListOfCalendarEntryTitles)