PHP で作った小物をいくつか。
ぼくが定期預金代わりにやっている投資信託、さわかみ投信の基準価格を Web サイトから取得して、リアルタイムな値を各種計算するスクリプトです。
| 基準価額 (1万口あたり) | 15,207 |
|---|---|
| 前日比 |
-372 |
| 純資産総額(百万円) | 235,053 |
↑ だいたいこんな情報を取得可能ですよ。
このスクリプトを使った計算例。たとえば 2005 年 6 月から1万円ずつ投資していたらどれくらい損益があるのかというシミュレーション。
| 保有数量 | 280,109 |
|---|---|
| 損益分岐価格 (1万口あたり) | 17,493 |
| 投資額 | 490,000 |
| 時価評価額 | 425,962 |
| 評価総合収益 | -64,038 |
| 評価総合収益利率 | -13.07% |
さわかみ投信の各種情報を $sawakami[] 連想配列に格納します。このソースを実行後に関数を呼び出すことにより、各種計算が可能です。
<?php
// さわかみ投信の基準価格、前日比、純資産総額、情報更新日時を取得して変数に格納します。
// さわかみ投信のサイトの HTML を直接吸い上げているだけなので、将来ページデザインが変わったりしたときに
// は確実に挙動不審な動きをすると思います(笑)。
function Sawakamifetch() {
setlocale(LC_MONETARY, 'ja_JP'); //通貨の取り扱いを日本円に
mb_internal_encoding("UTF-8"); //内部文字エンコーディングの設定
global $sawakami; //さわかみ連想配列をグローバル変数宣言
//さわかみの基準価格情報ページを HTTP で取り込む
$lines = file('http://www.sawakami.co.jp/html/sawakami-kijyun.html');
foreach ($lines as $line_num => $line) {
$line = htmlspecialchars(
mb_convert_encoding($line, "UTF-8", "SJIS") //ShiftJIS → UTF-8 変換
);
if (strpos($line, "(1万口あたり:円)") <> False){ //価格情報サイトの特定のフレーズを検索し、
$pointer = $line_num; //今後はその位置を基準にする。
}
}
$sawakami[base_value] = $lines[$pointer + 2]; //基準価格の取得
$sawakami[gyrations] = $lines[$pointer + 8]; //前日比の取得
$sawakami[total_net_assets] = $lines[$pointer + 13]; //純資産総額の取得
$sawakami[updated_date] = $lines[$pointer - 18]; //情報更新日時の取得
//サニタイズ処理など
foreach ($sawakami as $key => $value) {
//サニタイズ処理1(全角表記の数字を float 型に整形する)
$value = mb_convert_kana( //全角数字を半角数字に変換
str_replace(" ", "", //半角スペース除去
str_replace(" ", "", //全角スペース除去
str_replace(",", "", //全角カンマ除去
strip_tags ( //HTMLタグを除去
mb_convert_encoding($value, "UTF-8", "SJIS" ))))), "a");
$sawakami[$key] = $value;
}
//日付処理(Unix タイムスタンプに変換)
$sawakami[updated_date] =
strtotime(str_replace("年", "/",
str_replace("月", "/",
str_replace("日現在", " 17:30",
$sawakami[updated_date]))));
//取得した各情報を、浮動小数点数型および文字列型に変換して格納する。
settype($sawakami[base_value], "float"); //基準価格
settype($sawakami[gyrations], "float"); //前日比
settype($sawakami[total_net_assets], "float"); //純資産総額
settype($sawakami[updated_date], "integer"); //情報更新日時
}
?>
整備でき次第、公開します。
--その場で自動生成される、万年カレンダーです。おしゃれで、かわいいものを目指します。
| Thursday, 2008 | ||||||
|---|---|---|---|---|---|---|
| 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) | Wed, 30 Apr 2008 00:00:00 +0900 |
|---|---|
| 予定時間 (Japanese) | 2008 年 4 月 30 日 0 時 00 分 00 秒 |
| 予定時間 (Unix Timestamp) | 1209481200秒 |
| 現在時間 (RFC 822) | Sat, 10 May 2008 04:33:14 +0900 |
| 現在時間 (Japanese) | 2008 年 5 月 10 日 4 時 33 分 14 秒 |
| 現在時間 (Unix Timestamp) | 1210361594秒 |
| 予定時間まであと | -880,394 秒 |
| 予定時間まであと | -14,674 分 |
| 予定時間まであと | -245 時間 |
| 予定時間まであと | -11 日 |
| 予定時間まであと | -1 年 |
| 予定時間まであと | -1 世紀 |
| - | -4,000 |