My favorite tricks by PHP

さわかみ投信基準価格スクリプト

 ぼくが定期預金代わりにやっている投資信託、さわかみ投信の基準価格を Web サイトから取得して、リアルタイムな値を各種計算するスクリプトです。


動作サンプル
2008 年 5 月 9 日現在の価格
基準価額 (1万口あたり) 15,207
前日比 -372
純資産総額(百万円) 235,053

 ↑ だいたいこんな情報を取得可能ですよ。

ポートフォリオ

 このスクリプトを使った計算例。たとえば 2005 年 6 月から1万円ずつ投資していたらどれくらい損益があるのかというシミュレーション。

保有数量 280,109
損益分岐価格 (1万口あたり) 17,493
投資額 490,000
時価評価額 425,962
評価総合収益 -64,038
評価総合収益利率 -13.07%
ソースコード(価格取得の部)

 さわかみ投信の各種情報を $sawakami[] 連想配列に格納します。このソースを実行後に関数を呼び出すことにより、各種計算が可能です。

$sawakami[base_value]
さわかみファンドの 10,000 口あたりの最新基準価格を float 型で返します。
$sawakami[gyrations]
さわかみファンド基準価格の前日比を float 型で返します。
$sawakami[total_net_assets]
さわかみファンド純資産総額を float 型で返します。
$sawakami[updated_date]
以上の情報の更新日時を Unix タイムスタンプ形式にて integer 型で返します。なお、更新時間は取得出来ないので、公式サイトでアナウンスされている、毎営業日の 17 時 30 分に固定してあります。。

<?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
SunMonTueWedThrFriSat
    123
45678910
11121314151617
18192021222324
25262728293031
ソース

 完成のめどが立ち次第、公開予定。

カウントダウン(開発中)

 指定した日時までの時間を逆算してくれるスクリプト。お誕生日までの時間を計ったりね。

予定時間 (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