SHOJI's Code
 仕事や趣味で書いた各種言語のプログラミングコード(エクセルVBA,PHP,C/C++/C#,JavaScript等)、その他雑記。
2017.08<<123456789101112131415161718192021222324252627282930>>2017.10
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

テレビでロト6の達人!みたいなことをやっていて、そこで言っていた法則が本当かちょっと調べてみようと思い、まず第1回からの当選履歴を取得しようと思ったのだが、500回以上もあり、とても手でいちいちカットアンドペーストなんかできない。

と、いうことでちょっと作ってみた。
initial.php
<?php
$no = 1;

$max = 0;
$data = array();
while (true) {

$file = sprintf("loto6%04d.html", $no);
echo "Parsing $file ...";

$url = "http://www.takarakuji.mizuhobank.co.jp/miniloto/$file";
$html = @file_get_contents($url);
if ($html===false) {
echo " not found.\r\n";
break;
}

echo "\r\n";

$html = str_replace('<span class="fc006633">', "", $html);
$html = str_replace('</span>', "", $html);

$html = preg_replace_callback('#<td class="txtAC vAM">([^<]+)</td>#', function($match) {

global $no;
global $idx;
global $data;
global $max;

if (preg_match("/^第([0-9]+)回$/", $match[1], $r)) {
$no = $r[1] - 0;
$data[$no] = array("no"=>$no, "date"=>"", "number"=>array());
echo "{$r[0]}:";

$idx = 0;
}
else if (preg_match("/^[0-9]+年[0-9]+月[0-9]+日/", $match[1], $r)) {
$data[$no]["date"] = $r[0];
echo " {$r[0]}";
}
else if (preg_match("/^[0-9][0-9]$/", $match[1], $r)) {
$data[$no]["number"][$idx++] = $r[0];

if ($idx>=7) {
if ($no>$max) $max = $no;
echo " - {$r[0]}\r\n";
}
else {
echo " {$r[0]}";
}
}
},$html);

$no++;
}

preg_match("/^([0-9]+)年([0-9]+)月[0-9]+日/", $data[$max]["date"], $r);
$y = $r[1] - 0;
$m = $r[2] - 0;

$max = 0;
while (true) {
$m++; if ($m>12) {$y++; $m=1;}

$file = sprintf("lt6-h%02d%02d.html", $y-1988, $m);
echo "Parsing $file ...";

$url = "http://www.takarakuji.mizuhobank.co.jp/miniloto/$file";
$html = @file_get_contents($url);
if ($html===false) {
echo " not found.\r\n";
break;
}
echo "\r\n";

$html = preg_replace('/ style="width: [0-9]+%;"/', "", $html);
$html = str_replace(' colspan="6"', "", $html);

$html = preg_replace_callback('#<t[hd] class="txtAC vAM">([^<]+)>/t[hd]>#', function($match) {

global $data;
global $no;
global $idx;
global $max;

if (preg_match("/^第([0-9]+)回$/", $match[1], $r)) {
$no = $r[1]-0;
$data[$no] = array("no"=>$no);
}
else if (preg_match("/^[0-9]+年[0-9]+月[0-9]+日$/", $match[1], $r)) {
$data[$no]["date"] = $r[0];
}
else if ($match[1]=="本数字") {
$idx = 0;
$data[$no]["number"] = array();
}
else if ($match[1]=="ボーナス数字") {
$idx = 6;
}
else if (preg_match("/[0-9][0-9]/", $match[1], $r)) {
$data[$no]["number"][$idx++] = $r[0];

if ($idx>=7) {
if ($no>$max) $max = $no;

echo "第".$data[$no]["no"]."回: ".$data[$no]["date"];
for ($i=0;$i<6;$i++) echo " ".$data[$no]["number"][$i];
echo " - ".$data[$no]["number"][6]."\r\n";
}
}


},$html);
}


echo "creating csv file...";
$fp = fopen(dirname(__file__)."/loto6.csv", "w");
for($no=1;$no<=$max;$no++) {
$line = "第".$data[$no]["no"]."回,".$data[$no]["date"];
for ($i=0;$i<7;$i++) $line.=",".$data[$no]["number"][$i];
$line.="\r\n";

fputs($fp, $line);
}
fclose($fp);
echo " done.";
?>


update.php
<?php
$ln = $rn = $max_no = 0;
$fp = fopen(dirname(__file__)."/loto6.csv", "r");
while (!feof($fp)) {

$line = fgets($fp);
if (preg_match('/^第([0-9]+)回,([0-9]+年[0-9]+月[0-9]+日),([0-9][0-9]),([0-9][0-9]),([0-9][0-9]),([0-9][0-9]),([0-9][0-9]),([0-9][0-9]),([0-9][0-9])/', $line, $r)) {
$no = $r[1]-0;
$data[$no] = array("no"=>$no, "date"=>$r[2]);
$data[$no]["number"] = array($r[3],$r[4],$r[5],$r[6],$r[7],$r[8],$r[9]);

$rn++;

if ($no>$max_no) $max_no = $no;
}
$ln++;
}
fclose($fp);

echo "$ln lines processed. $rn data read. max no=$max_no\r\n";


$max = 0;

$url = "http://www.takarakuji.mizuhobank.co.jp/miniloto/lt6-new.html";
$html = @file_get_contents($url);
$html = preg_replace('/ style="width: [0-9]+%;"/', "", $html);
$html = str_replace(' colspan="6"', "", $html);

$html = preg_replace_callback('#<t[hd] class="txtAC vAM">([^<]+)</t[hd]>#', function($match) {

global $data;
global $no;
global $idx;
global $max;

if (preg_match("/^第([0-9]+)回$/", $match[1], $r)) {
$no = $r[1]-0;
$data[$no] = array("no"=>$no);
}
else if (preg_match("/^[0-9]+年[0-9]+月[0-9]+日$/", $match[1], $r)) {
$data[$no]["date"] = $r[0];
}
else if ($match[1]=="本数字") {
$idx = 0;
$data[$no]["number"] = array();
}
else if ($match[1]=="ボーナス数字") {
$idx = 6;
}
else if (preg_match("/[0-9][0-9]/", $match[1], $r)) {
$data[$no]["number"][$idx++] = $r[0];

if ($idx>=7) {
if ($no>$max) $max = $no;

echo "第".$data[$no]["no"]."回: ".$data[$no]["date"];
for ($i=0;$i<6;$i++) echo " ".$data[$no]["number"][$i];
echo " - ".$data[$no]["number"][6]."\r\n";
}
}


},$html);


$fp = fopen(dirname(__file__)."/loto6.csv", "a");
for ($no=$max_no+1;$no<=$max;$no++) {
fputs($fp, "第".$data[$no]["no"]."回,".$data[$no]["date"]);
for ($i=0;$i<7;$i++) fputs($fp, ",".$data[$no]["number"][$i]);
fputs($fp, "\r\n");

echo "第{$no}回 appended.\r\n";
}
fclose($fp);
?>


PHPだが実行はコマンドラインで行う。
initial.phpが第1回からの等線履歴を取得し、loto6.csvに保存。update.phpはロト6のトップページを見て追加していくものである。
無理矢理取得しているので、ちょっとサイトのデザインが変わってしまったらもう使えないが、まぁ、今のうちだけ。

テーマ:PHP - ジャンル:コンピュータ
コメント
この記事へのコメント
コメントを投稿する

管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004-2006 SHOJI, Powered By FC2ブログ all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。