人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpの質問で、
外部サイトから一部の情報を抜き出して自分のサイトに表示させたいのですが
全体を取得する方法はfile_get_contentsというところまではわかったのですが
一部取得して表示するというのがわかりません。教えてください。
具体的には
http://www.jra.go.jp/JRADB/access5.html
こちらのサイトの
「1レース」から「413票」までのテーブルです。

よろしくお願いします。

●質問者: vfr6822
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● shell631
●100ポイント ベストアンサー

変数 $tableに目的のHTML文が入るようになっています。
JRAのトップページからアクセスしないと目的のページに行き着かないので、プログラムの実行に少し時間がかかります。

<?php
// JRAアクセス専用
function httpJRA($path, $cname) {
 $host = 'www.jra.go.jp';
 $cname = 'cname=' . urlencode($cname);
 $ln = strlen($cname);

 $request .= "POST {$path} HTTP/1.1\r\n";
 $request .= "Host: www.jra.go.jp\r\n";
 $request .= "User-Agent: Mozilla/5.0\r\n";
 $request .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
 $request .= "Accept-Language: ja,en-us;q=0.7,en;q=0.3\r\n";
 $request .= "Accept-Encoding: gzip, deflate\r\n";
 $request .= "Connection: keep-alive\r\n";
 $request .= "Referer: http://www.jra.go.jp/\r\n";
 $request .= "Cookie: style=null\r\n";
 $request .= "Content-Type: application/x-www-form-urlencoded\r\n";
 $request .= "Content-Length: {$ln}\r\n";
 $request .= "\r\n";
 $request .= "{$cname}\r\n";

 $fp = fsockopen($host, 80);
 if (!$fp) return FALSE;
 fputs($fp, $request);

 $response = "";
 while (1) {
 $str = fgets($fp);
 if (feof($fp) && ($str == FALSE)) break;
 $response .= $str;
 };
 fclose($fp);

 return $response;
}

//トップページ解析
function topJRA() {
 $infp = fopen('http://www.jra.go.jp', 'r');
 if ($infp == FALSE) return FALSE;
 $cname = '';
 while (! feof($infp)) {
 $str = trim(fgets($infp));
 $str = mb_convert_encoding($str, 'UTF-8', 'SJIS');
 if (preg_match("/doAction\(\'\/JRADB\/accessH\.html\',\'([0-9a-zA-Z\/]+)\'\)\">払戻金/iu", $str, $arr) > 0) {
 $cname = $arr[1];
 }
 }
 return $cname;
}

//払戻金ページ解析
function haraiJRA($cname) {
 $path = '/JRADB/accessH.html';
 $str = httpJRA($path, $cname);
 $str = mb_convert_encoding($str, 'UTF-8', 'SJIS');
 if ($str == FALSE) return FALSE;
 if (preg_match("/doAction\(\'\/JRADB\/access5\.html\',\'([0-9a-zA-Z\/]+)\'\)/iums", $str, $arr) > 0) {
 $cname = $arr[1];
 }
 return $cname;
}

//WIN5ページ解析
function win5JRA($cname) {
 $path = '/JRADB/access5.html';
 $buf = httpJRA($path, $cname);
 $buf = mb_convert_encoding($buf, 'UTF-8', 'SJIS');
 if ($buf == FALSE) return FALSE;
 $flag = FALSE;
 $str = strtok($buf, "\n");
 while ($str != FALSE) {
 if ($flag == FALSE) {
 if (preg_match("/bgcolor\=\"#D9D9B0\">\&nbsp;<\/th>/iu", $str) > 0) {
 $flag = TRUE;
 $res = "<tr>\n" . $str . "\n";
 }
 } else {
 if (preg_match("/bgcolor=\"#D9D9B0\">出走取消<br>競走除外<\/th>/iu", $str) > 0) {
 $flag = FALSE;
 break;
 } else {
 $res .= $str . "\n";
 }
 }
 $str = strtok("\n");
 }
 $ln = strlen($res);

 return substr($res, 0, $res - 5);
}

//メインプログラム
$cname = topJRA();
if ($cname == FALSE) {
 echo 'JRAのサイトに接続できません';
 exit(1);
}
$cname = haraiJRA($cname);
if ($cname == FALSE) {
 echo 'JRAのサイトに接続できません';
 exit(1);
}
$table = win5JRA($cname);
echo $table; //表の内容
?>
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