これはなに
PythonでRSSから最新の記事を取得するために書いたコードのメモ。
必要なモジュール
RSSをPythonで解析できるようにするため、feedparser
というPythonモジュールを利用する。feedparser
はpipでインストールできる。
pip install feedparser
メモ
feedparser
では、以下のようにしてRSSのURLから情報を取得できる。
feed = feedparser.parse(rss_url)
feedparser
で取得した情報は、pprint
を利用するときれいに表示できる。
feedparser
で取得した情報空記事の情報を取得する場合はentries
メンバにアクセスする。entries
はリストで、複数の記事の情報が入っている。たいていのRSSでは新しい記事から順になっている。この場合、たとえばfeed.entries[0].title
で最新記事のタイトルを取得できる。
link
やsummary
も取得できるが、RSSによっては設定されていないこともあるため注意が必要。また、このサイトのRSSはsummaryに記事の全文が入っているが、たとえばZennのRSSはsummaryに本文が途中まで入っていて、全文は入っていない。そのためsummaryを取得したからといって、記事の内容がすべて手に入るわけではない。
最終的なコード
RSSから取得されるentries
が日時順になっていれば、次のコードで新しい記事からcheck_article_num
個の記事の情報を取得できる。この場合、check_article_num = 1
にすれば最新の記事を取得できる。
get_latest_article_from_rss.py
import feedparser
import time
def get_latest_articles_from_rss(
rss_url: str,
check_article_num: int = 1,
):
"""Get the latest articles from an RSS feed.
Parameters
----------
rss_url : str
The URL of the RSS feed.
check_article_num : int, optional
The number of articles to check, by default 5.
Returns
-------
list[feedparser.FeedParserDict]
The list of latest articles.
"""
feed = feedparser.parse(rss_url)
articles = []
for i in range(check_article_num):
feed_published_time: time.struct_time = feed.entries[i].published_parsed
print(f"{feed.entries[i].title} : {feed_published_time}")
articles.append(feed.entries[i])
if len(articles) == 0:
print("No new articles found.")
return None
return articles
if __name__ == "__main__":
rss_url = "https://notes.nakurei.com/index.xml"
get_latest_articles_from_rss(
rss_url=rss_url,
check_article_num=1,
)
feed_published_time
のように、記事がいつ公開されたかもRSSから取得できる。そのためこれを基準時刻と比較すれば、ある日時以降に公開された記事の情報を取得できそう。