第一个python程序,以及关于Stack Overflow的第一个问题。我肯定会从自己的体重课程中摆脱出来,但我一直都听说学习编程的最佳动机之一就是想解决问题,事实就是如此。为了我。
我正试图让Snips进入我的私人日历的RSS feed,解析我即将到来的约会,并使用TTS告诉我那天我要做什么。我已经取得了很大的进步(至少在我看来是这样),此时,我可以运行我的程序,它使用feedparser.py成功进入RSS feed并选择当天的所有事件(了解Python中的日期和时间转换花了我很多时间!),并将MQTT消息发送回Snips,后者使用PicoTTS向我读取它们。我遇到的问题是Webcalendar RSS feed对事件条目进行了排序,事件条目的格式设置为GMT时间。我现在不在GMT时区,因此我已经学习了足够的Python,可以将GMT时间正确地格式化为我的时区(这要感谢StackOverflow和大量的阅读!),因此我能够正确选择预定的事件那天。例如,这是昨天的RSS feed,显示了两个事件,这两个事件均发生在2018年11月14日(应用正确时区(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 Feed中显示事件(按格林尼治标准时间日期/时间排序),以及我如何从头到尾遍历所有条目,因此我以错误的顺序显示事件,例如在约会2(太平洋标准时间2点)之前,将约会6(太平洋标准时间下午6时)输入到我的列表中,并且当列表通过MQTT发送到Snips时,事件将读回到我出事了(不是我想要的!) 我认为我可以基于此Stack Overflow发布(How does Python insertion sort work?)使用Python插入排序来解决此问题(但我愿意接受其他建议!),但是我不确定如何保留标题和当我在列表中使用插入排序时,将RSS提要中的pubDate放在一起,因为我需要该列表包含两个条目,并且使TTS有意义的字符串是有用的,因为我找到的所有插入排序示例都使用它对单个变量进行排序。
任何帮助或指导将不胜感激!
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)