個人ブログのようなものです。とくにジャンルはありません。
世界征服彼女 -Switch
商品ページ
Amazon
※収益広告
記事の概要
Pythonを使ってinoreaderでサイトの更新情報を取得してみた
作成日:2021-10-31
最終更新日:2021-10-31
記事の文字数:4415
情報技術情報技術-WebAPIWebサイト作成
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と違い、記事のサムネイルを取得できない
ちなみに以下の記事がこの方法で作成されているページです。 サンプル
コメントログ
※コメントは最新50件が表示されます
コメント投稿




画面下部の「コンタクト」からも連絡可能です。
アシュリー、魔法はよいこになってから!(全3巻)
商品ページ
Amazon
※非収益広告
管理人作品宣伝
AIの考えた怖い話-Part01
動画 / 最終更新:2024-11-28
怪談系の怖い話を載せています。特に設定部分は人の手が入ってますが、なるべく生成AI(C…怪談系の怖い話を載せています。特に設定部分は人の手が入ってますが、なるべく生成AI(ChatGPT)を利用して書いています。

YouTubeで閲覧するニコニコ動画で閲覧する
利用素材等の詳細情報
【MMDアークナイツ】from Y to Y with ソラ
動画 / 最終更新:2022-10-02
「from Y to Y」を歌って踊るソラです。…「from Y to Y」を歌って踊るソラです。

YouTubeで閲覧するニコニコ動画で閲覧する
利用素材等の詳細情報
作品一覧はこちら
関連ページ
three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する Part-03
概要 three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する方…
three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する Part-02
概要 three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する方…
three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する Part-01
概要 three.js・three-vrm.jsを使用して、VRoidをWebページ上に表示する方…
GIF / APNG(アニメーション付きPNG)ファイル解析ページ
ファイル読込・操作 以下に調べたいファイルを読み込ませてください。 ファイル情報 カラーパレットを…
gifler.js仕様メモ
本ページの趣旨 「gifler.js」という、gifアニメーションをcanvasに簡単に表示できる…
【プログラミング】実例で分かるかもしれない再帰処理
本ページは以下動画の台本を書き起こしたものです 解説の趣旨・方向性 皆さん、こんばんは今回はプログ…
SNSツイート一元化対応(Twitter・Misskey・Mastodon・Bluesky)-公開
概要 SNSツイートを一元化するためのツールを作成しています(古い記事ですが、こちらのページで紹介…
SNSツイート一元化対応(Twitter・Misskey・Mastodon・Bluesky)-Python
概要 概要 SNSのツイートを一元化する際の備忘録というかPythonコードの共有です。 それぞれ…
Windows-PowerShellを使用してのフォルダ内のファイル名を連番にリネームする
以下PowerShellコードを実行することで、フォルダ内のすべてのファイルのファイル名を「0001…
SCSSとやらでメディアクエリと疑似要素の組み合わせに小一時間苦戦したという話
SCSSとやらでメディアクエリと疑似要素の組み合わせに小一時間苦戦したという話 当然ですが本サイト…
管理人ツイート
本サイトのタグ一覧
NovelAIR18VRoidWebサイト作成Webツールととモノ。アークナイツアークナイツ-ステージ攻略日記アズールレーンアズールレーン-日記ウマ娘ギャラリーゲームデビラビローグプログラミングホラーポケットタウン怪談気ままな日記情報技術情報技術-WebAPI知的財産権統合戦略白夜極光本サイトについて魔王スライム様がんばる!漫画
人気記事
メイド・オブ・ザ・デッド-攻略お助け情報
ネタバレ注意! 本ページは『メイド・オブ・ザ・デッド』の情報を記録しているものです。 攻略の参考に…
651.6585 pt
ポケットタウン_パズル一覧
グレーのピースの数 (Number of gray pieces):検索グレーピースの数を入力して、…
648.2143 pt
剣と魔法と学園モノ。2G - パーティ編成確認ツール
ツール概要 ととモノ。2Gのパーティ編成を考える際に使うツールです。 あくまでストーリークリアまで…
159.1413 pt
アークナイツ-昇進2率ランキング
アークナイツのTier表を作る際の備忘録です こちらのページで、昇進2率を基にTier表を作ろうと…
104.2237 pt
アークナイツ-常設商品-理性換算
概要 "常設商品でお得な商品はどれか"というのを理性に換算して一覧化したものとなります。 絶対的に…
75.7576 pt
ロックマンエグゼ3-バグのかけら必要数まとめ-
バグのかけら必要数 必要数 これぐらいあれば足りるはず。 コレクト要素に関わる部分だけなら、ギガチ…
75.3725 pt
アークナイツ-大陸版とグロ版(日本版)の実装遅れの比較
大陸版とグローバル版(日本版)の実装遅れの比較 別で実装スケジュールなるものを作っており、そこでは…
62.1607 pt
アークナイツ:統合戦略#5「サルカズの炉辺奇談」-「心打つ鍵鞭」攻略お助け情報
概要 統合戦略#5「サルカズの炉辺奇談」の公式サイトからできる「心打つ鍵鞭」についての、攻略お助け…
55.1837 pt
最新記事
アークナイツ-2025大感謝祭・春商品-理性換算
概要 "「2025大感謝祭・春商品」でお得な商品はどれか"というのを理性に換算して一覧化したものと…
本サイトについて
本サイトの概要 概要 個人ブログのようなものです。とくにジャンルはありません。 本サイト内の情報に…
ヒカルの碁で、なぜ佐為は消えたのか
概要 ヒカルの碁で佐為が消えた理由について、「ヒカルの才能を目覚めさせるという役割を終えたから」と…
剣と魔法と学園モノ。3 - 各ステータス最高・最低となる「種族」「メイン学科」「サブ学科」の組合せ
概要 「ととモノ。3」で各ステータス最高・最低となる「種族」「メイン学科」「サブ学科」の組合せを一…
D.C.Ⅱ.S.S.~ダ・カーポⅡセカンドシーズン~(TV番組)
商品ページ
Amazon
※非収益広告