個人ブログのようなものです。とくにジャンルはありません。
広告枠
スッキリわかるJava入門 第3版 (スッキリわかる入門シリーズ)
商品ページ
Amazon
記事の概要
作成日:2021-10-31
最終更新日:2021-10-31
記事の文字数:4415
情報技術情報技術-WebAPIWebサイト作成
管理人作品宣伝
【プログラミング】実例で分かるかもしれない再帰処理
動画 / 最終更新:2024-12-08
そんなに使わない(当社比)のにプログラミングの定番になってしまっている、再帰処理を実例…
YouTubeで閲覧するニコニコ動画で閲覧する
利用素材等の詳細情報
ChatGPT-アイコンと名前変更
Chrome 拡張機能 / 最終更新:2023-12-14
ChatGPTのアイコン等を自分の好みに変えられます。好きなキャラと話しているような気…
ChromeWebストアで閲覧する
利用素材等の詳細情報
作品一覧はこちら
Pythonを使ってinoreaderでサイトの更新情報を取得してみた
inoreader(イノリーダー?)が公開しているWeb APIを使用して、Pythonで自動的にサイトの更新情報を取得できるようにした。
ので実際のPythonコードを交えてそのやり方のメモをここに残します。
ちなみにコードを書くのは上手くないのでクオリティには目をつぶってください。
前提
  • inoreaderは無料サービスを使用する(無料で十分使えそうだったため)
ざっくりとした流れ
大体の作業の流れは以下の通りです。 このうちpythonで自動化するのは「5~6」デス。
  1. inoreaderにサービス登録する
  2. inoreaderに更新をウォッチしたいサイトを登録する
  3. inoreaderで接続用アプリケーションを登録する
  4. inoreaderでトークンを発行する(GoogleDevelopers使用)
  5. 【python】サイトの更新情報を取得する
  6. 【python】取得した情報をテキストファイルに保存する
実作業
1.inoreaderにサービス登録する
まず最初に、当然ですがinoreaderでアカウントを登録する必要があります。
以下のURLからアカウントを作成しましょう。
アカウント作成ページ
2.inoreaderに更新をウォッチしたいサイトを登録する
inoreaderでアカウントを登録したら、最初に更新をウォッチしたいサイトを登録する必要があります。
以下の画像の場所から登録できます。
画像クリックで等倍
そしてここで更に登録したサイトをフォルダにまとめておきましょう。
後でpythonで更新情報を取得するときに、フォルダ単位で取得できます。
フォルダの作成方法はフィードと同じです。
画像クリックで等倍
3.inoreaderで接続用アプリケーションを登録する
inoreaderではFeedlyと違って無料版でもきちんとしたOAuthが使えるようです。
その前段としてinoreader上であらかじめ接続用アプリケーションを作成しておく必要があります。
やり方は以下画像を参考にしてください。
「クライアントシークレット」(App Key)は所謂パスワードのようなもので秘匿性が高いので他の人に教えないようにしましょう。
ただ、のちの工程で必要なので、「クライアントID」と「クライアントシークレット」はメモっておいてください。
ここで間違えそうなところは、リダイレクトURIは特に入れなくてもいいというところです。
画像クリックで等倍
画像クリックで等倍
4.inoreaderでトークンを発行する(GoogleDevelopers使用)
前述の通りFeedlyと違い、無料版でもアクセストークンの使用方法がきちんとした奴です。
まず最初にアクセストークンとリフレッシュトークンを発行しないといけないのですが、ここをpythonで作るとめんどくさいはずで、なおかつ一回しかやらない手順なので、公式がデモのやり方を紹介しているそれに相乗りしました。
以下URLの手順に従い、トークンを発行してください。
「Google OAuth 2.0 Playground」というセクションのところに手順が書いてあります。
アクセストークン発行手順
最後までやるとアクセストークンとリフレッシュトークンが画面に表示されるので、それをメモっておいてください。
5.【python】サイトの更新情報を取得する
ここからpythonコードになります。どうでもいいところは中略です。
# パッケージの読み込み import requests ~~~中略~~~ #------------------------------------------------------------------- # コンテンツ取得 def getArticle(streamId): # 戻り値を指定 ret = "" try: # コンテンツ取得API実行 res = callAPI(streamId) # ステータスコードが403の場合、アクセストークンを更新し、もう一度コンテンツを取得する if res.status_code == 403: #アクセストークンを更新 refleshToken() # コンテンツ取得API実行 res = callAPI(streamId) # html文を作成 js = res.json() for article in js["items"]: # ここで見たい情報をまとめる ret += article["title"] except: CommonFunction.updFileContent(trgtFolder + "エラー.txt", "ステータスコード:" + str(res.status_code)) return ret # コンテンツ取得API実行 def callAPI(streamId): # アクセストークンを取得 accessToken = CommonFunction.getFileContent(trgtFolder + "AccessToken.txt") # API利用に必要な情報を格納 url = "https://www.inoreader.com/reader/api/0/stream/contents/" + streamId + "?n=" + artNum reqHeader = { "Content-Type":"application/x-www-form-urlencoded", "Authorization":"Bearer " + accessToken } # コンテンツ取得APIを実行 res = requests.get(url, headers=reqHeader) return res # アクセストークンを更新 def refleshToken(): # リフレッシュトークンを取得 refToken = CommonFunction.getFileContent(trgtFolder + "RefleshToken.txt") # API利用に必要な情報を格納 url = "https://www.inoreader.com/oauth2/token" reqHeader = { "Content-Type":"application/x-www-form-urlencoded" } reqParam = { "client_id":"**********", "client_secret":CommonFunction.getFileContent(trgtFolder + "ClientSecret.txt"), "grant_type":"refresh_token", "refresh_token":refToken } # トークンリフレッシュAPIを実行 res = requests.post(url, headers=reqHeader, data=reqParam) CommonFunction.updFileContent(trgtFolder + "RefleshTokenBK.txt", res.json()) # 念のためリフレッシュした時のレスポンスを全部保存 # アクセストークンをファイルに保存 CommonFunction.updFileContent(trgtFolder + "AccessToken.txt", res.json()["access_token"]) # リフレッシュトークンをファイルに保存 CommonFunction.updFileContent(trgtFolder + "RefleshToken.txt", res.json()["refresh_token"]) #-------------------------------------------------------------------
メソッドが3つあります。
記事を取得する流れを記載した「getArticle(streamId)」。
記事本体を取得するための「callAPI(streamId)」。
アクセストークンが期限切れになったときにトークンをリフレッシュする「refleshToken()」。

