見出し画像

5.note市場調査をガチりたくてPythonに手をだしました


これまでの経緯

なんでChatGPTの活用方法を書いているはずのnoteで、いきなりPythonの話をはじめたのか。というところから今日はお話しします。

今年の目標で、noteの収益化を目指して有料noteを作成する。を掲げている。というのが発端です。

 収益化を考えるなら、やはり市場は見ておきたいところです。
 有料note市場をみると、実際に購入されているのはごく一部。決して、無名新人に優しい世界ではありません。
 noteを購入するのは一体どんな人なのか? それを知りたいと思ったのですが、余り情報がなさそうなので、では自分で調べて見せましょう。 と、現在市場調査中です。

市場調査の第一弾は、既に発信しています。


もっと詳しい調査をしてみようと思いまして、まずはnote検索で、どんな記事があるのかを見たいと考えています。
しかしnoteの検索画面は、一覧のコピペが大変そうですよね。
これは、スクレイピングがしたい。

ということで、検索したらnoteの非公式APIというものが、ありました。
非公式APIに関してはnote内にご紹介いただいている記事があるのですが、それを使って市場調査している記事がなさそうと言うことに気づき、これはチャンス!? と思っています。

note内にも丁寧な解説の記事があり、その記事の通りやったらできる。と言えばそうなのですが、そこでとってきたデータを使ってまで、noteの中の状況を見る人がいらっしゃらないのか、私が探せていないのか…

不思議に思いつつも、「えーい、やれることは取り合えずやってまえ」の見切り発車でやってみたところ、 その日のうちにデータDLまでたどり着きましたー! という記事になります。


参照したpythonやAPIに関する記事

環境構築

python と聞くと難しそうにも聞こえますが、Google Colabがあれば、Webブラウザですぐ出来ることが書いてある記事の通りにやってみます。

Google Colabってどうやって使い始めるの? というのはGoogle検索から辿り着きまして、ボタンの数回クリックで完了しました。

とても簡単です。

さて、ここから、スクリプトを書いていかないといけないのですが、難しいことは考えたくないので、まずはそのままコピペします。

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


並行してChatGPTの画面を立ち上げます。
自分のやっていることを、ChatGPTに解説してもらう作戦です。

<プロンプト>
以下の phythonのスクリプトの意味を、 非エンジニアに解説してほしい。
# Google Colubでコマンドを打つときは「!」を先頭に付ける
!pip install requests
!pip install json


このPythonスクリプトは、Google Colabというオンラインのプログラミング環境で使用されるものです。スクリプトの目的は、特定のプログラミングライブラリをインストールすることです。非エンジニアの方に分かりやすく説明すると:

  1. # Google Colubでコマンドを打つときは「!」を先頭に付ける - これはコメントで、プログラムの実行には影響しません。この行はただ、Google Colabでシステムコマンド(Python以外のコマンド)を実行する際には行の先頭に「!」を付ける必要があると説明しています。

  2. !pip install requests - この行は、「requests」というPythonライブラリをインストールするコマンドです。requestsライブラリは、インターネット上のデータにアクセスし、ウェブページの内容を取得したり、データを送信したりする際に使用されます。

  3. !pip install json - この行は、jsonというライブラリをインストールしようとしていますが、実はPythonにはデフォルトでjsonモジュールが組み込まれているため、このコマンドは不要です。JSON(JavaScript Object Notation)は、データを格納または転送する際によく使われる軽量なデータ形式です。

要するに、このスクリプトは、ウェブからデータを取得し、処理するためのツールをセットアップするために使われます。ただし、jsonライブラリのインストールコマンドは実際には不要です。




なるほど、これで環境構築が完了したことがわかりました。

まずはなんでもいいから動かしてみる:クリエイター検索のコードをコピペ

公開されているスクリプトの、ユーザー名だけを自分の物に入れ替えて、スクリプトをコピペします。

import requests

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

そうすると、Pythonから

<Response [200]>

という回答が返ってきます。
どうやら、正常に動いているようです。

