【データの集め方講座】Note APIを使って自分の投稿したデータを集める-Python×Note API-
はじめに
ごあいさつ
ご高覧いただきありがとうございます.
ソフトウェアエンジニアのKitaharaです.
本日はnoteのデータの収集方法を解説します!
Noteには非公式のAPIがあるらしい…
先日, Twitter APIを使ったRによるデータ収集方法の記事を出しました!
(ご愛読いただきありがとうございます)
この記事を書いているときにnoteの宣伝をTwitterで自動でしてみたいなーと考え始めていました. そこでnoteのAPIが無いか探してみたところ記事が出てきました.
この記事の以下のAPIを実際に使ってみて, Twitterの自動投稿に使えないか検討してみます!
使用するものの説明
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
付録
今回収集したデータをテキストファイルにして保存してみました.
参考文献
この記事が気に入ったらサポートをしてみませんか?