FOMAオープンiエリアの位置情報取得機能を試してみました
    このエントリをはてなブックマークに登録

2007/12/18 火曜日 matsui Posted in DoCoMo 3 Comments »

12/17付けで、FOMAのオープンiエリアに位置情報(緯度経度の座標)を取得できる機能が追加されたようなので、早速試してみました。

オープンiエリアについての説明やPDF資料はこちらにあります。
→ 作ろうiモードコンテンツ オープンiエリア [nttdocomo.co.jp]

戻り先URLをパラメータとして設定し、オープンiエリアの指定URLにGETかPOSTで投げてやれば、座標が取得できるという簡単なインターフェイスとなっています。

「posinfo」が今回新たに追加されたパラメータです。
「arg1」「arg2」のように任意のパラメータを追加することもできます。

 

GETを使った場合のサンプル

<?php
// 戻り先として、このPHPファイルを指定
$ret_url = 'http://example.jp/example.php';
$arg1 = 'aaa=123';
$arg2 = 'bbb=xyz';

// オープンiエリアのURL
$url = 'http://w1m.docomo.ne.jp/cp/iarea?'
	. 'ecode=OPENAREACODE'
	. '&msn=OPENAREAKEY'
	. '&nl=' . urlencode($ret_url)
	. '&arg1=' . urlencode($arg1)
	. '&arg2=' . urlencode($arg2)
	. '&posinfo=1';

echo '<a href="' . $url . '">iエリア接続</a><br>';

if ($_POST['LAT']) {
	echo 'LAT=' . htmlspecialchars($_POST['LAT']) . '<br>';
}
if ($_POST['LON']) {
	echo 'LON=' . htmlspecialchars($_POST['LON']) . '<br>';
}
?>

 

POSTを使った場合のサンプル

<form method="post" action="http://w1m.docomo.ne.jp/cp/iarea">
<input type="hidden" name="ecode" value="OPENAREACODE">
<input type="hidden" name="msn" value="OPENAREAKEY">
<input type="hidden" name="nl" value="http://example.jp/example.php">
<input type="hidden" name="arg1" value="aaa=123">
<input type="hidden" name="arg2" value="bbb=xyz">
<input type="hidden" name="posinfo" value="1">
<input type="submit" name="submit" value="iarea">

 

iエリアのページを移動すると、次のような画面が表示されます。
OKを押すと指定した戻り先URLに対し、POSTで座標などのデータが送られてきます。
20071218_iarea.jpg

気になる精度ですが、想像していたよりもずっと良く、試してみた限りでは誤差200~300mといったところでした。
ただ、これは基地局の座標を元にしているため、アンテナの数や電波状況などの環境に大きく依存すると思われます。

またケータイに内蔵されているGPSでの測定に比べて、圧倒的にレスポンスが良いのも特徴です。
これは使える機能かもしれません。

 

関連:



iモード絵文字をUnicode形式からSJIS形式に逆変換するPHPサンプル
    このエントリをはてなブックマークに登録

2007/11/24 土曜日 matsui Posted in DoCoMo, PHP No Comments »

昨日ご紹介した「iモード絵文字をSJIS形式からUnicode形式に変換するPHPサンプル」に続き、Unicode形式からSJIS形式への逆変換のサンプルPHPをご紹介します。

このような変換を施すことで、バイト数を削減できますし、i絵文字などがインストールされているPCでは絵文字を表示できるため、管理画面などでの利用に便利です。

 

$str = '絵文字コード&#xE6D2;を含む文字列';

// iモード拡張絵文字(Unicode形式)を検索
$pattern = '/&#x(E6[3-F][0-9A-F]|E7[0-5][0-9A-F]);/';
preg_match_all($pattern, $str, $arr); // $arr[0]に対象絵文字が格納される

// 絵文字に置換
$rep_arr = array();
foreach($arr[0] as $value) {
	$hex = substr($value, 3, 4);
	$dec = hexdec($hex);
	if (58942 <= $dec AND $dec <= 59035) {
		// 絵文字No.1 ~ No.94
		$dec = $dec + 4705;
	} elseif (59099 <= $dec AND $dec <= 59223) {
		// 絵文字No.118 ~ No.166、拡1~拡76
		$dec = $dec + 4773;
	} elseif ((59036 <= $dec AND $dec <= 59045) OR
		(59052 <= $dec AND $dec <= 59054) OR
		(59057 <= $dec AND $dec <= 59059) OR
		(59063 <= $dec AND $dec <= 59066) OR
		(59086 <= $dec AND $dec <= 59098)) {
		// 絵文字No.95 ~ No.117、No.167 ~ No.176
		$dec = $dec + 4772;
	} else {
		continue;
	}
	$rep_arr[$value] = pack('n', $dec);
}

// 置換処理
$str = strtr($str, $rep_arr);

// 出力
echo $str;

※ソースはSJISで記述してください。

実行例:
iemoji_conv2.gif

 

関連:



iモード絵文字をSJIS形式からUnicode形式に変換するPHPサンプル
    このエントリをはてなブックマークに登録

2007/11/23 金曜日 matsui Posted in DoCoMo, PHP 3 Comments »

