📚

RustでInoreaderの「後で読む」一覧をCSV出力してみた

2024/01/04に公開

Inoreaderを利用し続けて、1年過ぎたのですが、とある問題と遭遇しました。

「後で読む」記事が貯まりまくっている

毎日気になっているサイトの記事の情報を楽に収集できるから、「これ、後で読もー🎶」などと軽い気持ちで後で読むリストに追加してしまっていました。

その結果、「後で読む」リストは800件を超えています…。
更に「読んだ記事は別サービスで管理しよー」と考えたまま放置してしまっていたので、リストには実際に後で読んだものと読んでいない記事が混在してしまっています😇

とりあえずCSV出力しよう

Inoreaderでは、後で読むリストのCSV出力は対応していないっぽいので、Inoreader APIを利用することにしました。

https://www.inoreader.com/developers/

利用する言語はRustです。

必要な手順について

Inoreader APIを利用するにあたって、必要な手順は以下の通りです。

  1. Inoreaderにてアプリケーション登録をする
  2. Inoreaderのアプリケーション認証の同意ページにアクセスし、トークンを取得する
  3. 「Stream contents」APIを実行して、特定のフィードからコンテンツの一覧を取得する

ざっくりと書きましたが、こんな感じです。

1.Inoreaderにてアプリケーション登録をする

以下のページに書いている通りです。
App IDとApp Keyをメモしておきましょう。

https://www.inoreader.com/developers/register-app

2. Inoreaderのアプリケーション認証の同意ページにアクセスし、トークンを取得する

CLIツールとして作成したかったので、Rustでは認証ページのURLを生成するだけにしました。

認証操作はブラウザを利用して認証ページへアクセスし、認証後のURLからcode(AUTHORIZATION_CODE)をコピーしてもらうようにしています。

3. 「Stream contents」APIを実行して、特定のフィードからコンテンツの一覧を取得する

「Stream contents」APIを利用して、「後で読む」リストを取得してきます。
https://www.inoreader.com/developers/stream-contents

APIの仕様は以下の通りです。

  • 一度に最大100までしか取得できないので、100件を超える場合はループさせる必要がある。
  • 記事を取得し切れなかった場合は、レスポンス内にcontinuationフィールドがあるので、APIを再度実行する時にパラメータとして渡す必要がある。

また、1日に可能なAPIの実行回数は100回なので、テキトーにデバッグをしていると制限に引っかかる可能性があります。

コードについて

年明け直後にノリと勢いで書いたコードです。
(READMEなど更新中です…)

https://github.com/miko3/inoreader_for_rust

実行してみた

実際に実行してみました。

# アプリケーション認証とか済ませる(初回だけ実行すればOK)
cargo run setup
# Inoreaderからデータを取得してくる
cargo run fetch_stream

結果を確認すると、「後で読む」リストに登録されている件数分のデータが出力されていました。
以下はデータの一部を抜粋したものです。

title,url
"Rust(imageproc)で図形を描画する","https://zenn.dev/collabostyle/articles/a508784bd4b2cf"

CSVデータをNotionにインポートしてみた

一旦、後で読むリストをクリアしたかったので、Notionへ退避させました。

インポート手順は、以下の記事の通りです。
https://www.notion.so/ja-jp/help/import-data-into-notion

ChatGPTに分析してもらった

CSVデータをアップロードし、「このリストの中から読むべき記事を10個ピックアップして!」と聞いてみた例です。

(データ量が多かったのが原因なのか、細かな分析をしてもらおうとすると失敗してしまったので、工夫が必要そうです)

さいごに

後回しにし過ぎると碌なことがないので、さっさとやるようにしましょう…🤢
記事が積まれないようにする仕組みも考えていきます!

また、Inoreaderの活用記事を書いているので、読んでみてください!
https://zenn.dev/collabostyle/articles/8786b380a0d64d

コラボスタイル Developers

Discussion