My favorite tricks by PHP and JavaScript

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

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


動作サンプル
2010 年 9 月 3 日現在の価格
基準価額 (1万口あたり) 11,295
前日比 84
純資産総額(百万円) 214,031

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

ポートフォリオ

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

保有数量 385,295
損益分岐価格 (1万口あたり) 15,442.72
投資額 595,000
時価評価額 435,190
評価総合収益 -159,810
評価総合収益利率 -26.86%
ソースコード(価格取得の部)

 さわかみ投信の各種情報を $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; //さわかみ連想配列をグローバル変数宣言


//ファイルの取得と 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, 2010
SunMonTueWedThrFriSat
   1234
567891011
12131415161718
19202122232425
2627282930  
ソース

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

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

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

予定時間 (RFC 822)Fri, 01 Jan 2010 00:00:00 +0900
予定時間 (Japanese)2010 年 1 月 1 日 0 時 00 分 00 秒
予定時間 (Unix Timestamp)1262271600秒
現在時間 (RFC 822)Sat, 04 Sep 2010 04:52:09 +0900
現在時間 (Japanese)2010 年 9 月 4 日 4 時 52 分 09 秒
現在時間 (Unix Timestamp)1283543529秒
予定時間まであと-21,271,929 秒
予定時間まであと-354,533 分
予定時間まであと-5,909 時間
予定時間まであと-247 日
予定時間まであと-1 年
予定時間まであと-1 世紀
--89,818

緯度経度検出

 Google Map API の褌を借りて、地図上の緯度経度を測定します。

使い方
  1. 場所を入力して「地図を検索」するか、地図自体をドラックし、緯度経度を知りたい場所を地図の中心に持ってくる。
  2. 「緯度経度を取得」ボタンを押すと、地図上の中心における緯度経度が表示されます。