では、ChatGPTに解説してもらいましょう。
<プロンプト> ※前の続きの会話なので、解説しての文言なし
import requests

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


このPythonスクリプトは、インターネット上の特定のウェブサイトから情報を取得するために使用されます。具体的には、note.comというウェブサイトのAPI(アプリケーションプログラミングインターフェース)を利用して、特定のユーザーに関するデータを取得しています。スクリプトの各行の意味は次のとおりです:

  1. import requests - これは、先に説明したrequestsライブラリをスクリプトにインポートしています。このライブラリはウェブサイトからデータを取得する際に使用されます。

  2. url = 'https://note.com/api/v2/creators/' - ここで、note.comのAPIへの基本URL(ウェブアドレス)を定義しています。

  3. user_name = 'naorin_forest' - この行で、取得したいユーザーの名前(この場合はnaorin_forest)を定義しています。

  4. response = requests.get(url+user_name) - ここで、requestsライブラリのget関数を使用して、指定されたURL(url変数とuser_name変数を結合したもの)からデータを取得しています。この行が実行されると、指定されたユーザーの情報を含むレスポンス(応答)がresponse変数に格納されます。

  5. print(response) - 最後に、取得したレスポンス(応答)の内容をコンソール(出力画面)に表示します。ただし、このコマンドはレスポンスオブジェクト自体を表示するだけで、レスポンスの内容(例えばユーザーの詳細情報)を直接表示するわけではありません。レスポンスの内容を見るためには、通常response.textresponse.json()などのメソッドを使用します。

このスクリプトは、note.comのAPIを通じて特定のユーザーの情報を取得する基本的な方法を示しています。




URLはなんとなく意味を察していましたが、responseのところで「これはなに?」となる人が多そうです。そこを解説してもらえるのが、ChatGPTのいいところかもしれません。
URLの中身を色々入れ替えれば、データが取得できるのがわかります。

しかし、200だけでは、きちんとコードが動いている。以上の情報がとれていません。
参考にしているnoteに沿って、またコピペします。

response.json()

すると… 凄く長い出力結果が出てきました。

