【ぷ】Pythonで為替を取得する@1Forge

2018年9月24日プライベートmarket,python,script,yen

image

追記:Quandlでもデータ提供してる

追記:ForexDataClient.py要直し

追記:ライブラリとして入れる必要ないと思う

1Forgeというサービスで、無料で為替情報が取得できます(1000Request/日まで、それ以上は有料)

ご丁寧に、PHP/Javascript/Ruby/Python2のライブラリやサンプルコードも公開されてます。

PHPとJavascriptはソケット通信が可能らしい。湯水の如く為替情報が扱える。Javascriptは、Node.js使えるのかな?

ここは時代の潮流に乗ってPythonに慣れておこうと、Pythonをチョイス。

だが・・、サンプルはPython2で書かれてる。

(;´Д`)今はPython3

ほとんど無知なやつが、Python3で動くまで頑張ったプチドキュメントだ。

まずは、これでライブラリーをPIPでインストールする(Gitはここ

pip install python_forex_quotes

追記:ライブラリとして入れる必要ないと思う

1個だけのファイルなので、ライブラリとして導入するよりも、外部pyファイルとして利用した方が良さそうです(結局ファイルをイジるので)同じホルダーに置いて、

import ForexDataClient as fdcとしてインポートして。

client = fdc.ForexDataClient(・・

と直すだけです。但し、コンパイル済みホルダーがPythonによって生成されます(__pycache__)

image

・・とはいえ、何てことはない、GitにもあるForexDataClient.pyが一個入ってるだけのライブラリーです。

image

コードもとてもシンプル。URLを生成してるだけ。このままではPython3で動かないので変更します(printんとこ、とurllib)

追記:ForexDataClient.py要直し

def fetch(self, uri):の中の以下の部分を変更しないと動かない時があるので、変更おすすめ。バイト列を文字列にデコードしてます(WindowsではOKだったが、Linuxでエラーだった)

return json.loads(response.read().decode('utf8’))

(追記終わり)

Gitにある、ForexDataClient.pyを、ライブラリー内のモノに上書きコピーします(Gitの方は3対応済み)

※urllibも、urllib.requestに変更になってる

私の環境では、以下のパスでした(Win10、64bit版Python3.7.0インスラー版)

C:\Users\ユーザー名\AppData\Local\Programs\Python\Python37\Lib\site-packages\python_forex_quotes

image

そしたら、サンプルコードのexample.pyを編集します。

ここでの編集点は、まさに”print”です。

5箇所のprintに、()を追加します。printはオブジェクトです。オブジェクトになってしまったのです。

ついでに、もらったAPIキーも記述しておきましょう。

これで、Python3でも動くはずです。

marketIsOpen() は、市場が開いてるか?(どこの市場だろう)

true/false

追記:これがfalseになるタイミングに遭遇しました。機能してます(日曜深夜)

getSymbols()は、扱える通貨ペアのリスト

['EURHKD’, 'EURCNH’, 'EURDKK’, 'EURMXN’, 'EURPLN’, 'EURXAG’,……..]

getQuotes()は、為替情報の取得(複数可)

[{'symbol’: 'EURUSD’, 'bid’: 1.17943, 'ask’: 1.17944, 'price’: 1.17944, 'timestamp’: 1537798274}, {'symbol’: 'GBPJPY’, 'bid’: 147.934, 'ask’: 147.938, 'price’: 147.936, 'timestamp’: 1537798274}]

timestampは以下のようにすると、日付を解析できます。

import datetime
a=client.getQuotes(['EURUSD’, 'GBPJPY’]))
datetime.date.fromtimestamp(a[0][“timestamp"])
出力:datetime.date(2018, 9, 25)

quota()は、API残り使用数

{'quota_used’: 3, 'quota_limit’: 1000, 'quota_remaining’: 997, 'hours_until_reset’: 14}

convert()は、通貨の交換値

{'value’: 117.944, 'text’: '100 EUR is worth 117.944 USD’, 'timestamp’: 1537798275}

現在(2018/9/25)時点での使える全通貨ペアは以下のようです。

['EURHKD’, 'EURCNH’, 'EURDKK’, 'EURMXN’, 'EURPLN’, 'EURXAG’, 'EURXAU’, 'EURBTC’, 'EURETH’, 'EURLTC’, 'EURXRP’, 'EURDSH’, 'EURBCH’, 'USDEUR’, 'USDGBP’, 'USDAUD’, 'USDNZD’, 'USDXAG’, 'USDXAU’, 'USDBTC’, 'USDETH’, 'USDLTC’, 'USDXRP’, 'USDDSH’, 'USDBCH’, 'JPYEUR’, 'JPYUSD’, 'JPYGBP’, 'JPYCAD’, 'JPYCHF’, 'JPYAUD’, 'JPYNZD’, 'JPYSGD’, 'JPYNOK’, 'JPYRUB’, 'JPYSEK’, 'JPYTRY’, 'JPYZAR’, 'JPYHKD’, 'JPYCNH’, 'JPYDKK’, 'JPYMXN’, 'JPYPLN’, 'JPYXAG’, 'JPYXAU’, 'JPYBTC’, 'JPYETH’, 'JPYLTC’, 'JPYXRP’, 'JPYDSH’, 'JPYBCH’, 'GBPEUR’, 'GBPRUB’, 'GBPTRY’, 'GBPZAR’, 'GBPCNH’, 'GBPDKK’, 'GBPMXN’, 'GBPPLN’, 'GBPXAG’, 'GBPXAU’, 'GBPBTC’, 'GBPETH’, 'GBPLTC’, 'GBPXRP’, 'GBPDSH’, 'GBPBCH’, 'CADEUR’, 'CADUSD’, 'CADGBP’, 'CADAUD’, 'CADNZD’, 'CADSGD’, 'CADNOK’, 'CADRUB’, 'CADSEK’, 'CADTRY’, 'CADZAR’, 'CADHKD’, 'CADCNH’, 'CADDKK’, 'CADMXN’, 'CADPLN’, 'CADXAG’, 'CADXAU’, 'CADBTC’, 'CADETH’, 'CADLTC’, 'CADXRP’, 'CADDSH’, 'CADBCH’, 'CHFEUR’, 'CHFUSD’, 'CHFGBP’, 'CHFCAD’, 'CHFAUD’, 'CHFNZD’, 'CHFNOK’, 'CHFRUB’, 'CHFSEK’, 'CHFTRY’, 'CHFZAR’, 'CHFHKD’, 'CHFCNH’, 'CHFDKK’, 'CHFMXN’, 'CHFPLN’, 'CHFXAG’, 'CHFXAU’, 'CHFBTC’, 'CHFETH’, 'CHFLTC’, 'CHFXRP’, 'CHFDSH’, 'CHFBCH’, 'AUDEUR’, 'AUDGBP’, 'AUDNOK’, 'AUDRUB’, 'AUDSEK’, 'AUDTRY’, 'AUDZAR’, 'AUDHKD’, 'AUDCNH’, 'AUDDKK’, 'AUDMXN’, 'AUDPLN’, 'AUDXAG’, 'AUDXAU’, 'AUDBTC’, 'AUDETH’, 'AUDLTC’, 'AUDXRP’, 'AUDDSH’, 'AUDBCH’, 'NZDEUR’, 'NZDGBP’, 'NZDAUD’, 'NZDSGD’, 'NZDNOK’, 'NZDRUB’, 'NZDSEK’, 'NZDTRY’, 'NZDZAR’, 'NZDHKD’, 'NZDCNH’, 'NZDDKK’, 'NZDMXN’, 'NZDPLN’, 'NZDXAG’, 'NZDXAU’, 'NZDBTC’, 'NZDETH’, 'NZDLTC’, 'NZDXRP’, 'NZDDSH’, 'NZDBCH’, 'SGDEUR’, 'SGDUSD’, 'SGDGBP’, 'SGDCAD’, 'SGDCHF’, 'SGDAUD’, 'SGDNZD’, 'SGDNOK’, 'SGDRUB’, 'SGDSEK’, 'SGDTRY’, 'SGDZAR’, 'SGDHKD’, 'SGDCNH’, 'SGDDKK’, 'SGDMXN’, 'SGDPLN’, 'SGDXAG’, 'SGDXAU’, 'SGDBTC’, 'SGDETH’, 'SGDLTC’, 'SGDXRP’, 'SGDDSH’, 'SGDBCH’, 'NOKEUR’, 'NOKUSD’, 'NOKGBP’, 'NOKCAD’, 'NOKCHF’, 'NOKAUD’, 'NOKNZD’, 'NOKSGD’, 'NOKRUB’, 'NOKSEK’, 'NOKTRY’, 'NOKZAR’, 'NOKHKD’, 'NOKCNH’, 'NOKDKK’, 'NOKMXN’, 'NOKPLN’, 'NOKXAG’, 'NOKXAU’, 'NOKBTC’, 'NOKETH’, 'NOKLTC’, 'NOKXRP’, 'NOKDSH’, 'NOKBCH’, 'RUBEUR’, 'RUBUSD’, 'RUBJPY’, 'RUBGBP’, 'RUBCAD’, 'RUBCHF’, 'RUBAUD’, 'RUBNZD’, 'RUBSGD’, 'RUBNOK’, 'RUBSEK’, 'RUBTRY’, 'RUBZAR’, 'RUBHKD’, 'RUBCNH’, 'RUBDKK’, 'RUBMXN’, 'RUBPLN’, 'RUBXAG’, 'RUBXAU’, 'RUBBTC’, 'RUBETH’, 'RUBLTC’, 'RUBXRP’, 'RUBDSH’, 'RUBBCH’, 'SEKEUR’, 'SEKUSD’, 'SEKJPY’, 'SEKGBP’, 'SEKCAD’, 'SEKCHF’, 'SEKAUD’, 'SEKNZD’, 'SEKSGD’, 'SEKNOK’, 'SEKRUB’, 'SEKTRY’, 'SEKZAR’, 'SEKHKD’, 'SEKCNH’, 'SEKDKK’, 'SEKMXN’, 'SEKPLN’, 'SEKXAG’, 'SEKXAU’, 'SEKBTC’, 'SEKETH’, 'SEKLTC’, 'SEKXRP’, 'SEKDSH’, 'SEKBCH’, 'TRYEUR’, 'TRYUSD’, 'TRYJPY’, 'TRYGBP’, 'TRYCAD’, 'TRYCHF’, 'TRYAUD’, 'TRYNZD’, 'TRYSGD’, 'TRYNOK’, 'TRYRUB’, 'TRYSEK’, 'TRYZAR’, 'TRYHKD’, 'TRYCNH’, 'TRYDKK’, 'TRYMXN’, 'TRYPLN’, 'TRYXAG’, 'TRYXAU’, 'TRYBTC’, 'TRYETH’, 'TRYLTC’, 'TRYXRP’, 'TRYDSH’, 'TRYBCH’, 'ZAREUR’, 'ZARUSD’, 'ZARJPY’, 'ZARGBP’, 'ZARCAD’, 'ZARCHF’, 'ZARAUD’, 'ZARNZD’, 'ZARSGD’, 'ZARNOK’, 'ZARRUB’, 'ZARSEK’, 'ZARTRY’, 'ZARHKD’, 'ZARCNH’, 'ZARDKK’, 'ZARMXN’, 'ZARPLN’, 'ZARXAG’, 'ZARXAU’, 'ZARBTC’, 'ZARETH’, 'ZARLTC’, 'ZARXRP’, 'ZARDSH’, 'ZARBCH’, 'HKDEUR’, 'HKDUSD’, 'HKDJPY’, 'HKDGBP’, 'HKDCAD’, 'HKDCHF’, 'HKDAUD’, 'HKDNZD’, 'HKDSGD’, 'HKDNOK’, 'HKDRUB’, 'HKDSEK’, 'HKDTRY’, 'HKDZAR’, 'HKDCNH’, 'HKDDKK’, 'HKDMXN’, 'HKDPLN’, 'HKDXAG’, 'HKDXAU’, 'HKDBTC’, 'HKDETH’, 'HKDLTC’, 'HKDXRP’, 'HKDDSH’, 'HKDBCH’, 'CNHEUR’, 'CNHUSD’, 'CNHJPY’, 'CNHGBP’, 'CNHCAD’, 'CNHCHF’, 'CNHAUD’, 'CNHNZD’, 'CNHSGD’, 'CNHNOK’, 'CNHRUB’, 'CNHSEK’, 'CNHTRY’, 'CNHZAR’, 'CNHHKD’, 'CNHDKK’, 'CNHMXN’, 'CNHPLN’, 'CNHXAG’, 'CNHXAU’, 'CNHBTC’, 'CNHETH’, 'CNHLTC’, 'CNHXRP’, 'CNHDSH’, 'CNHBCH’, 'DKKEUR’, 'DKKUSD’, 'DKKJPY’, 'DKKGBP’, 'DKKCAD’, 'DKKCHF’, 'DKKAUD’, 'DKKNZD’, 'DKKSGD’, 'DKKNOK’, 'DKKRUB’, 'DKKSEK’, 'DKKTRY’, 'DKKZAR’, 'DKKHKD’, 'DKKCNH’, 'DKKMXN’, 'DKKPLN’, 'DKKXAG’, 'DKKXAU’, 'DKKBTC’, 'DKKETH’, 'DKKLTC’, 'DKKXRP’, 'DKKDSH’, 'DKKBCH’, 'MXNEUR’, 'MXNUSD’, 'MXNJPY’, 'MXNGBP’, 'MXNCAD’, 'MXNCHF’, 'MXNAUD’, 'MXNNZD’, 'MXNSGD’, 'MXNNOK’, 'MXNRUB’, 'MXNSEK’, 'MXNTRY’, 'MXNZAR’, 'MXNHKD’, 'MXNCNH’, 'MXNDKK’, 'MXNPLN’, 'MXNXAG’, 'MXNXAU’, 'MXNBTC’, 'MXNETH’, 'MXNLTC’, 'MXNXRP’, 'MXNDSH’, 'MXNBCH’, 'PLNEUR’, 'PLNUSD’, 'PLNJPY’, 'PLNGBP’, 'PLNCAD’, 'PLNCHF’, 'PLNAUD’, 'PLNNZD’, 'PLNSGD’, 'PLNNOK’, 'PLNRUB’, 'PLNSEK’, 'PLNTRY’, 'PLNZAR’, 'PLNHKD’, 'PLNCNH’, 'PLNDKK’, 'PLNMXN’, 'PLNXAG’, 'PLNXAU’, 'PLNBTC’, 'PLNETH’, 'PLNLTC’, 'PLNXRP’, 'PLNDSH’, 'PLNBCH’, 'XAGJPY’, 'XAGGBP’, 'XAGCAD’, 'XAGCHF’, 'XAGAUD’, 'XAGNZD’, 'XAGSGD’, 'XAGNOK’, 'XAGRUB’, 'XAGSEK’, 'XAGTRY’, 'XAGZAR’, 'XAGHKD’, 'XAGCNH’, 'XAGDKK’, 'XAGMXN’, 'XAGPLN’, 'XAGXAU’, 'XAGBTC’, 'XAGETH’, 'XAGLTC’, 'XAGXRP’, 'XAGDSH’, 'XAGBCH’, 'XAUEUR’, 'XAUJPY’, 'XAUGBP’, 'XAUCAD’, 'XAUCHF’, 'XAUAUD’, 'XAUNZD’, 'XAUSGD’, 'XAUNOK’, 'XAURUB’, 'XAUSEK’, 'XAUTRY’, 'XAUZAR’, 'XAUHKD’, 'XAUCNH’, 'XAUDKK’, 'XAUMXN’, 'XAUPLN’, 'XAUXAG’, 'XAUBTC’, 'XAUETH’, 'XAULTC’, 'XAUXRP’, 'XAUDSH’, 'XAUBCH’, 'BTCEUR’, 'BTCJPY’, 'BTCGBP’, 'BTCCAD’, 'BTCCHF’, 'BTCAUD’, 'BTCNZD’, 'BTCSGD’, 'BTCNOK’, 'BTCRUB’, 'BTCSEK’, 'BTCTRY’, 'BTCZAR’, 'BTCHKD’, 'BTCCNH’, 'BTCDKK’, 'BTCMXN’, 'BTCPLN’, 'BTCXAG’, 'BTCXAU’, 'BTCETH’, 'BTCLTC’, 'BTCXRP’, 'BTCDSH’, 'BTCBCH’, 'ETHEUR’, 'ETHJPY’, 'ETHGBP’, 'ETHCAD’, 'ETHCHF’, 'ETHAUD’, 'ETHNZD’, 'ETHSGD’, 'ETHNOK’, 'ETHRUB’, 'ETHSEK’, 'ETHTRY’, 'ETHZAR’, 'ETHHKD’, 'ETHCNH’, 'ETHDKK’, 'ETHMXN’, 'ETHPLN’, 'ETHXAG’, 'ETHXAU’, 'ETHLTC’, 'ETHXRP’, 'ETHDSH’, 'ETHBCH’, 'LTCEUR’, 'LTCJPY’, 'LTCGBP’, 'LTCCAD’, 'LTCCHF’, 'LTCAUD’, 'LTCNZD’, 'LTCSGD’, 'LTCNOK’, 'LTCRUB’, 'LTCSEK’, 'LTCTRY’, 'LTCZAR’, 'LTCHKD’, 'LTCCNH’, 'LTCDKK’, 'LTCMXN’, 'LTCPLN’, 'LTCXAG’, 'LTCXAU’, 'LTCETH’, 'LTCXRP’, 'LTCDSH’, 'LTCBCH’, 'XRPEUR’, 'XRPJPY’, 'XRPGBP’, 'XRPCAD’, 'XRPCHF’, 'XRPAUD’, 'XRPNZD’, 'XRPSGD’, 'XRPNOK’, 'XRPRUB’, 'XRPSEK’, 'XRPTRY’, 'XRPZAR’, 'XRPHKD’, 'XRPCNH’, 'XRPDKK’, 'XRPMXN’, 'XRPPLN’, 'XRPXAG’, 'XRPXAU’, 'XRPETH’, 'XRPLTC’, 'XRPDSH’, 'XRPBCH’, 'DSHEUR’, 'DSHJPY’, 'DSHGBP’, 'DSHCAD’, 'DSHCHF’, 'DSHAUD’, 'DSHNZD’, 'DSHSGD’, 'DSHNOK’, 'DSHRUB’, 'DSHSEK’, 'DSHTRY’, 'DSHZAR’, 'DSHHKD’, 'DSHCNH’, 'DSHDKK’, 'DSHMXN’, 'DSHPLN’, 'DSHXAG’, 'DSHXAU’, 'DSHETH’, 'DSHLTC’, 'DSHXRP’, 'DSHBCH’, 'BCHEUR’, 'BCHJPY’, 'BCHGBP’, 'BCHCAD’, 'BCHCHF’, 'BCHAUD’, 'BCHNZD’, 'BCHSGD’, 'BCHNOK’, 'BCHRUB’, 'BCHSEK’, 'BCHTRY’, 'BCHZAR’, 'BCHHKD’, 'BCHCNH’, 'BCHDKK’, 'BCHMXN’, 'BCHPLN’, 'BCHXAG’, 'BCHXAU’, 'BCHETH’, 'BCHLTC’, 'BCHXRP’, 'BCHDSH’, 'EURUSD’, 'USDJPY’, 'GBPUSD’, 'USDCAD’, 'USDCHF’, 'AUDUSD’, 'NZDUSD’, 'EURGBP’, 'EURCHF’, 'EURCAD’, 'EURAUD’, 'EURNZD’, 'EURJPY’, 'GBPJPY’, 'CHFJPY’, 'CADJPY’, 'AUDJPY’, 'NZDJPY’, 'GBPCHF’, 'GBPAUD’, 'GBPCAD’, 'GBPNZD’, 'AUDCAD’, 'AUDCHF’, 'AUDNZD’, 'CADCHF’, 'AUDSGD’, 'CHFSGD’, 'EURNOK’, 'EURRUB’, 'EURSEK’, 'EURSGD’, 'EURTRY’, 'EURZAR’, 'GBPHKD’, 'GBPNOK’, 'GBPSEK’, 'GBPSGD’, 'NOKJPY’, 'NZDCAD’, 'NZDCHF’, 'SGDJPY’, 'USDCNH’, 'USDDKK’, 'USDHKD’, 'USDMXN’, 'USDNOK’, 'USDPLN’, 'USDRUB’, 'USDSEK’, 'USDSGD’, 'USDTRY’, 'USDZAR’, 'XAGEUR’, 'XAGUSD’, 'XAUUSD’, 'BTCUSD’, 'ETHBTC’, 'ETHUSD’, 'LTCBTC’, 'LTCUSD’, 'XRPUSD’, 'XRPBTC’, 'DSHUSD’, 'DSHBTC’, 'BCHUSD’, 'BCHBTC’]

しかし、このPython、”;”や”{}”に慣れてしまい過ぎた身体には、どうにもムズカユイ・・。

:(;゙゚’ω゚’):

タイピング速度やコード整頓に取られる時間が無くなるのは確かです。Perlの泥沼に浸っていた時代があるので、変態仕様には慣れてますが(自由過ぎる感)、ここからC#やJavaに流れるのは相当大変じゃなかろうかと心配です。

日本語キーボードだと、プログラミングでは記号を打つのにShiftキーを多用しないといけないので、これだけでもPythonは気持ちよくコーディングできるんじゃないかと思う。

あと、そう、ライブラリー名なんかも、小文字だけやし。徹底してる。

追記:Quandlでもデータ提供してる

image

偶然見つけたんですが、このQuandlでも無料でマーケットデータを取得できるようです(まだ試してない)

為替や株式にとどまらず、各国の統計データも扱える、かなり凄そうな感じ。

多過ぎて、目的のデータが探せない・・という。日経新聞が出してるデータは見つけた。

但し、無料枠だと、300コール/10分です。

2018年9月24日プライベートmarket,python,script,yen

Posted by nabe