Bitcoin Python スクレイピング

ビットフライヤーからビットコインの価格をPythonを使って取得する

この記事は約8分で読めます。

 

 

ビットコインの日次の価格データを取得する

 

今回はビットフライヤーからビットコインの価格を取得してみたいと思います。ビットフライヤーはAPIが用意されているのですが、APIだとリアルタイムの情報しか取れないので、1年単位のデータを入手したいという時には使えません。なのでCryptowatchというサイトから取得することになります。

 

 

1日足で、2017/01/01以降のチャートを取得したい時は以下のような感じです。

 

https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=86400&after=1483196400

 

見たら分かると思いますが、periodsで日次データか分足(1時間足なら3600、5分足なら300など)にするかの調整ができ、afterは取得したい期間の始めのUnixtimeを指定するだけです。

 

 

Pythonでビットコインの価格データを取得する

 

PythonでこのAPIをつかう場合はrequestsというライブラリーを使うと便利です。requestsはPythonのみだとインストールする必要がありますが、Anacondaだとデフォルトでインストールされているかと思います。

 

 

 

 

 

 


###ライブラリのインストール
import requests
import json

###ビットフライヤーの価格データを取得する
import requests
r=requests.get('https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=86400&after=1483196400')

 

 

rに<Response [200]> と返ってきていれば、価格データの取得自体は成功しています。今回取得したビットコインの価格データは、rという変数にJSONというファイル形式で保存されているわけですが、jsonデータの中身はそのままpythonで見ることはできないので、関数を使って変換する必要があります。

 

 

pythonでJSONデータを表示する

 

pythonではjsonデータはテキストデータ(.text)にしてjson.loads()という関数でリストに変換できます。

 

#データをjsonに変換する
r2=json.loads(r.text)

 

 

<結果>

{‘allowance’: {‘cost’: 1746301, ‘remaining’: 7993329326}, ‘result’: {‘86400’: [[1495324800, 232660, 242460, 231962, 242460, 231.863, 0], [1495411200, 243915, 343303, 236510, 254214, 309.532, 0], [1495497600, 256994, 276003, 256994, 276002, 4.94, 0], [1495584000, 284989, 284989, 275603, 275603, 0.002, 0], [1495670400, 302146, 302146, 300000, 301050, 1.05, 0], [1495756800, 303000, 340000, 270002, 270002, 17.01, 0], [1495843200, 349998, 349998, 194003, 281061, 21.613, 0], [1495929600, 269998, 269999, 210000, 269999, 2.1200001, 250001], [1496016000, 269999, 279999, 210045, 210046, 7.623, 269999], [1496102400, 270000, 280000, 265202, 280000, 3.321, 270412], [1496188800, 270007, 280999, 270000, 277383, 1.271, 275965], [1496275200, 250000, 260000, 245653, 260000, 0.012, 260000], [1496361600, 289900, 289999, 277986, 289999, 5.106, 289869], [1496448000, 280000, 280000, 270000, 279999, 14.802, 0], [1496534400, 298000, 298000, 272000, 291967, 0.702, 0], [1496620800, 280000, 299999, 280000, 299999, 2, 0], [1496707200, 299998, 300000, 272000, 300000, 11.159, 0], [1496793600, 309000, 323454, 309000, 322030, 47.822956, 0], [1496880000, 319220, 320060, 289507, 293681, 41.727978, 0], [1496966400, 292301, 309700, 289550, 308850, 10.303012, 0], [1497052800, 308696, 319998, 301024, 319998, 5.2129993, 0],

 

 

こんな感じでビットコインの価格を取得できます。データの形は分かりにくいですが、{allowance:[~~~],result:[~~~]}みたいなjsonで返ってきます。

 

とりあえず今回欲しいのはresultの中の価格データなので、要らない部分をそぎ落とし必要な部分だけを抜き取ります。(これがデータ集めで非常にめんどくさい・・・)

 

>>>r3=r2[‘result’]とすれば、r3で{‘86400’: [[1495324800, 232660,~以下のデータが抽出できます。次は>>>r4=r3[‘86400’]とでもすれば、[[1495324800, 232660,~の部分が抽出できます。(短くまとめるときは、r2[‘result’][‘86400’]で省略できます。)

 

###ビットフライヤーの価格データを取得する
import requests
r=requests.get('https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=86400&after=1483196400')
r2=json.loads(r.text)
bitcoindata=r2['result']['86400']

 

 

<結果>
 [[1495324800, 232660.0, 242460.0, 231962.0, 242460.0, 231.863, 0.0], [1495411200, 243915.0, 343303.0, 236510.0, 254214.0, 309.532, 0.0], [1495497600, 256994.0, 276003.0, 256994.0, 276002.0, 4.94, 0.0], [1495584000, 284989.0, 284989.0, 275603.0, 275603.0, 0.002, 0.0], [1495670400, 302146.0, 302146.0, 300000.0, 301050.0, 1.05, 0.0],

 

 

これでタイムスタンプと価格が格納された二次元配列が手に入ります。またタイムスタンプが気持ち悪い人は日付に変換しましょう。

 

 

from datetime import datetime
import time

bitcoindate=[]
bitcoinprices=[]

for i in bitcoindata:
    date=int(i[0])
    loc =datetime.utcfromtimestamp(date)
    bitcoindate.append(loc)
    bitcoinprices.append(i[1])
pricedata=pd.DataFrame({"date":bitcoindate,"price":bitcoinprices})
pricedata

 

 

これで↓みたいなデータフレームが作れます。

 

 

 

まあこんな感じですが、Cryptowatchはどちらかというと、高頻度データの取り扱いよりで、数年分のアルトコインの日時データを取得する場合は、他の仮想通貨価格サイトから取得するのがオススメだと思います。

 

 

 

 

 

 

 

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

タイトルとURLをコピーしました