{'data': {'id': 8379713,
'key': '061f821f3f48872c9b20cd8cf61b9b38',
'nickname': 'ChatGPTの森のなおりん',
'urlname': 'naorin_forest',
'profile': 'ChatGPTをなんとか仕事に活かしたい会社員。勉強したことはアウトプットするといいと聞くので、記録代わりのnote。”ChatGPTの森”をテーマにChatGPTと会話してみたら面白かったので、創作に着手。2024年はChatGPTで副業挑戦:有料note市場調査を提供中',
'noteCount': 53,
'magazineCount': 3,

(長いので以下省略)

ぱっと見だけでも、なんとなく、profileやユーザー名称がきちんと入っていそうなことがわかります。

動かせるのが分かったので、note検索結果の出し方を考える

さて、なんとなくPythonが動かせそうな気がしてきました。
次は、クリエイターではなく、note検索の結果を見たいのだ! という、もともとの話に戻っていきます。

こちらの記事に、

キーワードを指定して 記事を検索
context を 「note」、検索したい語句をキーワード「q」に指定して記事の検索結果を取得します。

(中略)

エンドポイント
https://note.com/api/v3/searches?context=user&q=北海道&size=1&start=0

【2023年度】noteの非公式API一覧

という、やりたいことそのまんまの記載がありまして、勝利を確信しました。

ただ、エンドポイントとして記載されたURL部分をPythonにコピペして実行しても、エラーです。

先ほどの response = requests.get(url+user_name) の()の中身を入れ替える必要があります。

ということで、

url2 = 'https://note.com/api/v3/searches?context=note&q=ChatGPT&size=2&start=0'
response = requests.get(url2)
response.json()

で無事に、データが取得できました。


ChatGPTにcsv DLのためのスクリプトを書かせる

やりたいことを言ったら、ChatGPTがスクリプトを書いてくれる

さて、ChatGPTの話に戻ってきました。
先ほどのスクリプトをもし、コピペされた方がいたら、ちょっとうっとなると思います。
たった2件の検索結果のために、120行近いデータを読む必要があります。しかも、ちょっとまだ見づらい。

ここからがChatGPTの出番です。
<プロンプト>
response = requests.get(url+user_name) で取得したデータを、csvでDLすることはできますか?


はい、requests.get(url+user_name)で取得したデータをCSV形式でダウンロードすることは可能です。ただし、これを行うにはいくつかのステップが必要です。以下に、基本的な手順を説明します。

  1. データの取得: まず、requests.getを使ってAPIからデータを取得します。

response = requests.get(url + user_name)
data = response.json()
  1. データの整形: 取得したデータ(通常はJSON形式)をCSV形式に適した構造に整形する必要があります。例えば、データが辞書のリストであれば、それをそのままCSVに変換できます。しかし、データがネストされた構造を持っている場合は、適切に整形する必要があります。

  2. CSVファイルへの書き込み: 整形したデータをCSVファイルに書き込みます。これにはPythonのcsvモジュールを使用します。

import csv

# CSVファイルに書き込む
with open('data.csv', 'w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    # CSVのヘッダーを書き込む
    writer.writerow(['Header1', 'Header2', 'Header3'])  # 適宜ヘッダーを変更してください
    # データを書き込む
    for item in data:
        writer.writerow([item['key1'], item['key2'], item['key3']])  # 適宜キーを変更してください

この例では、data.csvという名前のファイルにデータが書き込まれ、このファイルはPythonスクリプトと同じディレクトリに保存されます。CSVファイルの各列の内容は、取得したデータの構造に依存しますので、適切なキー(例:item['key1'])を使用してデータを指定する必要があります。

このプロセスは、取得したデータの形式と必要な出力形式に応じて調整する必要があります。また、大量のデータを扱う場合や複雑なデータ構造の場合は、より高度なデータ処理が必要になることがあります。




細かい部分は、#適宜ヘッダーを修正 の指示があるので、手で対応が必要ですが、とりあえず、csvでDLできることは分かりました。

今回はさらに、ChatGPTに、記事の名前とユーザーIDだけを抜き出すようにお願いします。文字化けしないような処理も加えています。

その出力結果が、こちら

import requests
import csv

# APIからデータを取得
url = 'https://note.com/api/v2/creators/'
user_name = 'naorin_forest'
response = requests.get(url + user_name)
data = response.json()

# 'notes'内の'contents'から各ノートの'name'と'user'の'id'を抽出
notes_contents = data['data']['notes']['contents']

# CSVファイルに書き込む準備
with open('notes_data.csv', 'w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)

    # CSVのヘッダーを書き込む
    writer.writerow(['Note Title', 'User ID'])

    # 抽出したデータをCSVに書き込む
    for note in notes_contents:
        note_name = note['name']
        user_id = note['user']['id']
        writer.writerow([note_name, user_id])

print('CSVファイルにデータが出力されました。')

コピペでそのまま、実際のCSVが作成できました。

データDLについて

DLは左側のメニューで、フォルダのアイコンをクリックした後、notes_data.csvにカーソルを合わせると、右側に三点メニューのボタンが表示されます。


DL手順①


三点メニューのボタンをクリックすると、ダウンロードを選ぶことができます。

DL手順②


Pythonでここまで調べて市場調査する人は少ない?

ここまでの内容でもかなりの文字数になるのですが、実はまだ市場分析まで話が至っていません。

APIに関してPythonへのスクリプト付きで解説をしてくださっている記事がある上、スクリプトのコピペ元の情報がある状況においては、ChatGPTを補助に使うと、初歩的なことは、1日目にして出来てしまうので、初心者でも参入可能と言えば参入可能なのですが、ここも有料noteのホワイトスペースかも…?と思い始めています。

ChatGPTの話をしているはずが、Pythonの話になってしまいましたが、意外とnote市場調査は大変そうだということで、今日は締めくくりたいと思います。


いただいたサポートはChatGPT有料版の費用に使わせていただきます!