なんかできたよー。

Web系Tipsを適当につづるBlog.

PHPを使ってヤマトの荷物お問い合わせシステムの配達状況を一括で抜き出す

 

PHPよくわかんないけど、配達状況を一括で調べた時に書いたコード。

$post_value にカンマ区切りで伝票番号を入れるようにして

伝票番号を10件ごとに配達状況をとってきてます。

出力結果

3057-0638-8120,12/26,配達完了
3277-7551-6154,01/19,配達完了
3277-7568-3325,01/24,配達完了

PHPコード

<?php

header("Content-type:text/html;charset=UTF-8");
mb_language('Japanese');

// POST先URL
$url = "http://toi.kuronekoyamato.co.jp/cgi-bin/tneko";

// 伝票番号サンプル
$post_value = '327775683325,327775516154,305706388120';
$post_value_array = explode(",", $post_value);
$count = count($post_value_array);

// 初期化
$num_array = array();
$get_value = '';

while ($count--) {

	$iii = $count % 10;
	array_push($num_array, $post_value_array[$count]);

	if (!($iii)) {

		$array = array(
			"number01" => $num_array[0],
			"number02" => $num_array[1],
			"number03" => $num_array[2],
			"number04" => $num_array[3],
			"number05" => $num_array[4],
			"number06" => $num_array[5],
			"number07" => $num_array[6],
			"number08" => $num_array[7],
			"number09" => $num_array[8],
			"number10" => $num_array[9]
		);

		$http_build = http_build_query($array);
		// オプション
		$opts = array("http" => array("method" => "POST", "content" => $http_build));
		$scc = stream_context_create($opts);

		// 読み取り
		$get_html = mb_convert_encoding(file_get_contents($url, false, $scc), 'UTF-8', 'auto');

		// 抜き出し
		preg_match_all('/\(\'\ <td><font\ size=4><b>(.*?)<br><\/b><\/font><\/td>\'\)/', $get_html, $get_number);
		preg_match_all('/\(\'\ <td><font\ size=3>(\d+\/\d+)*<br><\/font><\/td>\'\)/', $get_html, $get_date);
		preg_match_all('/\(\'\ <td><font\ size=3>([^\d].*?)<br><\/font><\/td>\'\)/', $get_html, $get_status);

		for ($i = 0, $j = count($get_number[1]); $i < $j; $i++) {
			$get_value .= "{$get_number[1][$i]},{$get_date[1][$i]},{$get_status[1][$i]}\n";
		}
		// 初期化
		$num_array = array();
		// 10件ごとの待機時間
		sleep(5);
	}
}

echo $get_value;
?>