PHP や JavaScript で作った小物をいくつか。
ぼくが定期預金代わりにやっている投資信託、さわかみ投信の基準価格を Web サイトから取得して、リアルタイムな値を各種計算するスクリプトです。
| 基準価額 (1万口あたり) | 11,858 |
|---|---|
| 前日比 |
-6 |
| 純資産総額(百万円) | 211,710 |
↑ だいたいこんな情報を取得可能ですよ。
このスクリプトを使った計算例。たとえば 2005 年 6 月から1万円ずつ投資していたらどれくらい損益があるのかというシミュレーション。
| 保有数量 | 385,295 |
|---|---|
| 損益分岐価格 (1万口あたり) | 15,442.72 |
| 投資額 | 595,000 |
| 時価評価額 | 456,882 |
| 評価総合収益 | -138,118 |
| 評価総合収益利率 | -23.21% |
さわかみ投信の各種情報を $sawakami[] 連想配列に格納します。このソースを実行後に関数を呼び出すことにより、各種計算が可能です。
<?php
// さわかみ投信の基準価格、前日比、純資産総額、情報更新日時を取得して変数に格納します。
// さわかみ投信のサイトの HTML を直接吸い上げているだけなので、将来ページデザインが変わったりしたときに
// は確実に挙動不審な動きをすると思います(笑)。
function Sawakamifetch() {
setlocale(LC_MONETARY, 'ja_JP'); //通貨の取り扱いを日本円に
mb_internal_encoding("UTF-8"); //内部文字エンコーディングの設定
global $sawakami; //さわかみ連想配列をグローバル変数宣言
//ファイルの取得と UTF 変換
$lines_sjis = file('http://www.sawakami.co.jp/fund_info/home_if_price.html'); //Shift JIS 専用の配列に読み込む
foreach($lines_sjis as $line_sjis){
$lines[] = rtrim(strip_tags(mb_convert_encoding($line_sjis, "UTF-8", "SJIS"))); //UTFエンコードしつつ、改行とタグも除去しちゃう。
}
//情報の取得
foreach($lines as $line){ //行をなめる
if (strpos($line, '基準価額') !== false) $serch_mode = '基準価額';
if (strpos($line, '純資産総額') !== false) $serch_mode = '純資産総額';
//echo $serch_mode . '<br />';
//まずは更新日時の取得
$pattern = '/20[0-9]{2}年[0-9]+月[0-9]+日現在/';
if (preg_match ($pattern, $line) == 1){
preg_match($pattern, $line, $matchs);
// echo $matchs[0] . ' …更新日時<br />';
$sawakami[updated_date] = (integer)
strtotime(str_replace("年", "/",
str_replace("月", "/",
str_replace("日現在", " 17:30",
$matchs[0]))));
}
//基準価格の取得
$pattern = '/^[1-9][0-9|,]+$/';
//$pattern = '/^[0-9|,]+$/';
if (preg_match ($pattern, $line) == 1 and $serch_mode == '基準価額'){
preg_match($pattern, $line, $matchs);
$sawakami[base_value] = (float)str_replace(",", "", $matchs[0]);
}
//前日比の取得
$pattern = '/[+-][0-9|,|]+$/';
if (preg_match ($pattern, $line) == 1){
preg_match($pattern, $line, $matchs);
$sawakami[gyrations] = (float)str_replace(",", "", $matchs[0]);
}
//純資産総額の取得
$pattern = '/^[0-9|,]+$/';
if (preg_match ($pattern, $line) == 1 and $serch_mode == '純資産総額'){
preg_match($pattern, $line, $matchs);
$sawakami[total_net_assets] = (float)str_replace(",", "", $matchs[0]);
}
}
//ファイル更新日時の取得
$sawakami[modified_time] = filemtime('http://www.sawakami.co.jp/fund_info/home_if_price.html');
}
?>
整備でき次第、公開します。
--その場で自動生成される、万年カレンダーです。おしゃれで、かわいいものを目指します。
| Wednesday, 2009 | ||||||
|---|---|---|---|---|---|---|
| Sun | Mon | Tue | Wed | Thr | Fri | Sat |
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |
完成のめどが立ち次第、公開予定。
指定した日時までの時間を逆算してくれるスクリプト。お誕生日までの時間を計ったりね。
| 予定時間 (RFC 822) | Fri, 01 Jan 2010 00:00:00 +0900 |
|---|---|
| 予定時間 (Japanese) | 2010 年 1 月 1 日 0 時 00 分 00 秒 |
| 予定時間 (Unix Timestamp) | 1262271600秒 |
| 現在時間 (RFC 822) | Sat, 04 Jul 2009 19:29:47 +0900 |
| 現在時間 (Japanese) | 2009 年 7 月 4 日 19 時 29 分 47 秒 |
| 現在時間 (Unix Timestamp) | 1246703387秒 |
| 予定時間まであと | 15,568,213 秒 |
| 予定時間まであと | 259,470 分 |
| 予定時間まであと | 4,324 時間 |
| 予定時間まであと | 180 日 |
| 予定時間まであと | 0 年 |
| 予定時間まであと | 0 世紀 |
| - | 65,455 |
Google Map API の褌を借りて、地図上の緯度経度を測定します。