当然ながらコスト計算なので表計算ソフトを使用するわけですが、ここではLibreOffice Calcを使っています。
今のところCalcでは、外部の為替レートを表示してくれるサイトからページを読み込んでワークシートに配置し、その中から現在の為替レート(USD-JPY)を含んだセルを参照して加工し、数値に変換して計算に使うということをやっています。
が、もうちょっとカンタンに取得できる方法はないかなぁと。
まずは "1USD" でぐぐってできるだけ単純そうなのを探します。すると、Yahoo!ファイナンスのところがわりあいシンプルなので、ちょっとソースを眺めてみます。すると、
<!-- fxHeaderTtl -->
<h1 class="fxRateCalTtl">為替レート計算結果</h1>
<!-- fxRateCal -->
<div class="fxRateCal">
<table class="fxRateTbl">
<tr>
<th>コード</th>
<th><span class="icoCenter icoCUsa18">アメリカ ドル</span></th>
<th>最新取引レート</th>
<th class="noLine"><span class="icoCenter icoCJpn18">日本 円</span></th>
</tr>
<tr>
<td class="code"><a href="https://rdsig.yahoo.co.jp/finance/fx/convert/result/RV=1/RU=aHR0cHM6Ly9zdG9ja3MuZmluYW5jZS55YWhvby5jby5qcC9zdG9ja3MvZGV0YWlsLz9jb2RlPVVTREpQWT1Y">USDJPY=X</a></td>
<td class="from">1</td>
<td class="newest">112.360000<span>(12:39)</span></td>
<td class="price noLine">112.36</td>
</tr>
</table>
なんて感じになっていて、下の方にある
class="price noLine"
を引っかければなんとかなりそうかな、と。試しにコンソールから叩いてみます。
$ curl -s "https://info.finance.yahoo.co.jp/fx/convert/?a=1&s=USD&t=JPY" | grep "price noLine"
<td class="price noLine">112.33</td>
$
これならわりと簡単に行けそうな気が…。
LibreOfficeはPythonも一緒にインストールしてくれています。現在のLibreOffice 6.0.6には、Python 3.5.5が組み込まれています。そして標準ライブラリとしてurllibなども一緒に組み込まれているため、余分なものをインストールせずに利用できそうです。
import urllib.request
f = urllib.request.urlopen('https://info.finance.yahoo.co.jp/fx/convert/?a=1&s=USD&t=JPY')
f.read().decode('utf-8')
とすると、ちゃんとHTMLソースをリトリーブしてくれるようです。
なのでプログラムを書いてみます。
import urllib.request
import re
f = urllib.request.urlopen('https://info.finance.yahoo.co.jp/fx/convert/?a=1&s=USD&t=JPY')
s = f.read().decode('utf-8').split('\n')
for l in s:
if 'price noLine' in l:
jpy = float(re.search('[0-9\.]+', l).group())
print(jpy)
これを実行すると、
$ python \Users\kats\Desktop\get_jpyusd.py
112.45
と、2018/10/19 14:35現在のレートが取得できました。
このプログラムを get_jpyusd.py として保存しておきます。
あれれ、このPythonプログラムをどうやって登録するんだろう。ということで、続きます。
0 件のコメント:
コメントを投稿