- Published on
Noteの非公式APIの調べ方
- Authors
- Name
- Nomad Dev Life

フォロワーリストを取得するnote非公式APIが使えなかった
note非公式APIの存在について、以下の記事で取り上げました。
今回は、自分のnoteのアカウントのフォロワーリストを取得したいと思い、Webでそのnote非公式APIを探してみました。しかし、該当するAPIは見つけられたものの、残念ながらうまく動きませんでした。恐らく、途中でAPIの仕様が変わってしまったのだと思います。
そこで、自分で最新のAPI仕様を確認する方法にチャレンジしてみました。
noteの画面を構成する要素
noteは、以下の2つの要素で構成されています。
- 画面の構成やスタイル(HTML/CSS/JavaScript)
- データ(JSON)
画面を構成する要素をダウンロードした後、非公式APIを呼び出してデータ(JSON)を取得するのが基本的なパターンです。
この時に呼び出される非公式APIのリクエストURLやパラメータをチェックすることで、非公式APIの仕様を知ることができます。
例: フォロワー一覧を取得する非公式APIの確認方法
ChromeのDevToolsを開き、"Network"タブを開いた状態で、noteのフォロワー一覧の画面を表示します。 すると、このページを表示する為にアクセスした情報が表示されます。

"Name"や"Status"、"Type"等のヘッダの上で右クリックすると、表示する内容を変更できます。ここで、上の方にある"Path"をクリックして表示させます。

次に、"Network"等のタブの下にある検索窓に/api/
と表示し、この画面を表示する為に呼び出したAPIのみを表示させます。 "Path"を見ていくと、フォロワー一覧を取得しているAPIの呼び出しがあることがわかります。

その行をクリックすると、画面右側にAPIを呼び出した際の詳細な情報が表示されます。また、右クリック->"Open in new tab"を選択すると、新たなタブが開き、そのAPIを呼び出した時のResponse Bodyが表示されます。

上記画面の青い下線がパラメータであることは分かると思います。しかし、これが何を示すかはわかりません。
今回はフォロワーの一覧を取得していることから、フォローされているユーザーのID(noteではこの値をkey
と呼んでいます)であることが推察できます。
パラメータの値が何を示すか分からない場合は、他のAPI呼び出しのResponse Bodyを見る等して調べていきます。
以上より、現在のnoteのフォロワーのリストは、以下の仕様になります。
- フォロワーのリスト
- url
- https://note.com/api/v3/users/[user key]/followers?page=[page]&per=[per]
- user key
- userごとに設定されているkey
- page
- 何ページ目のデータを取得するか
- per
- 1ページあたり何件出力するか
- url
フォロワーリストを取得してCSVとして保存する
APIの仕様が分かったら、あとはプログラムから呼び出して情報を取得します。
今回は、フォロワーリストAPIを呼び出し、ユーザーの名前とnoteのユーザーページのURLをCSVとして出力するコードを書いてみました。
import pandas as pd
import requests
import json
import time
waittime = 5.0
USER_KEY = '451f22dd5a7fe98f582eb3da1e7b9f26'
def main():
ret = []
# loop 100 times
for i in range(1, 100):
res = requests.get(f'https://note.com/api/v3/users/{USER_KEY}/followers?page={i}&per=20')
if res.status_code != 200:
print(f'Error: {res.status_code}')
break
print(f'requests.get has succeeded. Page: {i}')
data_json = json.loads(res.text) #JSON->Dict
data_follows = data_json['data']['follows']
for follower in data_follows:
user = follower['name']
url = 'https://note.com/' + follower['urlname']
ret.append({'user': user, 'url': url})
if(len(data_follows) == 0):
print('No more followers')
break
time.sleep(waittime) #サーバー負荷軽減のため
df = pd.DataFrame(ret)
df.to_csv('note_followers.csv', index=False, encoding='utf-8')
if __name__ == "__main__":
main()
おわりに
今回は、noteの非公式APIの仕様の調べ方について書いてみました。
DevToolsを使って、実際に自分の知りたいAPI呼び出しを特定し、パラメータの意味を把握するには、少しコツが必要です。もしそれらが難しいようであれば、一度REST APIを学習してみるのも良いかもしれません。
noteの非公式APIの呼び出しは、noteの運営に迷惑にならないよう、過剰なアクセスは控えましょう。上記コードのように、APIを呼び出す際に一定の間隔を設けることをお勧めします。