見出し画像

【データの集め方講座】Note APIを使って自分の投稿したデータを集める-Python×Note API-

はじめに

ごあいさつ

ご高覧いただきありがとうございます.
ソフトウェアエンジニアのKitaharaです.
本日はnoteのデータの収集方法を解説します!

Noteには非公式のAPIがあるらしい…

先日, Twitter APIを使ったRによるデータ収集方法の記事を出しました!
(ご愛読いただきありがとうございます)

この記事を書いているときにnoteの宣伝をTwitterで自動でしてみたいなーと考え始めていました. そこでnoteのAPIが無いか探してみたところ記事が出てきました.

この記事の以下のAPIを実際に使ってみて, Twitterの自動投稿に使えないか検討してみます!

https://note.com/api/v2/creators/hagure_melon
特定ユーザーの基本情報

https://note.com/api/v2/creators/hagure_melon/contents?kind=note&page=1
特定ユーザーの記事一覧。記事のkeyやIDを取得可能

【2020年度】noteのAPI一覧【完全版】

使用するものの説明

Note APIは参考記事によると, 非公式のため, 宣言なく変更される可能性があるとのことです. 

APIを利用する上での注意点

APIは公式がnoteを運営する上でのツールとして使用されているだけであり、予告なく仕様が変わる可能性がある(2020年5月7日時点では有効)
当然サーバーに負荷をかけるような行為はNGであり、利用の際は規約違反しないように気を付けよう。

【2020年度】noteのAPI一覧【完全版】

アプリケーションを制作するときはエラーになる可能性があることを理解したうえで, エラー時にGmail等で確認できるようにしておきたいものですね.
(Gmailの受け取りの記事を今週のどこかで書きます!)

  • Note API

    • NoteのAPIです.

    • 非公式のため予告なく変更が行われる可能性があります.

    • 2022/02/08 現在では利用できています.

  • Python

    • プログラミング言語のひとつです.

    • 型宣言等が無く, 初心者にも扱いやすい言語だと言われています

    • 近年Deep Learningのライブラリが豊富であることから注目を集めている人気の言語です

    • 公式ドキュメント

  • Google Colab

    • Googleが提供するPythonの実行環境です

    • 主要なライブラリがインストールされている状態で使うことができます

    • Chromeでアクセスするだけで利用することができます

      • 環境構築が不要です

      • 無料で使うことができます

環境構築

下記のコードをGoogle Colubで実行してください

# Google Colubでコマンドを打つときは「!」を先頭に付ける
!pip install requests
!pip install json

これで今回使うライブラリはすべて揃いました!

APIを試してみた

クリエイターを検索

クリエイターを検索するには以下の様に書いていきます.

import requests

url = 'https://note.com/api/v2/creators/'
user_name = 'kitahara_note'
response = requests.get(url+user_name)

実行ができたらリクエストが成功したか確認してみましょう.
200が表示されれば成功です!

print(response)

レスポンスの番号の意味については以下の資料を参考にしてみてください.

レスポンスが200であれば以下ようにしてデータを表示してみましょう

入力

import json

response.json()

出力

...  
'profile': 'Software Engineer\nLanguage: Python/JavaScript\nCertification: JSSC Grade Pre-1\nデータの収集と可視化の方法を発信しています',
'profileImageKey': '2d123e0a80867cb02df89c5185647fbe',
'profileImageUrl': 'https://assets.st-note.com/production/uploads/images/69510585/profile_2d123e0a80867cb02df89c5185647fbe.jpg?fit=bounds&format=jpeg&quality=85&width=330',
...

色々なデータが表示されますね. 上記の例ではプロフィールやプロフィールの画像のデータが表示されています.

クリエイターページに表示されているデータが出力されました

クリエイターを指定して記事の情報を検索

記事情報の取得ですが, 少しコツがいります.

エンドポイントのURL が

https://note.com/api/v2/creators/user_name/contents?kind=note&page=1

となっているのでpageがいくつか存在することが分かります.

私たちはページ番号がいくつあるのかは知らないので探索することになります. 以上のことを踏まえて, データが無くなった時にbreakするfor文で実装しました.

あと, time.sleep(2)を入れています. これはレスポンスを投げすぎてサーバーに負荷をかけないようにするためです.

↓ (この記事でも書いているのですが, Dos 攻撃とみなされることがあります)

前置きが長くなりましたが,
コードを書いて欲しいデータを表示してみることにします.

入力

import time

def search_notes(user_name):
    for i in range(100):
        url = 'https://note.com/api/v2/creators/'+user_name+'/contents?kind=note&page='+str(i)
        response = requests.get(url+user_name)

        # データが無くなったら実行を停止する
        if response.json()['data']['contents'] == []:
            print('break!: ',i)
            break
        
        time.sleep(2)

        # データがあれば実行
        results = response.json()
        for result in results['data']['contents']:
            if result['format'] == '4.0' and result['status'] == 'published':
                print('name:', result['name'])
                print('like: ', result['likeCount'])
                print('image:', result['eyecatch'])
                print('URL:', result['noteUrl'])
                for j in range(len(result['hashtags'])):
                    print(result['hashtags'][j]['hashtag']['name'])
                print('pulished:', result['publishAt'])
                print('===========================')

関数が書けたら実行するコードを書いていきます.

user_name = 'kitahara_note'
search_notes(user_name)

出力

name: 【データの集め方講座】Twitterデータをたった1行で操る方法-Pythonを超える-
like:  3
image: https://assets.st-note.com/production/uploads/images/71740928/rectangle_large_type_2_b4842bbc9d1cf09c8bc1c8cafbcfd7b1.png?fit=bounds&quality=85&width=1280
URL: https://note.com/kitahara_note/n/n2f47f0ef9302
#Twitter
#プログラミング
#統計
#データサイエンス
#R言語
pulished: 2022-02-08T10:52:19+09:00
===========================
name: 【ウェブエンジニアの備忘録】R言語のローカル環境構築
like:  0
image: https://assets.st-note.com/production/uploads/images/71648399/rectangle_large_type_2_91cdea85186fad81fbfb551fc76e677c.png?fit=bounds&quality=85&width=1280
URL: https://note.com/kitahara_note/n/na9683b7aafa8
#プログラミング
#備忘録
#統計
#データサイエンス
#R言語
pulished: 2022-02-07T00:59:24+09:00
===========================
...
===========================
name: Noteを通じて届けたいこと
like:  9
image: https://assets.st-note.com/production/uploads/images/70259952/rectangle_large_type_2_d22bddecb00a15f473f75bdae15c8650.png?fit=bounds&quality=85&width=1280
URL: https://note.com/kitahara_note/n/n5fc28aeb6575
#統計
#統計学
#データサイエンス
pulished: 2022-01-24T15:39:47+09:00
===========================
break!:  4

無事に取得できていますね.
ページは4ページあったそうです.

これだけきれいな形でデータを取得できるのであればTwitter APIにも利用できそうですね!Twitterの申請ができたら動かしてみようと思います!

おわりに

今回はPythonを使ってnoteのデータを収集する方法を解説しました!
参考になったという方はぜひハートボタンを押していってください!

モチベーションが上がります!

記事内で不明な点等ございましたら気軽にご連絡ください.

Twitter: @kitahara_dev
email: kitahara.main1@gmail.com

付録

今回収集したデータをテキストファイルにして保存してみました.

参考文献


この記事が気に入ったらサポートをしてみませんか?