つやつや
gajapaのサービス
FONサーチ
カテゴリー
新しい記事
最近のコメント
最近のトラックバック
アーカイブ
リンク
OTHER

2008,04,06, Sunday
ドコモのiモードでは、今までユーザーを特定しようとすると、「携帯電話情報通知」の画面で「はい」を選択しなくてはならなかったですが、URLに「?guid=ON」を加える事で、通知画面を出さずにユニークユーザーが分かるようになったようです。

参考:重要なお知らせ : 『iモードID』の提供開始について | お知らせ | NTTドコモ
仕様:作ろうiモードコンテンツ:iモードセンタの各種情報 | サービス・機能 | NTTドコモ

取得方法は簡単です。サクっと書いた適当な例がこちらです。
guid.php
<?php
$guid = $_SERVER["HTTP_X_DCMGUID"];
echo '<html>';
echo 'iモードID=' . $guid . '<br><br>';
echo '<a href="http://blog.gajapa.jp/example/guid.php?guid=ON">iモードIDを取得</a>';
echo '</html>';
?>


これで、携帯サイトのアクセスログ問題は解決する糸口が出てきましたが、全ページに?guid=ONを付けないとならないなど、改造がめんどくさそうです。


| 携帯サイト構築:DoCoMo | comments (0) | trackback (13190) |
2008,01,06, Sunday
FOMAのオープンiエリアで、緯度経度を取得できるようになりましたが(参考:オープンiエリアで緯度経度が取得可能に!)、具体的にどの場所を返すのかは不明です。
そこで、検証すると、以下の事がわかりました。
・AUの簡易位置情報サービスよりは、精度が良い
・携帯電話アンテナの基地局の位置では無いようだ??

検証方法は、以下の方法です。
・電車に乗り、移動中にドコモFOMAとAUで位置情報取得を繰り返す。
・位置情報取得を繰り返すのは、約20秒ごと
・ドコモとAUの携帯で、同じタイミングで位置情報取得をする。
・区間は、JR二ノ宮からJR湯河原間。
・そこで得られた位置情報を地図に表示してみる。

FOMAオープンiエリア
ちょっと分かりにくいですが、二ノ宮駅から湯河原までJR東海道線上を移動しました。
地図を見ると、ドコモの方が細かく位置が取得できている事が分かります。
真鶴町に入ると、山が多くトンネルもあるので、ドコモの場合でも遠くの場所を表示されているようです。
ドコモで国府津駅付近・真鶴町あたりで、海の上を示しているところがあります。海の上にはアンテナ基地局はないと思われるので、計算で出しているのかなあ?

まあ、この件は、まだ要検証ですね。


| 携帯サイト構築:DoCoMo | comments (0) | trackback (448) |
2007,12,18, Tuesday
ここでもいいましたが、使いづらかったオープンiエリアでしたが、
緯度経度の値が取得できるようになりました。

概要は以下のようです。
・GPSに比べると誤差は大きいが、近くの緯度経度の値を取得できる。(AUで言うところの簡易位置情報のようなもの!?)
・今までのiエリアのような「情報提供者に送信しますか?」ページが表示される。
・今までの505区域のエリアも、変わらず提供される
・緯度経度が指し示す位置は具体的にどこなのかは、説明書からはハッキリしない。
・FOMAのみ対応

やっとですね。これで使う気になりました。うれしい限りです。

3G携帯は原則GPS機能搭載へ」という話もありますが、すぐに全ての携帯にGPSが付くとは考えられないので、しばらくの間、使用価値はありそうです。

iarea2.php
<?php
echo '<html>';
echo '<a href="http://w1m.docomo.ne.jp/cp/iarea?ecode=OPENAREACODE&msn=OPENAREAKEY&nl=http://xxxx.xxxx/iarea2.php&arg1=aaa%3d123&arg2=bbb%3d4566&posinfo=1">open i area</a><br>';
echo 'ACTN='.$_POST['ACTN'].'<br>';
echo 'AREACODE='.$_POST['AREACODE'].'<br>';
echo 'LAT='.$_POST['LAT'].'<br>';
echo 'LON='.$_POST['LON'].'<br>';
echo 'GEO='.$_POST['GEO'].'<br>';
echo 'XACC='.$_POST['XACC'].'<br>';
echo 'aaa='.$_POST['aaa'].'<br>';
echo 'bbb='.$_POST['bbb'].'<br>';
echo '</html>';
?>


