絶品ゆどうふのタレ

ふと気づいたことを綴るだけのメモ

DoCoMoとSoftBankのサイトから絵文字データ表をスクレイピングするPHPスクリプトつづき

なんか、シンタックスハイライトがうまくいかないので別記事に分割。
元記事は
http://d.hatena.ne.jp/Yudoufu/20071028/1193530666
こっち。

docomo_emoji_scraping.php

<?php
// 必要な定数を定義

// 保存先
$save_filename = "docomo_emoji.php";

// 判定開始・終了判別用の文字列
$status_line = 'h3-c10a -->';

// フィルタリングしたい文字列の配列
$filter_strings = array(
'基本絵文字一覧',
'拡張絵文字一覧',
'No',
'イメージ',
'S-JISコード',
'Unicode',
'タイトル',
'',
'16進数',
'10進数',
);

// URLの共通部分の配列
$url_prefix = 'http://www.nttdocomo.co.jp/service/imode/make/content/pictograph/';
$url_postfix = '/index.html';

// URLのかわるところの配列 docomo...extention じゃなくてextensionだよ。
$page_array = array('basic', 'extention');

// スクレイピング先ページの文字コード
$to_encoding = "sjis-win";
// ソースコードの文字コード
$from_encoding = "UTF-8";

/////////////////////////////////

// 文字コード調整
$status_line = mb_convert_encoding($status_line, $to_encoding, $from_encoding);
foreach ($filter_strings as $key => $value) {
	$filter_strings[$key] = mb_convert_encoding($value, $to_encoding, $from_encoding);
}


foreach ($page_array as $number) {
	// データを配列で取得
	$url = $url_prefix . $number . $url_postfix;
	$htmldata = file($url);
	// 不要な行とタグを排除
	$record_flag = false;
	foreach ($htmldata as $line) {
		if (mb_strpos($line, $status_line) !== false) $record_flag = !$record_flag;
		if (!$record_flag) continue;
		$tmp = trim(strip_tags($line));
		if ($tmp != '0' && empty($tmp)) continue;
		if (in_array($tmp, $filter_strings)) continue;
		$scraping_data[] = $tmp;
	}
}

// 通し番号
$i = 0;

$modify_data[] = '<?php';
$modify_data[] = '// DoCoMo 絵文字データ配列';

foreach ($scraping_data as $key => $value) {
	switch($key % 6) {
		case 0:
			$i++;
			$tmp = mb_convert_encoding($value, $from_encoding, $to_encoding);
			if (strlen($tmp) != mb_strlen($tmp, $from_encoding)) {
				$tmp = mb_substr($tmp, 1, 10, $from_encoding);
				$val = 'E' . sprintf("%02d", $tmp);
			} else {
				$val = $value;
			}
			$a_name = 'number';
			break;
		case 1:
			$a_name = 'sjis-16';
			$val = $value;
			break;
		case 2:
			if ($value == '-') {
				$val = '';
			} else {
				$val = $value;
			}
			$a_name = 'sjis-10';
			break;
		case 3:
			$a_name = 'Unicode';
			$val = $value;
			break;
		case 4:
			$a_name = 'title';
			$val = mb_convert_encoding($value, $from_encoding, $to_encoding);
			break;
		case 5:
			$a_name = 'color';
			$val = mb_convert_encoding($value, $from_encoding, $to_encoding);
			break;
		default:
			break;
	}
	$modify_data[] = '$emoji[\'docomo\'][' . $i . '][\'' . $a_name . '\'] = \'' . $val . '\';';
}

$modify_data[] = '?>';
$save_data = implode("\n", $modify_data);

file_put_contents($save_filename, $save_data);