これはなに

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から取得できる。そのためこれを基準時刻と比較すれば、ある日時以降に公開された記事の情報を取得できそう。