今回は、iモード絵文字をSJISバイナリ形式から、Unicodeテキスト入力(&#xxxx;)形式に変換するPHPのサンプルコードをご紹介します。

文字コード変換や、DBに格納する際など、SJISバイナリ形式では、文字化けなどの問題が起こるケースが多々あります。
そんな時には下記のコードでUnicodeテキスト入力形式に変換することで、データがぐっと扱いやすくなります。

 

$str = '[SJISバイナリ絵文字コードを含む文字列]';

// 文字コードを設定
mb_internal_encoding('SJIS');
mb_regex_encoding('SJIS');

// 正規表現を定義
$sjis  = '[\\x81-\\x9F\\xE0-\\xF7\\xFA-\\xFC][\\x40-\\x7E\\x80-\\xFC]
|[\\x00-\\x7F]|[\\xA1-\\xDF]';		// 実際には1行で入力
$emoji = '[\\xF8\\xF9][\\x40-\\x7E\\x80-\\xFC]';
$pattern = "/\\G((?:$sjis)*)(?:($emoji))/";

// 絵文字を検索
preg_match_all($pattern, $str, $arr); // $arr[2]に対象絵文字が格納される

// 絵文字を置換
$rep_arr = array();
foreach($arr[2] as $value) {
	$emoji_cd = unpack("C*", $value);
	$hex =  dechex($emoji_cd[1]) . dechex($emoji_cd[2]);
	$dec = hexdec($hex);
	if (63647 <= $dec AND $dec <= 63740) {
		// 絵文字No.1 ~ No.94
		$dec = $dec - 4705;
	} elseif (63872 <= $dec AND $dec <= 63996) {
		// 絵文字No.118 ~ No.166、拡1~拡76
		$dec = $dec - 4773;
	} elseif ((63808 <= $dec AND $dec <= 63817) OR
		(63824 <= $dec AND $dec <= 63826) OR
		(63829 <= $dec AND $dec <= 63831) OR
		(63835 <= $dec AND $dec <= 63838) OR
		(63858 <= $dec AND $dec <= 63870)) {
		// 絵文字No.95 ~ No.117、No.167 ~ No.176
		$dec = $dec - 4772;
	} else {
		continue;
	}
	$replacement = '&#' . strtoupper(dechex($dec)) . ';';
	$str = mb_ereg_replace($value, $replacement, $str);
}

// 置換処理
$str = strtr($str, $rep_arr);

// 出力
echo $str;


※ソースはSJISで記述してください
※表示の都合上改行を入れている行があることにご注意ください

実行例:
iemoji_conv1.gif

逆変換(Unicode形式→SJIS形式)のサンプルは、また後日ご紹介させていただきます。

追記:
逆変換の記事も書きました。下記リンクをご参照ください。

 

関連:



ケータイに絵文字入りメールを送信するには(iモード編)
    このエントリをはてなブックマークに登録

2007/11/15 木曜日 matsui Posted in DoCoMo, PHP 1 Comment »

プログラム側からケータイに絵文字入りのメールを送りたいケースはよくありますが、通常の方法では文字化けしてしまい送信することができません。

キャリア毎に絵文字の扱いが違うため、それぞれ違うプログラムで対処する必要があります。
今回はiモード用のサンプルコードをご紹介します。

 

サンプルコード(iモード用)

<?php
// iモードに絵文字入りメールを送るサンプル

$to = '[iモードのアドレス]@docomo.ne.jp';
$from = 'example@example.jp';

$subject = '[iの絵文字]絵文字入り[キラキラの絵文字]題名デス[ハートの絵文字]';
$body = '[iの絵文字]モードの絵文字入り[キラキラの絵文字]の[メールの絵文字]本文デス。';

// MIMEエンコーディングを行う
$subject = "=?shift_jis?B?" . base64_encode($subject) . "?=";
$body = base64_encode($body);

// ヘッダを作成
$headers = "From: " . $from . "\\n";
$headers .= "MIME-Version: 1.0\\n";
$headers .= "Content-Type: text/plain; charset=Shift-JIS\\n";
$headers .= "Content-Transfer-Encoding: base64";

// メールを送信
$res = mail($to, $subject, $body, $headers);

// 結果を取得
if ($res) {
	echo "OK\\n";
} else {
	echo "NG\\n";
}
?>

※ソースコードはSJISで記述しています

絵文字はPC上からは表示できないため、「[ハートの絵文字]」のように表現してあります。
実際には「i絵文字」などのツールを使って、SJIS形式の絵文字を直接入力してください。

Content-TypeをShift-JISとすることや、Subjectをshift_jisでエンコードすることがポイントのようです。
こうしておけば、絵文字や半角カナも問題なく送信されるようです。

emojimail_i.jpg

 

関連:



ドコモのなりすましメール対策を早速検証してみた
    このエントリをはてなブックマークに登録

2007/11/1 木曜日 matsui Posted in DoCoMo, サーバ No Comments »

ドコモ端末で2007/11/1から設定可能となった、新たな迷惑メール防止機能の「送信ドメイン認証(なりすましメール対策)」を、早速検証してみました。

送信ドメイン認証については過去の記事をご覧下さい。
→  ドコモの送信ドメイン認証への対応について[ke-tai.org]

設定は、次の場所から行えます。

「iメニュー」→「[8]料金&お申込・設定」→「[3]かんたんメール設定」→「詳細な設定(メール設定)」

narisumasi01
続いて、迷惑メール対策を押します。

narisumasi02
なりすましメールに対する設定が増えています。
初期値は「拒否しない」になっています。まずは一安心です。

narisumasi03
なりすましメールに対する説明はこんな感じです。

narisumasi04
送信ドメイン認証に関する説明も記載されています。
一般の方には絶対わからないでしょうね。
 
narisumasi05
実験のため「拒否する」にしてみました。

試しにSPFレコードが設定されていないドメインからメールを送信してみると、確かに送信されないようです。

具体的には、

Remote host said: 550 Unknown user [アカウント名]@docomo.ne.jp

という、550エラーが返ります。
このあたりの挙動は、今までの迷惑メール対策と同様ですね。

 

関連: