ruby-robotの夢

cygwin-ruby,qgisの達人を目指す奮闘記

任意通貨間、指定日の為替レートを調べる方法

まとまった数の通貨間の指定日での為替レートを調べたいということが起きた。

pyhonライブラリ

PYTHONにそんなライブラリがあるだろうと思って、調べてみると、やっぱりあった。
currency_converter だ。

#!python
import sys
from currency_converter import CurrencyConverter
from datetime import date

c = CurrencyConverter()

if len(sys.argv)==4 :
    cu_numerator=sys.argv[1]
    cu_denominator=sys.argv[2]
    cu_date=sys.argv[3]
    ymdstr=cu_date.split("/")
    ymdi=list( map(int,ymdstr) )
else:
    print ("Error! ARGV.size",len(sys.argv))

print(c.convert(1, cu_denominator, cu_numerator, date=date(ymdi[0], ymdi[1], ymd
# Error の時は、日付を平日に変える

しかし、これには大きな問題がある(23/07/31)。対応している通貨が限られている。
カンボジアとかは出てこない。

exchange-rate サイトを活用する方法

いろんな銀行が、為替レートを紹介しているが、
あらゆるものに対応しているものが、なかなか無い。
そんな中、www.exchange-rates.org が完全性が高いようである。
換算先=換算元×レート
で、換算先、元の通貨IDと、年を入れると、1年分のレートの表が出てくる。
この中から指定日のものを探せばよい。
これを、bs4を使って調べることにした。

#!/usr/bin/python
import requestsfrom bs4 
import BeautifulSoup
import sys
#wordsets="JPY,USD,2020/07/01".split() 
wordsets=list(sys.argv)[1:100]
#print (wordsets)
for wordset in wordsets:
    words=list(wordset.split(",") )
    nume=words[0]
    defl=words[1]
    ymdstr=words[2]
    ymdsr=list(ymdstr.split("/"))
    ysr=ymdsr[0]
    msr=int(ymdsr[1])
    dsr=int(ymdsr[2])
#    url="https://www.exchange-rates.org/ja/exchange-rate-history/jpy-khr-2021"
    url="https://www.exchange-rates.org/ja/exchange-rate-history/"+nume+"-"+defl
    res = requests.get(url,timeout=(3.0,7.5))
    soup = BeautifulSoup(res.text, "html.parser")
    itbl=1
    tbl=list(soup.select("table"))[itbl]
    trs=tbl.select("tr")
    for j,tr in enumerate(trs):
        tds=tr.select("td")
        if len(tds)==2:
            date=list(tds[0].select("a"))[1].text #date
            ymds=list(date.split("/"))
            m=int(ymds[1])
            d=int(ymds[2])
            if m==msr and d==dsr: #日付が一致する場合
                rate=list(tds[1].select("span"))[2].text # rate strings
                orate=list(rate.split(" "))[0]
                print (orate)