へぼいいいわけ このページをアンテナに追加 RSSフィード Twitter

2008年02月24日

php curlを使って2ちゃんねると高速通信

マッシュアップに必須!PHPで複数APIを同時に叩いて超高速化するサンプルに触発されて作ってみた。

ソース

<?php
// 初期化
$saba = 'yutori.2ch.net'; // サーバ名
$ita = 'news4vip'; // 板名
$sure = '123456789.dat'; // datファイル名
$logfile = './unkokko/123456789.dat'; // ローカルに保存してあるdatファイルのパス
$data = '';
$ch = curl_init();

// dat取得用header生成
$header[] = 'GET /'.$ita.'/dat/'.$sure.' HTTP/1.1';
$header[] = 'Host: '.$saba;
$header[] = 'User-Agent: Monazilla/1.00 (適当に何かを名乗る)';
if(file_exists($logfile)){
    $time = filemtime($logfile);
    $mod = date("r", $time - 3600 * 9);
    $byte = filesize($logfile);
    $header[] = 'If-Modified-Since: '.$mod;
    $header[] = 'Range: bytes='.$byte.'-';
} else {
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
}
$header[] = 'Connection: close';

// curlいろいろ
curl_setopt($ch, CURLOPT_URL, 'http://'.$saba.'/'.$ita.'/dat/'.$sure);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FILETIME, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_FILETIME, 1);
// dat取得
$data = curl_exec($ch);
// httpcode取得
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// Last-Modified取得
$mod  = curl_getinfo($ch, CURLINFO_FILETIME);
// Last-Modifiedをタイムスタンプに変換
$t = strtotime($mod);
if($t !== FALSE){
    $mod = $t;
}
// とりあえずerrorを取得
$error = curl_error($ch);
curl_close($ch);

echo $data;
?>

なんなのコレ?

2ちゃんねるのdatファイルをphpcurlを使って取得するものです。

差分取得に対応しています。

fsockopenを使った時と比べ2/3*1くらいの時間でdatを取得できる!

さっそくヽ(・∀・)ノ●うんかー02に導入作業中です。

参考

追記

差分取得時もgzip圧縮転送を使ってしまっていたので修正。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/heiwaboke/20080224/1203846603