1. <?php
    //取得対象となるURIを指定
    define (BASE_URI ,"http://fx.himawari-group.co.jp/price/blogparts.html");
    include('proxy.php');
    // proxyを利用する場合は$use_proxy = 1; しない場合は $use_proxy = 0; を指定
    $use_proxy = 0;
    $proxy_host = 'proxy.example.co.jp';
    $proxy_port = 8080;
    $no_proxy = array(
        'localhost',        // localhost 
        '127.0.0.0/8',      // loopback
    );
    function get_html($url){
        $rdata = http_request($url);
        $data = $rdata['data'];
        $data = mb_convert_encoding($data,"UTF-8", "auto");
        return ($data);
    }
    function dump_nodes_rate(tidyNode $node, &$urls = NULL) {
        $urls = (is_array($urls)) ? $urls : array();
        if(isset($node->id)) {
            // ここからが実際のスクレイピング処理と思ってよいでしょう。
            // 今回はTABLEのTDタグの中でCLASS="tdborder"の中身を取得したい。
            // なので、$node->id が TDタグだったら
            if( $node->id == TIDY_TAG_TD ){
                // 更に、そのタグのclassというアトリビュートがtdborderならば
                if (strpos($node->attribute['class'] ,"tdborder") === 0){
                    // 取得時に改行が入ることがあるので、改行を空文字に置換し、
                    // ひとまとめに配列$urls[]に入れてみる(各配列内の処理は後回し)
                    $urls[] = str_replace( array( chr(10) , chr(13) ),"",$node->child[0]->value);
                }
            }
        // ここまでが実際のスクレイピング処理と思ってよいでしょう。
        }
        // 更に子供のノードが存在すれば、再帰的にdump_nodes_rate()を繰り返す
        if($node->hasChildren()) {
            foreach($node->child as $c) {
                dump_nodes_rate($c, $urls);
            }
        }
        // 連想配列をリターン
        return $urls;
    }
    ?>
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8">
    <link href="style_rate.css" type="text/css" rel="stylesheet"> 
    <title>為替レート取得</title>
    </head>
    <body>
    <a href="./rate.php">HOME</a><br /><div align="center"><a href="http://fx.himawari-group.co.jp/service/blogparts.html" target="_blank">ひまわり証券株式会社 ブログパーツ FXレートウォッチャー</a>から為替レートを取得</div><hr />
    <div style="float:left;text-align:center">元データ<br /><iframe width="160px" height="540px" marginwidth="0" marginheight="0" hspace="0" vspace="0" scrolling="no" frameborder="0" src="http://fx.himawari-group.co.jp/price/blogparts.html"></iframe></div>
    <div style="text-align:center">
    <form action="rate.php" method="get">
    <input name="cmd" type="hidden" value="getrate" />
    <input type="submit" value="為替レート取得" />
    </form>
    <?php
    // ボタンが押されたら
    if($_GET['cmd']<>""){
        // 対象となるHTMLファイルを取得
        $html = get_html(BASE_URI);
        // TIDY関数前処理
        $config = array('indent' => TRUE,
                        'output-xhtml' => TRUE,
                        'wrap' => 200);
        // tidyでパース開始(tidyオブジェクトが作成される)
        $tidy = tidy_parse_string($html, $config, 'UTF8');
        $tidy->cleanRepair();
        // dump_nodes_rate()関数にtidyオブジェクトのbody部分を渡し、
        // 対象となる TD タグの内容を取得
        $rate = dump_nodes_rate($tidy->body());
        // 配列のはじめは現在時刻なので、$nowtimeに設定
        $nowtime = $rate[0];
        // 新規に配列作成(しなくても$rateのみでできそうだがとりあえず)
        $js = array();
        // 配列からはじめの要素を取り出す
        // はじめの要素とは$rate[0](現在の時刻)
        array_shift($rate);
        // これで、$rateの中身は、通貨ベア、現在値、前日比のみになった。
        // この3つのパターンの繰り返しになる。
        // 配列 $rateの要素を3で割った数だけ繰り返す
        for($i = 0; $i<count($rate)/3 ; $i++){
            // 通貨ベア取得
            $tuka = $rate[$i*3];
            // 現在値取得
            $val =  $rate[$i*3+1];
            // 前日比取得
            $deg =  $rate[$i*3+2];
            // 前日比が0でない場合は、
            // <span class="minus">▼0.29</span>などと表示されているので
            // $degが0でなければ、
            if ($deg!="0"){
                // <span class="minus">▼0.29</span>の「>」でexplodeする。
                $tmp0 = explode(">",$deg);
                // $tmp0[0] = <span class="minus"
                // $tmp0[1] = ▼0.29</span>
                // ▼0.29</span> の「<」でexplodeする。
                $tmp1 = explode("<",$tmp0[1]);
                // $tmp1[0] = ▼0.29
                // $tmp1[1] = /span>
                // 「▼」を「-」に置換
                $tmp1[0] = str_replace("▼","-",$tmp1[0]);
                // 「▲」を「+」に置換
                $tmp1[0] = str_replace("▲","+",$tmp1[0]);
                $deg = $tmp1[0];
            }
            // 配列に追加していく
            $js[] = array("tuka"=>$tuka , "val" =>$val , "deg"=>$deg);
        }
        // 結果表示
        echo '<table>';
        echo '<tr><td colspan="3" align="center">'.$nowtime.'</td></tr>';
        echo '<tr><th>通貨ペア</th><th>現在値</th><th>前日比</th></tr>'; 
        // 配列取り出し
        foreach($js as $item){
            echo '<tr><td>'.$item['tuka'].'</td><td>'.$item['val'].'</td><td>'.$item['deg'].'</td></tr>';
        }
        echo '</table>';
    }
    ?>
    </div>
    </body>
    </html>