処理の大まかな流れは、
・まず、「getArticle(streamId)」が呼ばれ、
・その中で「callAPI(streamId)」が呼ばれ、
・その結果ステータスコードが「403」となった場合(これがアクセストークンの有効期限切れを表します)、「refleshToken()」が呼ばれ、もう一度「callAPI(streamId)」が呼ばれ、という流れです。

ちなみに前提として、クライアントシークレットとアクセストークンとリフレッシュトークンは別途それぞれ「ClientSecret.txt」「AccessToken.txt」「RefleshToken.txt」というファイルに保存してあります。
クライアントIDだけコードに直書きしてますが、これは書き換えることもないしそんなに秘匿性が高い情報ではないので直接書いてます。

ここのコードについては、ステータスコード403時の特殊な動きを除けば、あと気になるのは「StreamId」かと思います。
これについては次に説明します。
6.【python】取得した情報をテキストファイルに保存する
以下のように取得した記事の更新情報をテキストファイルに保存しています。
「CommonFunction.updFileContent」メソッドは単にテキストファイルに保存しているだけです。
content = "" content += getArticle("user%2F-%2Flabel%2Fウマ娘") CommonFunction.updFileContent(trgtFolder + "ウマ娘.txt", content)
「user%2F-%2Flabel%2Fウマ娘」が「StreamId」です。
最初に作成したフォルダがあると思いますが、StreamIdを単純に言うと「user%2F-%2Flabel%2F{フォルダ名}」みたいにすればいいだけのようです。
inoreaderAPIのいいところ
  • API制限数が明白になっていること
  • 無償版でも普通に使えるだけのAPI制限数になっていること
inoreaderAPIのキツいところ
作った上でinoreaderAPIのキツかったところは以下です。
  • FeedlyAPIと違い、記事のサムネイルを取得できない
ちなみに以下の記事がこの方法で作成されているページです。 サンプル
コメントログ
コメント投稿