●エリアの説明はこちらから
オープンiエリアサービスの概要

関連記事:FOMA オープンiエリアの位置情報を検証


| 携帯サイト構築:DoCoMo | comments (0) | trackback (8727) |
2007,12,02, Sunday
オープンiエリアのエリア分けは、ドコモの独自の区分けになっています。
その区分けに使用されているのが、総務省統計局の「地域メッシュの区分方法」ですが、
このコードも独特の方法であり、使いにくいものです。

このメッシュコードを使いやすい緯度経度に変換するファンクションを作りました。
メッシュコードをファンクションに入れると、それに対応した緯度経度の範囲を返します。

このファンクションは、ドコモのオープンiエリアページの「iエリアデータファイル」内のメッシュコードに使用します。


これだけGPSが一般的になって来ているのに、今更iエリアという感もありますが、
ドコモの携帯ではGPSがついていないものも、まだまだ有るんで。

mesh.php
<?php

$Mesh = "503085937"; //メッシュコード

list($latmin,$lonmin,$latmax,$lonmax) = fMeshToLatLon($Mesh);

echo "MeshCode = " . $Mesh . "<br>";
echo "SouthWest Lat = ".$latmin." Lon = ".$lonmin."<br>";
echo "NorthEast Lat = ".$latmax." Lon = ".$lonmax."<br>";


function fMeshToLatLon($Mesh){

    if(strlen($Mesh) >= 4){    //1次メッシュ
        $v = substr($Mesh, 0, 2) * 3600 / 1.5;
        $d = $v / 3600;
        $r = floor($d);
        $z = ($d - $r) * 3 / 5 / 6 * 10;
        $lat = $r + $z;
        $lon = substr($Mesh, 2, 2) + 100;
        
        $latMargin = 40 / 60;
        $lonMargin = 1;
        
    }else{
        $Mesh = "";
    }

    if(substr($Mesh, 4, 2) != ""){    //2次メッシュ
        $lat = $lat + substr($Mesh, 4, 1) * 5 / 60;
        $lon = $lon + substr($Mesh, 5, 1) * 1 / 8;

        $latMargin = 5 / 60;
        $lonMargin = 1 / 8;
    }

    if(substr($Mesh, 6, 1) != ""){    //3次メッシュ
        $latMargin = 5 / 60 / 2;
        $lonMargin = 60 / 8 / 60 / 2;
        switch (substr($Mesh, 6, 1)){
            case "0":
                $lat = $lat;
                $lon = $lon;
            break;
            case "1":
                $lat = $lat;
                $lon = $lon + (60 / 8 / 60 / 2);
            break;
            case "2":
                $lat = $lat + (5 / 60 / 2);
                $lon = $lon;
            break;
            case "3":
                $lat = $lat + (5 / 60 / 2);
                $lon = $lon + (60 / 8 / 60 / 2);
            break;
            default:
        }
    }

    if(substr($Mesh, 7, 1) != ""){    //4次メッシュ
        $latMargin = 5 / 60 / 4;
        $lonMargin = 60 / 8 / 60 / 4;
        switch (substr($Mesh, 7, 1)){
            case "0":
                $lat = $lat;
                $lon = $lon;
            break;
            case "1":
                $lat = $lat;
                $lon = $lon + (60 / 8 / 60 / 4);
            break;
            case "2":
                $lat = $lat + (5 / 60 / 4);
                $lon = $lon;
            break;
            case "3":
                $lat = $lat + (5 / 60 / 4);
                $lon = $lon + (60 / 8 / 60 / 4);
            break;
            default:
        }
    }

    if(substr($Mesh, 8, 1) != ""){    //5次メッシュ
        $latMargin = 5 / 60 / 8;
        $lonMargin = 60 / 8 / 60 / 8;
        switch (substr($Mesh, 8, 1)){
            case "0":
                $lat = $lat;
                $lon = $lon;
            break;
            case "1":
                $lat = $lat;
                $lon = $lon + (60 / 8 / 60 / 8);
            break;
            case "2":
                $lat = $lat + (5 / 60 / 8);
                $lon = $lon;
            break;
            case "3":
                $lat = $lat + (5 / 60 / 8);
                $lon = $lon + (60 / 8 / 60 / 8);
            break;
            default:
        }
    }

    if(substr($Mesh, 9, 1) != ""){    //6次メッシュ
        $latMargin = 5 / 60 / 16;
        $lonMargin = 60 / 8 / 60 / 16;
        switch (substr($Mesh, 9, 1)){
            case "0":
                $lat = $lat;
                $lon = $lon;
            break;
            case "1":
                $lat = $lat;
                $lon = $lon + (60 / 8 / 60 / 16);
            break;
            case "2":
                $lat = $lat + (5 / 60 / 16);
                $lon = $lon;
            break;
            case "3":
                $lat = $lat + (5 / 60 / 16);
                $lon = $lon + (60 / 8 / 60 / 16);
            break;
            default:
        }
    }

    if(substr($Mesh, 10, 1) != ""){    //7次メッシュ
        $latMargin = 5 / 60 / 32;
        $lonMargin = 60 / 8 / 60 / 32;
        switch (substr($Mesh, 10, 1)){
            case "0":
                $lat = $lat;
                $lon = $lon;
            break;
            case "1":
                $lat = $lat;
                $lon = $lon + (60 / 8 / 60 / 32);
            break;
            case "2":
                $lat = $lat + (5 / 60 / 32);
                $lon = $lon;
            break;
            case "3":
                $lat = $lat + (5 / 60 / 32);
                $lon = $lon + (60 / 8 / 60 / 32);
            break;
            default:
        }
    }
    return array($lat,$lon,$lat + $latMargin,$lon + $lonMargin);
}

