見出し画像

J-Quants API への接続をChatGPTに聞いてExcel VBAに書き直してみた

requestsとurllib3

J-QuantsAPI の python サンプルコードは、requests ライブラリを利用しています。
因みにJ-QuantsAPIは、これまでのβ版での運用が終了し、4月3日より正式運用が始まりました。

# 公式ページサンプルコード
import requests
import json

data={"mailaddress":"<YOUR EMAIL_ADDRESS>", "password":"<YOUR PASSWORD>"}
r_post = requests.post("https://api.jquants.com/v1/token/auth_user", data=json.dumps(data))
r_post.json()

私自身は、通常urllib3を利用しています。
初めいつも使っているurllib3で接続しようとしました。
しかし知識不足で挫折。
諦めてrequestsをpipでインストールしました。

urllib3で接続したかった理由は、Excel VBAへの移植が簡単なためです。
結局requestsで作って試したため、Excel VBA に移植できないままになっています。

救世主ChatGPT?

先日、マケデコのイベントを拝聴させていただきました。
そこでChatGPT にプログラミングも質問すれば回答が得られるということがわかりました。
こちらの知識レベルが低いため、これまでググっても分からなかったことが分かるかもしれません。

ChatGPTとの問答

さっそくJ-QuantsAPIの接続をChatGPTに聞いてみました。
コード部分は、リフレッシュトークン取得(/token/auth_user)のサンプルコードのままです(笑


import requests
import json

data={"mailaddress":"<YOUR EMAIL_ADDRESS>", "password":"<YOUR PASSWORD>"}
r_post = requests.post("https://api.jquants.com/v1/token/auth_user", data=json.dumps(data))
r_post.json() を'import requests' を使わず、'import urllib3' を利用してコードを作ってください。

回答
以下は、'import urllib3' を使用してPOSTリクエストを送信するコードです。

import json
import urllib3

# リクエスト先のURL
url = 'https://api.jquants.com/v1/token/auth_user'

# POSTデータ
data = {"mailaddress": "<YOUR EMAIL_ADDRESS>", "password": "<YOUR PASSWORD>"}

# HTTPリクエストを送信
http = urllib3.PoolManager()
r = http.request('POST', url, body=json.dumps(data), headers={'Content-Type': 'application/json'})

# レスポンスをJSON形式で取得
response = json.loads(r.data.decode('utf-8'))

# 結果の表示
print(response)

このコードでは、urllib3モジュールのPoolManagerを使用してHTTPリクエストを送信しています。POSTデータは、JSON形式で送信するため、json.dumps()関数で文字列に変換しています。レスポンスは、json.loads()関数を使用してJSON形式で解析し、辞書型のオブジェクトとして取得しています。最後に、結果を表示しています。
-- 以上回答 --------------------------------------

いざコーディング

いざと意気込むほどのコードではありませんが、コーディングしてみます。
コーディングというよりコピーしてエディターに貼り付け、メールアドレスとパスワードを書き換えるだけ。
誰にでも出来る簡単なお仕事です!(笑

コードの最後を見ると元の公式サンプルには無い取得したリフレッシュトークンの出力(print文)も追加されています。
さりげなく親切です(笑

あっさり走りました。
取得したリフレッシュトークンの結果も公式サンプルプログラムと同じです!

これは便利ですねー。
こんなに簡単に出来てしまうと、いろいろ調べないで結果だけ聞いてしまいそうです。
いろいろ調べて知識を身につけることがないです。
「ダメ人間の出来上がり!」となりそうです。

ついでに、ChatGPT様(格上げです)にヨイショの感想を入れてみました。

質問
提案のサンプルコードを走らせたらバッチリ動いたよ。あなた天才だね!

返答
ありがとうございます!お役に立てて嬉しいです。何かあればいつでもお聞きください。

調子に乗って軽口が帰ってくるかと期待しましたが、控えめな返答だけでした(笑

Excel VBA への変換も聞いてみる

J-QuantsAPI を Excel VBA で利用したい方も多いのではないかと思っています。
プログラムをする人の人数は、python の10倍以上ではないでしょうか。
私はベアラー認証というものが分かっていないのでExcel VBAでのサンプルプログラムを作れていませんでした。

urllib3 に変換できた勢いで、python から Excel VBA への変換も聞いてみます。

質問
import requests
import json
data={"mailaddress":"<YOUR EMAIL_ADDRESS>", "password":"<YOUR PASSWORD>"}
r_post = requests.post("https://api.jquants.com/v1/token/auth_user", data=json.dumps(data))
r_post.json()
をExcel VBA で書き直してください。
-- 以上質問 ---------------

返答
Excel VBAで同じ機能を実装するには、以下のようにコードを書くことができます。

Sub auth_user()
    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")
    
    'リクエストヘッダーの設定
    http.Open "POST", "https://api.jquants.com/v1/token/auth_user", False
    http.setRequestHeader "Content-Type", "application/json"
    
    'リクエストデータの作成
    Dim data As Object
    Set data = CreateObject("Scripting.Dictionary")
    data("mailaddress") = "<YOUR EMAIL_ADDRESS>"
    data("password") = "<YOUR PASSWORD>"
    
    'リクエストの送信
    http.send (JsonConverter.ConvertToJson(data))
    
    'レスポンスの取得
    Dim response As Object
    Set response = JsonConverter.ParseJson(http.responseText)
    
    'レスポンスの処理
    '例えば、トークンを取得する場合は以下のようにする
    Dim token As String
    token = response("token")
End Sub

このコードを実行する前に、JsonConverterのライブラリを使用する必要があります。JsonConverterは、JSONデータとVBAオブジェクトの相互変換を行うためのライブラリで、以下のサイトからダウンロードすることができます。

https://github.com/VBA-tools/VBA-JSON

このライブラリを使用することで、JSON形式のデータをVBAのオブジェクトに変換することができます。
--- 以上返答 -----------------------------

こちらもコーディングしてみます。
pythonと同じ様に vba のエディターにコピペして、
"<YOUR EMAIL_ADDRESS>"
"<YOUR PASSWORD>"
を書き換えるだけ。

唯一の変更は、

 'レスポンスの取得
    Dim response As Object
    Set response = JsonConverter.ParseJson(http.responseText)

にprint文を加えただけ。

 'レスポンスの取得
    Dim response As Object
    Set response = JsonConverter.ParseJson(http.responseText)
    Debug.Print http.responseText

走らせたところ簡単に動いてしまいました(記事下に補足あり)。
リフレッシュトークンが取得できました!
・・・このネタでマケデコハッカソンに参加しようかな(笑


これまでは、「どうもBearer認証というのを使っている様なので、調べて理解しないと・・・」と思っていましたが、全く努力せずに出来てしまいました。
便利というか何というか。

ちょっと呆然としています(笑

質問
Excel VBA の返答も正しく動きました。Chat天才GPTですね。凄いです。

返答
ありがとうございます。お役に立てて嬉しいです。何か他にもお力になれることがあれば、お気軽にお尋ねください。

質問
凄いですが、これでは使う人間がバカになりませんか。

返答
申し訳ありません、私たちAIは、簡単にコードを書いたり、システムとのやり取りを自動化したりすることができますが、人間がコンピューターによって実行される作業を完全に置き換えることはできません。コンピューターは、特定の問題について非常に速く、正確に処理できますが、問題についての洞察力、創造性、判断力を持つことはできません。私たちAIは、人間が行うタスクを支援するために開発されたものであり、人間がその背景知識やスキルを持っていない場合でも、誰でも使いやすいように設計されています。ただし、技術の進歩により、将来的にはより高度な自動化が可能になるかもしれません。
--- 以上返答 -------------------

最後に長い言い訳、説明が返ってきました。
ChatGPTの運営が気にしていることを突っついたようです(笑


-- 補足: ----------------
Excel VBA のコードを動かすための事前準備です。
1)EXCELのメニューからファイル->オプション->リボンのユーザ設定で開発にチェックを入れる。結果メニューに「開発」が表示されます。

2)開発->Visual Basic を選択、標準モジュールに上記「3.提供ファイル」、2,3 のモジュールを追加します。

3)VBA のメニュー「ツールー>参照設定」で以下2つをチェック(参照設定)します。
・Microsoft XML, v6.0
・Microsoft Scripting Runtime
※EXCEL を新規にインストールした状態で動作確認をしておりますので、EXECEL の各種設定等を変更されている場合は初期状態に戻しご利用下さい。

4)また、VBA での JSON 文字列解析に VBA-JSON v2.3.1(https://github.com/VBA-tools/VBA-JSON/releases/tag/v2.3.1)(MIT License)を利用しています。
これを標準モジュールに組み込んでください。
(某社APIのExcelサンプルプログラムからコピペしてきました。自分で書いたので・・・略w)
--- 以上補足 --------------------

*関連記事
Excel VBA で、J-Quants API に接続する記事です。
1)J-Quants API への接続をChatGPTに聞いてExcel VBAに書き直してみた
2)J-QuantsAPI をChatGPTに聞いてExcel VBAで書き直す(続き、銘柄リスト取得)
3)J-QuantsAPI をChatGPTに聞いてExcel VBAで書き直す(続き、銘柄リスト取得 その2)
4)J-QuantsAPI のデータをExcelで取得する <完成版>
(完成形。フリープランの全機能をExcel VBA で実装しました。)


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