見出し画像

『片思いフォロー取得』Pythonとnote APIでツールを作ろう(1)

noteには非公式APIがあるという話を以下記事で説明しました。

実際なにか作ってみようかなと思います。完成してから公開するつもりでしたが、説明を付けるため過程から公開しようと思います。

▼機能

以下の機能を作成する予定です。なお、気分や状況によって変動するかも。

・片思いフォロー取得
 条件に合うユーザの一覧を出力

・対象ユーザの記事数取得
 未稼働アカウント抽出のため

・記事の最終更新日取得
 未稼働アカウント判断のため

・その他、気づいた機能を随時
 
作っていて欲しくなった機能
 コメントで要望のあった機能


▼実行環境

私のコードを使って実際に真似してみたい方は、「Google Colaboratory」
を準備してください。グーグルアカウントさえあれば誰でもPythonが実行できるようになるものです。使い方は簡単なのでググってね……と思ったけど、以下記事がわかりやすいかと思います。


▼言い訳

説明が多くなってグダる可能性があります。あと、私はサンプルを持ってきて感覚でコーディングしていきます。なので説明が正確じゃない場合があるので間違えてたら教えてください。

また、過程を公開する記事なので最善のロジックにできているとは限りません。人のコードを見て自分なりに改善していくのも勉強になると思います。

▼コーディング開始

「実際に実行してみよう」というところまではコードの説明です。

🌸ライブラリをインポート。

# 使うやつインポート
import requests
import json

requests : URLを実行したりするやつ
json   : 変換や抽出に使うやつ



🌸実行するAPIのURLを指定

#API_URL
api_url="https://note.com/api/v1/followings/syakai_hutekigou/list?page=1"

上記は私の場合です。以下ルールにそって「””内を」ご自身のものに変えてください

■指定したユーザーのフォローリストを取得する
https://note.mu/api/v1/followings/ID名/list?page=ページ番号

「ID名」はあなたのIDに
「ページ番号」はなんでもいいですが、
今は「1」にしておきましょうか。




🌸URLを投げる

#API_URLを投げる
res = requests.get(api_url)

「=」の左側にある文字(res)に、右側の結果(URL実行結果)を入れるという式です。



🌸受け取った結果を見れるように変換

#jsonに変換
jsonData = res.json()

#結果を表示する
print(jsonData)

変換したデータを「jsonData」に入れる。



実際に実行してみよう
ここまでで以下のようなコードになっているかと思います。

# 使うやつインポート
import requests
import json

#API_URL
api_url="https://note.com/api/v1/followings/syakai_hutekigou/list?page=1"

#API_URLを投げる
res = requests.get(api_url)

#json変換
jsonData = res.json()

#結果を表示する
print(jsonData)

「Google Colaboratory」にコードを入れて「Shift + Enter」を押して実行するか、左にある再生ボタンみたいなのをクリックしてください。以下のような結果ができていたら成功です。

画像1


これは、「自分のフォロー欄の1ページ目の情報」が表示されています。ちょっと見にくいですね……アドレスバーで実行してみましょう⇩

・api_urlで指定したURLをアドレスバーで実行
https://note.com/api/v1/followings/syakai_hutekigou/list?page=1

上記は私の場合です。


結果は……(Chromeの場合)

画像2

たくさん文字が出てきてますね。比べてみるとわかりますが、プログラムから実行した結果と同じです。つまり、さっきのプログラムはアドレスバーを使わずに実行しているイメージです。



🌸データの中身を理解
さっきのアドレスバーで実行したデータをみてみると。

kekka2 - コピー

「data」の中の「following_list」の中に
「複数のユーザ情報」が入っているとわかりますね。
以下のようなイメージです。

画像6

「data」という大きな箱に、「following_list」という箱が入っていて、その中にユーザー情報がたくさん入っているイメージ!!! アドレスバーで実行したURLをFirefoxで試してみるとChromeよりイメージしやすいです。


大きなダンボールが未開封だと中身を見ることができませんね? んじゃ開封していこう。



🌸ダンボール開封

#data配列取り出し
data = jsonData["data"]

#following_list配列取り出し
following_list = data["following_list"]

今取得したデータは「jsonData」に入ってます。「jsonData」の中にある「data」の中身を「data」という変数に入れます。following_listも同様。printを使って結果を表示してみよう。


# 使うやつインポート
import requests
import json

#API_URL
api_url="https://note.com/api/v1/followings/syakai_hutekigou/list?page=1"

#API_URLを投げる
res = requests.get(api_url)

#jsonに変換
jsonData = res.json()

#data配列取り出し
data = jsonData["data"]

#following_list配列取り出し
following_list = data["following_list"]

#結果を表示する
print(following_list)

結果は……

画像5

前の実行結果と比べると……

画像6

「data」「following_list」がなくなってますね。「following_list」のダンボールを開けて中(ユーザ情報)を見ているイメージです。



🌸さらに取り出し
同様にユーザ情報の一部を取り出します。さきほどの実行結果見るとユーザー情報には「ID」「urlname」「nickname」など様々な情報が入っています。

欲しい情報だけを取るプログラムを書いていきましょう。例えば「urlname」のみ。これはnoteでいう「ID」のことです(ややこしい)。

# 使うやつインポート
import requests
import json

#API_URL
api_url="https://note.com/api/v1/followings/syakai_hutekigou/list?page=1"

#API_URLを投げる
res = requests.get(api_url)

#jsonに変換
jsonData = res.json()

#data配列取り出し
data = jsonData["data"]

#following_list配列取り出し
following_list = data["following_list"]

#urlnameを取り出し
for i in following_list:
   print(i["urlname"]) 
   


表示を行う「print」部分を書き換えました。「for」からのコード2行は、「following_list」に入っている「urlname」だけをすべて表示してくださいという意味です。実行してみましょう。

画像7

あらあら~! 「urlname」だけを取り出せましたね! 「urlname」のところを「ID」や「nickname」に変えて実行したら結果も変わるので是非試してください。

これで「欲しい情報のみを取得する方法」がわかりましたね!! ダメですよ! 規約に違反することをしては!

今回はここまで! 読み返してみたら初心者向けでもないし誰向けかわからないですね(笑)。反応を見て説明を減らした中級者向けに変えるか考えます。


更新していくかどうかも反応を見て考えたいと思います。

▼追記

結局更新しました。有料です。


▼変更履歴

ここにはご指摘や気付きによって変更があった場合に、変更履歴を記載していきます。

・変更日
 2020/12/21 6:56

・変更内容
 混乱するかもなのでコードを変更
 修正前
#urlnameを取り出し
for jsonObj in following_list:
print(jsonObj["urlname"])

⇩  ⇩  ⇩

 修正後(2020/12/21 6:56
#urlnameを取り出し
for i in following_list:
print(i["urlname"])


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