BTC価格を取得する の記事でZaifのBTC価格を取得しました。
tickerというAPIの currency_pair に btc_jpy を渡してBTC価格を取得しましたね。
/ticker/{currency_pair}
では、BTC以外のアルトコインの価格を取得するには、何を指定すればいいでしょうか?
個別情報 – ticker (別ウィンドウで開きます)を見てみましょう。
currency_pairに指定できる値は currency_pairs を参照してください。
とありますね。では次に currency_pairs (別ウィンドウで開きます)を見てみます。
下の方に表がありますね。
同じものを書いてみます。
[table id=4 /]
この中の currency_pair (通貨ペアのシステム文字列) を 先程の currency_pair に渡せばOKです。
では、currency_pair を全て取得してみましょう。
currency_pairs APIを使用します。
/currency_pairs/{currency_pair}
currency_pair に all を指定すれば、有効な全ての通貨ペア情報が取得出来るようです。
ではソースです。
[python title="Source1"]
import requests
r = requests.get('https://api.zaif.jp/api/1/currency_pairs/all')
json = r.json()
for eachjson in json:
print (eachjson['currency_pair'])
[/python]
結果は以下のようになりました。上から8行目に btc_jpy 、下から7行目に eth_jpy がありますね。
解説
3行目までは今までの解説の通りですね。
4行目に for eachjson in json: とあります。for文と呼ばれる構文で、同じ処理を複数回繰り返す時に使われます。
例を出しましょう。
[python title="Source2"]
numbers = [10, 15, 2, 500]
for num in numbers:
print (num)
[/python]
これは numbers という入れ物に、4つの数字(10 と 15 と 2 と 500 )が放り込まれていると思ってください。
この numbers という入れ物から、1個ずつ取り出して、print関数の引数に渡している、ということになります。
上記のプログラムコードはたった3行しかありませんが、実際はfor文があることによって何度も同じ箇所を繰り返しています。次のようなものになります。
[table id=5 /]
もう1つ例をあげましょう。
[python title="Source3"]
fruits = ['apple', 'banana', 'orange']
for fruit in fruits:
print (fruit)
[/python]
今度は数値ではなく、文字列です。文字列の場合は、シングルクォーテーション(')でくくります。
何となく分かってきましたでしょうか?
構文としては以下のような形です。
[python title="Source4"]
for 個別の変数 in データの集まり:
処理1
処理2
…
[/python]
「データの集まり」の中に、データが3個あった場合は、「処理1」、「処理2」、「…」、が3回繰り返されます。また、「個別の変数」の中には「データの集まり」のデータ内容が、代わる代わる入れられ、「処理1」等の中で使うことが出来ます。
今回「データの集まり」として下記を例に出しました。
numbers = [10, 15, 2, 500]
fruits = ['apple', 'banana', 'orange']
このように、[]で囲んだものを、「リスト」と呼びます。
さて、ここで最初の currency_pair を全部取得したときのソース(Source1)に戻ってください。もう一度ソースを出します。
[python title="Source5"]
import requests
r = requests.get('https://api.zaif.jp/api/1/currency_pairs/all')
json = r.json()
for eachjson in json:
print (eachjson['currency_pair'])
[/python]
さらに次の一行を実行してみてください。
[python title="Source6"]
print (json)
[/python]
とても長い文字列が表示されましたか?複雑に見えますが、至ってシンプルな形をしているんです。
[から始まって、]で終わっているのが分かりますでしょうか?これはつまり、jsonという変数は「リスト」ということですね。上で2個例をあげた、あの「リスト」と同じなんです。ちょっと中身が複雑になっていますが。複雑な部分を省略して書くと以下のようになっています。
[python title="Source7"]
[
{~},{~},{~},{~},{~},{~},{~},{~},{~},{~},{~},{~},{~},{~}
]
[/python]
これがリストであるなら、先程のfor文の「データの集まり」として使えますね。試しに出力してみましょう。
[python title="Source8"]
for eachjson in json:
print (eachjson)
[/python]
多少は見やすい表示に変わったのではないでしょうか?このリストの中身は上で例をあげたものとは違いちょっと複雑です。上の例では、数値だけだったり、文字列だけだったりなので簡単ですが、今回のリストの中身は「辞書」と呼ばれるものなんです。
辞書とは { で始まって、} で終わるデータの集まりです。実はBTC価格を取得する (別ウィンドウで開きます) でも出てきました。名前と値のセットがカンマ区切りで並んでいるデータです。
では「辞書」の簡単な例を出します。
[python title="Source9"]
fruits = {'apple':30, 'banana':20, 'orange':100}
print (fruits['apple'])
[/python]
これはそれぞれの果物の単価を辞書にしたものです。りんご30円、バナナ20円、オレンジ100円ということですね。
りんごの単価を表示するには、fruits['apple']とすることで、30を取得することが出来ます。
辞書の構文は以下のとおりです。{ と } で囲む。名前と値の間にコロン(:)。名前と値のセットを連続して書く時は、カンマ(,)区切り。
[python title="Source10"]
変数 = {名前1:値1, 名前2:値2, 名前3:値3}
[/python]
Source8を実行すると、たくさんの辞書が表示されますが、1つ目の辞書を見てみましょう。分かりやすく改行を入れました。
[python]
{
'title': 'CMS:ETH/JPY 取引所 - ZAIF Exchange',
'aux_japanese': '日本円',
'id': 179,
'is_token': True,
'currency_pair': 'erc20.cms_jpy',
'aux_unit_step': 0.01,
'item_unit_step': 0.0001,
'item_unit_min': 10.0,
'name': 'ERC20.CMS/JPY',
'item_japanese': 'CMS:ETH',
'event_number': 0,
'seq': 182,
'aux_unit_min': 0.01,
'description': 'CMS:ETH/JPY 取引所。CMS:ETHと日本円の取引が行えます。', 'aux_unit_point': 2
}
[/python]
表にしてみます。
[table id=6 /]
名前と値のセットが14個ありますが、欲しいのは 'currency_pair': 'erc20.cms_jpy' のところだけですね。currency_pair の値である、erc20.cms_jpy とうい値を取得するには、eachjson['currency_pair'] と指定すればいいんでしたね。
このような辞書データが28個集まったリストが json という変数に格納されているわけです。
これでSource1の内容が理解出来たのではないでしょうか?