【ITニュース解説】Reading Medium Articles by Tag, Author and Publication With RSS (and Where It Stops)
2026年11月05日に「Dev.to」が公開したITニュース「Reading Medium Articles by Tag, Author and Publication With RSS (and Where It Stops)」について初心者にもわかりやすく解説しています。
ITニュース概要
APIがないMedium記事を、タグ、著者、出版物ごとのRSSフィードで追跡できる。各フィードは最新10件を返し、タグは要約、著者・出版物は全文を含む。Python等で解析でき、多数記事取得の工夫や外部サービス利用法も紹介している。
ITニュース解説
Mediumは、記事のコンテンツをプログラムで直接取得するための公式なAPIを提供していない。しかし、ログインやAPIキーなしで利用できるRSSフィードが用意されており、これらを利用することで、特定のトピックや著者の記事、あるいは特定の出版物の最新情報を取得できる。RSSフィードとは、ウェブサイトの更新情報を構造化された形式で配信する仕組みのことである。ユーザーはRSSリーダーと呼ばれるツールを使って複数のサイトの更新情報を効率的に確認できるだけでなく、プログラムで情報を自動的に取得する際にも活用できる。
Mediumが提供するRSSフィードは主に3種類ある。一つ目は、特定の「タグ」が付いた最新記事を取得するためのフィードで、URL形式は「https://medium.com/feed/tag/{タグ名}」となる。「programming」や「artificial-intelligence」といったタグのスラッグ(URLの一部として使われる識別子)を指定して利用する。二つ目は、特定の「著者」が投稿した最新記事を取得するためのフィードで、URL形式は「https://medium.com/feed/@{ユーザー名}」である。Mediumアカウントのユーザー名を指定する。三つ目は、特定の「出版物(Publication)」が投稿した最新記事を取得するためのフィードで、URL形式は「https://medium.com/feed/{出版物スラッグ}」となる。「better-programming」のような出版物スラッグを使用する。カスタムドメインを持つ出版物であっても、Mediumのサブドメイン形式のRSSフィードが利用できる。
これらのRSSフィードから取得できる情報には、記事のタイトル、記事へのリンク、一意の識別子(GUID)、著者の名前、公開日時、更新日時、そして記事に付けられたタグ(カテゴリ)が含まれる。記事へのリンクは「https://medium.com/p/{記事ID}」のような形式のGUIDから、記事IDを抽出できる。
ただし、各フィードから得られる情報にはいくつかの制限と特徴がある。まず、全てのフィードは常に最新の10件の記事しか返さない。さらに、これらにはページネーション(次のページに進む機能)がなく、「?page=2」のようなパラメータを追加しても、同じ10件の記事が返されるだけである。
特に重要なのは、フィードの種類によって記事の本文が含まれるかどうかが異なる点だ。タグフィードの場合、記事の本文は一切含まれず、代わりに約140文字程度の記事の冒頭部分と、「(続きを特定の出版物で読む)」といったリンクが「description」要素に含まれるのみである。このリンクテキストから、記事がどの出版物に掲載されているかを特定できる。一方、著者フィードと出版物フィードは、原則として記事の完全なHTML形式の本文を「content:encoded」要素内に含む。ただし、メンバー限定(有料購読者向け)の記事の場合、本文は含まれず、タグフィードと同様に要約のみが提供される。したがって、「content:encoded」要素に本文がない場合、その記事はメンバー限定である可能性が高いと判断できる。
その他の細かい注意点として、存在しないユーザー名を指定して著者フィードにアクセスしようとすると、HTTP 404エラー(ページが見つからない)が返されるため、入力ミスと空のフィードを区別できる。また、フィード内の記事リンクには「?source=rss-...」のようなトラッキングパラメータが付与されている場合があるため、記事の重複を排除する際にはこれらを除去する必要がある。記事の本文が提供される場合、Mediumのトラッキング用1x1ピクセル画像(例: medium.com/_/stat?...)が含まれていることがあるので、画像処理を行う際にはこの画像をスキップすることが推奨される。記事の拍手数やコメント数はRSSフィードからは取得できない。これらはMediumの記事ページや内部APIで提供される情報だが、MediumはCloudflareのボット保護機能を利用しており、サーバーからの直接アクセスではブロックされることが多い。そのため、拍手数の取得は非常に困難であり、成功は保証されない。
10件という記事数の制限を乗り越えてより多くの記事を取得するには、主に二つのアプローチが考えられる。一つは「Widen(広げる)」アプローチで、一度の実行でより多くのタグ、著者、出版物を追跡する方法である。同じ記事が複数のフィードに現れることはよくあるため、記事のID(GUIDから抽出)に基づいて重複を排除する必要がある。もう一つは「Poll(ポーリングする)」アプローチで、フィードを定期的に(例えば忙しいタグであれば毎時、著者であれば毎日)実行し、取得した記事IDを記録していく方法である。これにより、過去の記事を含めた履歴が徐々に構築されていく。いずれの方法においても、Mediumのサーバーに対して礼儀正しく振る舞うことが重要である。具体的には、1秒に1回程度のゆっくりとしたリクエスト頻度を守り、HTTP 429(Too Many Requests)や5xx系のエラーが返された場合はしばらく待ってから再試行し、また、プログラムが何であるかを示す適切な「User-Agent」ヘッダを送信するべきである。
ニュース記事には、これらのRSSフィードをPythonとJavaScript(Node.js)で読み取り、必要な情報を抽出する具体的なコード例も示されている。Pythonの例では、標準ライブラリのみを使用し、XML解析、HTMLテキストの抽出、正規表現による不要な要素の除去、記事情報の辞書形式での整理までを行う。JavaScriptの例も同様に、fetch APIを使用してフィードを取得し、正規表現を駆使して記事タイトルやURL、著者、タグなどの情報を抽出する。これらのコードは、取得したデータから記事の要約や単語数を計算し、おおよその読了時間を算出する機能も持つ。
もし、これらのスクリプトを自分で管理・運用する手間を避けたい場合は、Apifyというプラットフォーム上で提供されている「Medium Scraper: Articles by Tag, Author and Publication」のような自動化ツールを利用するという選択肢もある。このツールは、指定されたタグ、ユーザー名、出版物スラッグ、あるいは特定の記事URLから情報を収集し、重複を排除した上で、タイトル、URL、著者、出版物、日付、タグ、要約または全文、単語数、読了時間、メンバー限定フラグなど、整理された形で記事データを出力する。拍手数やコメント数の取得もオプションとして提供されるが、これは取得の確実性が低い「ベストエフォート」な機能である。このツールもMediumの10件/フィードの制限に従うが、複数のフィードをまとめて処理し、コスト管理機能も備えている。