生活/クレジットカード/為替手数料
の編集
https://over.6pb.info/wiki/?&9f72236b49
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
**TTM [#r7e6fc06] TTMの入手先: -[[外国為替情報 : 三井住友銀行:http://www.smbc.co.jp/market/backnumber/fixing/]] -[[三菱UFJリサーチ&コンサルティング | 外国為替相場 | 1990年以降の為替相場:http://www.murc-kawasesouba.jp/fx/past_3month.php]] -TTM(仲値)というわけではないが、[[Pacific Exchange Rate Service - Database Retrieval System:http://fx.sauder.ubc.ca/data.html]] 自動化しないと、誤記する。 -三井住友銀行(なお、私は同行からbanされた。403 Forbidden。やり過ぎに注意。) #pre{{ #!/usr/bin/perl use utf8; use strict; use warnings; my $url = 'http://www.smbc.co.jp/market/backnumber/fixing/'; # 今月 my $thisMonth = '//*[@id="tabbox1"]/div//li/a/@href'; # 前月 my $lastMonth = '//*[@id="tabbox2"]/div//li/a/@href'; use URI; my $u = URI->new($url); use HTML::TreeBuilder::XPath; my $tree = HTML::TreeBuilder->new_from_url($url); my @href = $tree->findvalues($lastMonth); push(@href, $tree->findvalues($thisMonth)); use LWP::UserAgent (); my $ua = LWP::UserAgent->new; for my $pdfpath (@href) { my $uri = sprintf qq(http://%s%s),$u->host,$pdfpath; my $response = $ua->get($uri); if ($response->is_success) { my $pdfbody = $response->decoded_content; my $tmpfile = "/tmp/msbcrate.$$"; open(my $fh, '>', "$tmpfile") or die "$tmpfile:$!"; print $fh $pdfbody; close $fh; open($fh, "pdftotext -layout $tmpfile - |") or die "pipe:$!"; my @content = <$fh>; close $fh; unlink $tmpfile; if (my ($date, %rate) = &msbcrate_pdf(@content)) { my $ttm = ($rate{'usd'}->{'tts'} + $rate{'usd'}->{'ttb'})/2; printf qq(%s\t%.2f\n),$date,$ttm; #my $insert = #"INSERT IGNORE INTO usd VALUES ('$date','SM','$ttm')"; #$db->do($insert) or die $db->errstr; } else { print STDERR "failed in $pdfpath\n"; } } } #$db->disconnect; exit; sub msbcrate_pdf { my @lines = @_; my $date = ''; my %rate = (); my %month = qw( Jan 1 Feb 2 Mar 3 Apr 4 May 5 Jun 6 Jul 7 Aug 8 Sept 9 Sep 9 Oct 10 Nov 11 Dec 12 ); for (@lines) { # Date: May.25, 2018 if (my @temp = (/Date:\s+([a-zA-Z]+)\D+(\d+)\D+(\d+)/)) { my $month = $month{$temp[0]} // 'fail'; $date = "$temp[2]/$month/$temp[1]"; next; } if (/U\.S\.A\.\s+USD\s+1\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)/) { $rate{'usd'}->{'tts'} = $1; $rate{'usd'}->{'ttb'} = $3; next; } } if ($date eq '' || !defined $rate{'usd'}->{'tts'}) { return; } else { return $date, %rate; } } }} -三菱UFJリサーチ&コンサルティング #pre{{ #!/usr/bin/perl use utf8; use strict; use warnings; use Time::Piece; use Time::Seconds; my $t = localtime; my $days = 20; # 過去○日分取得する。 use LWP::UserAgent (); use HTML::TreeBuilder::XPath; my $baseurl = 'http://www.murc-kawasesouba.jp/fx/past/index.php'; # http://www.murc-kawasesouba.jp/fx/past/index.php?id=180419 for (1..$days) { my $date = sprintf qq(%02d%02d%02d),$t->yy,$t->mon,$t->mday; my $url = $baseurl . '?id=' . $date; my $ua = LWP::UserAgent->new; # 営業日以外は「本日の為替相場」に転送される。 # http://www.murc-kawasesouba.jp/fx/index.php $ua->max_redirect(0); my $response = $ua->get($url); my $root = HTML::TreeBuilder->new(); if ($response->is_success) { $root->parse_content($response->decoded_content); my $tts = $root->findvalue('//*[@id="main"]/table[1]/tr[2]/td[4]'); my $ttb = $root->findvalue('//*[@id="main"]/table[1]/tr[2]/td[5]'); my $ttm = ($tts+$ttb)/2; my $date = $t->ymd("/"); printf qq(%s\t%.2f\n),$date,$ttm; #my $insert = #"INSERT IGNORE INTO usd VALUES ('$date','MU','$ttm')"; #$db->do($insert) or die $db->errstr; } $t -= ONE_DAY; } #$db->disconnect; exit; }}
タイムスタンプを変更しない
___paraedit_taxtarea___
テキスト整形のルールを表示する