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);