?>


以下は、「iエリアデータファイル」内の「iarea00201.txt」(小樽/後志)を、表示した例です。




| 携帯サイト構築:DoCoMo | comments (0) | trackback (7192) |
2007,10,12, Friday
携帯電話固有の番号・FOMAカード番号の情報を取得する。

icc.php
<html>
<font size=2>ユーザーエージェントテスト</font>
<?php
    echo $_SERVER["HTTP_USER_AGENT"];
?>
<A href="icc.php" utn>端末番号</A>
</html>


上を元に、ちゃんと、プログラムを作ってみました。ドコモのFOMA・MOVA対応です。

機種名と、機種固有の番号を取得します。
FOMAの場合は、機体番号(ser)とFOMAカード番号(icc)が取得できますが、
通常個人を特定するページ(ログインなど)では、FOMAカード番号を使います。
そうすれば、機体を変えてもFOMAカードを変えなければ、ユーザーが再登録などをする必要がありません。
また、FOMAカード番号は、「iccxxxxxxxxxxxxxxxxxxxF」ですが、最後のFに関しては、機体によって小文字になったりするので、無視した方がよいと思われます。

MOVAは機体番号しかないので、それを使います。

icc2.php
<html>
<center>端末番号取得</center>
<hr>
<?php
$UA = $_SERVER["HTTP_USER_AGENT"];

if(ereg("DoCoMo/2.0", $UA)){
    //機種名取得FOMA
    preg_match("/DoCoMo\/2\.0 (.+?)\(c.+/",$UA, $matches);
    $model = $matches[1];
    //機体番号取得FOMA
    preg_match("/.+;(ser[0-9]+);icc.+/",$UA, $matches);
    $serNo = $matches[1];
    //FOMA番号取得FOMA
    preg_match("/.+;(icc[0-9]+)[F|f]?\)/",$UA, $matches);
    $uid = $matches[1];
}
if(ereg("DoCoMo/1.0", $UA)){
    //機種名取得MOVA iモードHTML3.0以降
    preg_match("/DoCoMo\/1\.0\/(.+?)\/.+/",$UA, $matches);
    $model = $matches[1];
    if($model == ""){
    //機種名取得MOVA iモードHTML2.0以前
        preg_match("/DoCoMo\/1\.0\/(.+?)$/",$UA, $matches);
        $model = $matches[1];
    }
    //機体番号取得MOVA
    preg_match("/DoCoMo\/1\.0\/.+\/(ser.+)/",$UA, $matches);
    $uid = $matches[1];
}
echo '機種='.$model.'<br>';
echo '端末製造番号='.$serNo.'<br>';
echo 'FOMAカード製造番号='.$uid.'<br>';
?>
<br>
<A href="./icc2.php" utn>端末番号表示</A>
</html>



| 携帯サイト構築:DoCoMo | comments (0) | trackback (x) |

PAGE TOP ↑


Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively in Unknown on line 0