広告枠
Python[完全]入門
商品ページ
Amazon
関連ページ
【プログラミング】実例で分かるかもしれない再帰処理
本ページは以下動画の台本を書き起こしたものです 解説の趣旨・方向性 皆さん、こんばんは今回はプログ…
SNSツイート一元化対応(Twitter・Misskey・Mastodon・Bluesky)-公開
概要 SNSツイートを一元化するためのツールを作成しています(古い記事ですが、こちらのページで紹介…
SNSツイート一元化対応(Twitter・Misskey・Mastodon・Bluesky)-Python
概要 概要 SNSのツイートを一元化する際の備忘録というかPythonコードの共有です。 それぞれ…
Windows-PowerShellを使用してのフォルダ内のファイル名を連番にリネームする
以下PowerShellコードを実行することで、フォルダ内のすべてのファイルのファイル名を「0001…
SCSSとやらでメディアクエリと疑似要素の組み合わせに小一時間苦戦したという話
SCSSとやらでメディアクエリと疑似要素の組み合わせに小一時間苦戦したという話 当然ですが本サイト…
ボタンを押す演出でCSSのtranslateYやtopを使用することの問題
ボタンを押す演出でCSSのtranslateYやtopを使用することの問題…
東京03のyoutubeチャンネルの概要ページの挙動がおかしい
東京03のyoutubeチャンネルの概要ページの挙動がおかしい…
Youtube Data APIでハンドルIDからユーザ情報を取得できない
Youtube Data APIでハンドルIDからユーザ情報を取得できない問題 結論から言うと現在…
ウマ娘まとめサイト(InoReader)
ウマ娘まとめサイト(InoReader)…
ウマ娘まとめサイト(Feedly)
ウマ娘まとめサイト(Feedly)…
管理人ツイート
本サイトのタグ一覧
NovelAIR18VRoidWebサイト作成Webツールアークナイツアークナイツ-ステージ攻略日記アズールレーンアズールレーン-日記ウマ娘ギャラリーゲームデビラビローグプログラミングホラーポケットタウン怪談気ままな日記情報技術情報技術-WebAPI知的財産権統合戦略白夜極光本サイトについて魔王スライム様がんばる!漫画
人気記事
メイド・オブ・ザ・デッド-攻略お助け情報
ネタバレ注意! 本ページは『メイド・オブ・ザ・デッド』の情報を記録しているものです。 攻略の参考に…
1140.4020 pt
剣と魔法と学園モノ。2G - パーティ編成確認ツール
ツール概要 ととモノ。2Gのパーティ編成を考える際に使うツールです。 あくまでストーリークリアまで…
288.0348 pt
アークナイツ-特訓アイテムの使用先考慮
アークナイツ-特訓アイテムの使用先について 概要と注意事項 この記事は1年以上前の実装状態での結果…
144.4000 pt
アークナイツ-5周年商品-理性換算
概要 "「5周年商品」および「新常設商品」でお得な商品はどれか"というのを理性に換算して一覧化した…
118.5679 pt
アークナイツ-「二次創作ガイドライン」と「ファンキット利用ガイドライン」の関連について
本記事の概要と注意点 本記事の趣旨・方向性 「アークナイツの二次創作ガイドライン」について、分から…
85.3333 pt
管理人について
「ふじみ むい」と言います ひょんなことから肉体を得たのでその肉体を使って活動をしています。 とい…
84.0122 pt
アークナイツ-昇進2率ランキング
アークナイツのTier表を作る際の備忘録です こちらのページで、昇進2率を基にTier表を作ろうと…
69.1277 pt
アークナイツ-4周年パック理性換算
概要 "4周年パックでお得な商品はどれか"というのを理性に換算して一覧化したものとなります。 絶対…
60.5000 pt
最新記事
メンバーシップについて
概要 他サイトのサービスでメンバーシップ登録が可能です。 メンバーシップ特典もありますが、基本的に…
本サイトについて
本サイトの概要 個人ブログのようなものです。とくにジャンルはありません。 本サイト内の情報について…
TRICK-本物っぽい霊能力者
概要 TRICKは基本的にインチキ霊能力者のインチキを暴いていく話ですが、中にはトリックでは説明が…
アークナイツ-特訓アイテムの使用先考慮
アークナイツ-特訓アイテムの使用先について 概要と注意事項 この記事は1年以上前の実装状態での結果…
広告枠