【再出発】貧乏だし文系だけどpythonで自動売買bot作りたい4日目

こんにちは!

Pythonで自動売買botを作りたい。
今回は「bitflyerで取引されるビットコインの価格データをPythonを利用して参照」します!

前回は、「bitflyerで取引されるビットコインの価格データをWEBブラウザを通じて参照する」
ということをして、Pythonを使う前の前段階として、どんなことをPythonで行うのかということをイメージとして掴む作業をしました。

ここからは私が言うのもですが、情報の不確実性がグッと増しますので、誤りやミスリードを見つけた方がいればご指摘頂ければ幸いです。
ただ一応、やりたいことは出来ていると思われます(笑

 

bitflyerで取引されるビットコインの価格データをPythonを利用して参照

さっそくブラウザではなく、Pythonでデータを参照していきます!

とその前に前提知識を共有します。

インターネットにアクセスする方法は、前回見たように通常はIEやChromeといったブラウザを使って行いますが、Pythonでアクセスする場合の主な方法は、Requestsライブラリを使うのが一般的です。

このRequestsを使って普通のWebサイトにアクセスすると、通常はHTML形式のデータが返ってくるんですが、これはブラウザ用に特化したデータのため、Pythonで扱うことはできません。

Webサイトの中にはプログラムで活用できるデータを配布しているWebサービスを展開しているものがあります。それが前回の記事でも利用したcryptowat.ch等のサイトです。

これらのサイトは、Requestsを使ってWebサイトにアクセスすると、Web側のプログラム(Web APIと呼ぶ)からHTML形式では無く、プログラムでも取り扱えるJSONという形式のデータを送り返してくれるサービスを展開してくれています。

Requestsは最初から搭載された標準のライブラリではないので、インストールして使う必要があります。

従って、まずは「pip」コマンドを使って、Requestsをインストールします。
そして、「pip list」コマンドで、インストールされたライブラリの一覧を確認すると、Requestsが存在しています。

pip install requests   # requestsライブラリをインストール
pip list   # インストール済のライブラリを参照

上述のように、Web APIからのデータを受け取るためには、requestsのget()メソッドを使います。
使い方は簡単。「requests.get(“URL”)」の形で利用するだけです。

プログラム的にはとりあえずこんな風にしました。

import requests

data = requests.get(“https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc?before=1546268400&periods=86400”)

print(data.json())

それぞれ何をしているかをコメントで付与します。

# Pythonでライブラリを利用するには、冒頭で「import ライブラリ名」を使って、ライブラリを取り込む必要があります。
import requests

# requests get()でweb apiから渡されたデータをdataという変数を用意して、そこに格納しています。
# get()の中に指定しているURLは前回記事で扱ったURLで、日足のビットコインデータを取得する指定になっています。
data = requests.get(“https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc?before=1546268400&periods=86400”)

# dataをprint関数を使って、画面表示しています。
# .json()の部分は後述します。
print(data.json())

このプログラムをAnaconda Promptから実行すると、前回ブラウザ画面で表示されたのと同じビットコインの価格データが取得され、Promptの画面に表示されました。

こんな感じで、ブラウザを使わずとも、Pythonでデータを参照し、取得することができました!

とはいえ、こんな単純なプログラムでは、この後どうすれば良いの?感が強い。
ので、次回において、取得の仕方を含め、データの取り扱いにもう少し焦点を当てていきます。

失敗例

最初にプログラムを作った時、こんな感じのコードを書きました。
上に載せたコードとの違いは、変数dataに対して、.jsonメソッドを指定していないという点です。

import requests

data = requests.get(“https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc?before=1546268400&periods=86400”)

# 変数dataに対して.jsonメソッドを使っていない。
print(data)

すると、得られる結果が期待していたものと違いました。

この「<Response [200]>」というのは、レスポンスが正常に返ってきたよ!というステータスを表すそうです。
画面に表示されているのは、このステータスコードだけなのですが、調べてみるとこの時変数dataには、様々なデータ格納されていました。
具体的には、上のステータスコードや、ヘッダー情報、それに本来欲しかったビットコインの価格データなど、要するにPythonで作られたプログラムとweb APIとの間のやり取りが全て乗ってくるという、Pythonで取り扱う上で余計な情報がたくさん乗ってきます。

.json()を使うと、web APIが返してきたJSON形式のデータをPythonで取り扱いやすいように整形してくれるらしい。

うーん、すみません。
私的には、なぜ「.json()」を使うとヘッダーやステータスコードが除外されるのかという疑問が解消できないままなので、ここらへんの具合をうまく説明できないのですが、とりあえず雰囲気で理解する文系代表としては、web APIが返してきたデータをプログラムで扱いたければ、.json()で変換しとけ!という理解をするようにしました(笑。

↑の仕組みについて詳しい方は、教えて頂ければ嬉しいです。

最後あやふやなところで終わりましたが、こんな感じで4日目を終えます!

差し支えなければ、twitterをフォローして頂けますと嬉しいです。

それでは~。

%d人のブロガーが「いいね」をつけました。