LibreOffice Calcで為替レートを取得する。その1

仕事や趣味で基板のコストを計算するのに、海外から輸入するような部品の場合には為替レートが必要になります。大きい会社では代理店などを通じて見積もりを取ればいいんですが、小さい会社や個人でやるような場合にはそうはいきません。

当然ながらコスト計算なので表計算ソフトを使用するわけですが、ここでは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 件のコメント:

コメントを投稿

WesternDigitalこわれた。

たぶん寿命を過ぎてるのでクレームとまではいかないのだけれど。 WesternDigitalのWD60EFRXが壊れました。モノは2014年11月に購入。ところが3年で壊れ、RMAにより2017年11月に交換したものです。BlackBlazeでも故障率がそれなりに高かったので、そう...