Featured image of post PythonでRSSから最新の記事を取得する

PythonでRSSから最新の記事を取得する

これはなに Link to this heading

PythonでRSSから最新の記事を取得するために書いたコードのメモ。

必要なモジュール Link to this heading

RSSをPythonで解析できるようにするため、feedparser というPythonモジュールを利用する。feedparserはpipでインストールできる。

pip install feedparser

メモ Link to this heading

feedparserでは、以下のようにしてRSSのURLから情報を取得できる。

feed = feedparser.parse(rss_url)

feedparserで取得した情報は、pprintを利用するときれいに表示できる。

feedparserで取得した情報空記事の情報を取得する場合はentriesメンバにアクセスする。entriesはリストで、複数の記事の情報が入っている。たいていのRSSでは新しい記事から順になっている。この場合、たとえばfeed.entries[0].titleで最新記事のタイトルを取得できる。

linksummaryも取得できるが、RSSによっては設定されていないこともあるため注意が必要。また、このサイトのRSSはsummaryに記事の全文が入っているが、たとえばZennのRSSはsummaryに本文が途中まで入っていて、全文は入っていない。そのためsummaryを取得したからといって、記事の内容がすべて手に入るわけではない。

最終的なコード Link to this heading

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

参考文献・URL Link to this heading

Python, feedparserでRSS, Atomフィードを解析 | note.nkmk.me's image

Python, feedparserでRSS, Atomフィードを解析 | note.nkmk.me

Pythonのサードパーティライブラリfeedparserを使うと、RSS / Atomフィードを解析(パース)してサイトの新着記事などの情報を抽出できる。フォーマットの仕様の違いをfeedparserが吸収してくれるので、どんなフォー ...

note.nkmk.me
Licensed under CC BY-NC-SA 4.0
最終更新 6月 12, 2023
Hugo で構築されています。
テーマ StackJimmy によって設計されています。