Published on

Noteの非公式APIの調べ方

Authors
  • avatar
    Name
    Nomad Dev Life
    Twitter
2025-04-19-title

フォロワーリストを取得する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のフォロワー一覧の画面を表示します。 すると、このページを表示する為にアクセスした情報が表示されます。

2025-04-19-img0

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

2025-04-19-img1

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

2025-04-19-img2

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

2025-04-19-img3

上記画面の青い下線がパラメータであることは分かると思います。しかし、これが何を示すかはわかりません。

今回はフォロワーの一覧を取得していることから、フォローされているユーザーのID(noteではこの値をkeyと呼んでいます)であることが推察できます。

パラメータの値が何を示すか分からない場合は、他のAPI呼び出しのResponse Bodyを見る等して調べていきます。

以上より、現在のnoteのフォロワーのリストは、以下の仕様になります。

  • フォロワーのリスト
    • url
    • user key
      • userごとに設定されているkey
    • page
      • 何ページ目のデータを取得するか
    • per
      • 1ページあたり何件出力するか

フォロワーリストを取得して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を呼び出す際に一定の間隔を設けることをお勧めします。