ひとりあそび協会でタグ「php」が付けられているもの
Tポイントの残りが少なくなったので、10,000ポイント(=円)を補充した。これが反映されれば、またしばらくの間現金を使わずにブックオフとファミリーマートで買い物が出来る「Tポイント生活」をおくれる予定(参考:2月に書いたこの記事)。
そしてそのTポイントの元になる楽天ポイントを稼ぐため、楽天アフィリエイト用スクリプトの改造計画を進行中。PHP の解説書を片手に試行錯誤を繰り返し、とても人には見せられない滅茶苦茶なコードを組み込んで今こんな感じになっている。
テンプレートや CSS は作り出すとやたら時間がかかるのでいじりたい気持ちをグッと堪え、骨格の部分を中心にこれまでアイデア手帳に書き溜めてきた案を盛り込んでみた。案自体は1~2年前からのものあって、しかしこれまで何度かチャレンジしたものの PHP の仕組みがわからなくて断念してきたのだが、時間を空けて挑戦した今回ようやく実現できたので嬉しい。
追加・変更点は、ページの擬似階層リンクの変更、ページ送り部分の表示方法(PEAR 自体を改造)、一覧の表示方法切り替えをフォームからリンクへ変更、一覧でも商品説明を表示、個別商品のリンクに商品名を追加、商品画像が無いときに「画像なし」アナウンス画像を表示、表示商品と同じジャンルの商品一覧リンク、feed 表示、ヘッダによる転送…かな。どこをどういじったのか、もうわからなくなってきた。
とりあえず注意点というか自分用の備忘録として(1)urlencode する際に「/」(半角スラッシュ)「#」(半角シャープ)は2度エンコードしないとエラーが出る、(2)feed を出力するときはヘッダでも xml であることを宣言する、という2点は重要なので覚えておきたい。
んでせっかく頑張って作ったのに、相互リンクスクリプトとして当てにしていた linkapi が land.to サーバだと謎のサーバエラーが出て使えないという状況は変わらず。困った。
さてさて。この「現金を使わないTポイント生活作戦」の要である Tポイントカードのキャンペーンは明後日の 3/31 で終わってしまう。すでに TSUTAYA やブックオフなどで Tポイントカードを作っているのにまだネット登録していない人は、急いでこのリンクから登録すべし。当サイトからの紹介ということで、50ポイント+20ポイントの計70ポイントを付与されます。
1ヶ月前にまぐまぐのメールマガジン発行許可が下りて以来ずっと放置してきたが、あまりにも放置しっぱなしだと許可事態を取り消されてしまうのでこの1か月分のサマリーをまとめて記事を作成し 2/26 0時に発行するよう予約をした。
で、記事内に無料テンプレート素材.comサイト内のURL を貼るのだけれど、日本語をurlエンコードしたアドレスなので非常に長い文字列になってしまう。そこでメルマガ用URL短縮・リダイレクトphpスクリプトを作った。
以下をテキストファイルにコピペし、url を自分のサイトの意図したページに書き換えて mail.php と名前をつけて保存すればok。 http://自分のサイト/mail.php?p=1 などにアクセスすると、設定したページにリダイレクト(転送)される。「p=1」が「case 1:」、「p=2」が「case 2:」…という具合に対応している。設定した数字以外にアクセスした場合は、一番下の default に設定したページへリダイレクトされる。
<?php
header("HTTP/1.1 301 Moved Permanently");
switch ($_GET['p']){
case 1:
header("Location: http://自分のサイト/ページ1.html");
break;
case 2:
header("Location: http://自分のサイト/ページ2.html");
break;
case 3:
header("Location: http://自分のサイト/ページ3.html");
break;
case 4:
header("Location: http://自分のサイト/ページ4.html");
break;
default:
header("Location: http://自分のサイト/");
}
?>
見てわかるとおり、とくに難しいことはやっていない。
以前からステップメールという仕組みに興味があって、無料で利用できるサービスを比較した中ではオートステップメールが一番便利そうだったので試しに登録してみた。これがなかなか面白い。
それでちょっといじっている最中に、このステップメール登録の流れの中に利用者ごとのパスワードの発行を組み込めたら何か面白いことに使えるのではないかと思いついた。幸いなことにオートステップメールの場合は、ステップメールの登録フォームを自分のサイトに設置することが出来る。そこに組み込む、というか割り込むことを想定した実験をしてみた。
やることは簡単で、元々こうなっているのを
<form action="http://オートステップメールの登録ページ" method="post">
このように自分のサーバに飛ばした上で
<form action="http://自分のサーバのphpファイル" method="post">
phpでフォームのデータを拾った後にヘッダ関数で本来の送信先に転送出来たらいいのだけれど。
<?php
header("Location: http://オートステップメールの登録ページ");
?>
で、結果は失敗。method を get にしても駄目だった。予想通りだけど、うーん残念。
データを受け取るには、ステップメール登録後の戻りページ url にパラメータを付加するしかないか。いや、ステップメールのメール文中にパラメータ付の url を挿入する方法もあるか。
いよいよ GPS で住所を取得して google マップⅰアプリにコピペで渡せる仕組みを作ってみた。それだけではつまらないので現在地の地図画像を表示し、ついでに現在地をメールで送れるようにした。
地図画像はこちらのブログ( google local の地図画像を抜き出して使う - ZeroMemory )を参考に、Google のサービスを利用した。経度緯度を数字の桁(ドット)を取ってそのまま突っ込んでみたところ、地図がちゃんと表示されなかった。これは小数点以下6桁までに数字を丸めたら上手くいった。
メール送信のリンク部分では、このようにメールタイトルとメール本文を渡している。
<a href="mailto:?subject=~~~&body=~~~">現在地をメールで送る</a>
メール本文中の改行コードは %0D%0A である。
またメール本文中にも Google の地図画像へのリンク URL を記載しているが、文字数を節約するために経度緯度情報のみで一旦自分のサーバに飛ばし、そこから Google のリンク URL にリダイレクトしている。
出来たのがこのページ。すこし使ってみたところ、(1) InvGeoCoder から住所を取得する際に 503 エラーが出ることがある(2) Google の地図が正しく生成されず、黒、青色(海)、ベージュ色(地面)のベタ塗り画像になることがある、という問題が出てきた。
(1)に関してはエラーの表示と表示の更新を促すメッセージを表示するようにし、(2)は Yahoo の地図画像生成サービスがあるようなのでそっちに変更して様子を見るつもり。

いよいよ GPS から現在位置情報を取得してみるのだ。技術情報はドコモのサイトにあるにはあるが、簡素すぎてわかり難かった。要するにこういうことだ。
Aタグ
<a href="http://(自分の作った、次に飛ばしたいページ)" lcs>
FORMタグ
<form method="get" action="http://(自分の作った、次に飛ばしたいページ)" lcs>
<input type="submit" name="test" value="検索">
</form>
このように a タグ、form タグの最後に lcs を付ける。そしてそのリンクやボタンをクリックすると携帯の GPS 機能が立ち上がり、位置情報送信の許可をすると以下の URL にジャンプする。
http://(自分の作った、次に飛ばしたいページ)?lat=%2B35.00.35.600&lon=%2B135.41.35.600&geo=wgs84&x-acc=3
で、これら4つの値を拾えばいい。ドコモの説明の例では http://www.docomo.co.jp/gps.cgi?~ と書いてあったから、オープンiエリアの位置情報取得と同様にドコモのサーバにアクセスしないといけないのかと思ったよ。
これで軽度・緯度が取得できたのだが、60進法の度分秒での表記なので10進法表記に変換する。この計算式はこちらのブログを参考にさせて頂いた:経度・緯度を60進法から10進法へ変換 - F.Ko-Jiの「一秒後は未来」
さらに変換した経度・緯度から住所を取得する。これは InvGeoCoder という WebService をそのまま利用させて頂いた。
これで GPS から現在地住所を取得できるようになった。これから何をしたいのかというと、GPS の機能がない Googleマップiアプリに対して手動コピペで現在地住所を渡して、Googleマップiアプリで「今いる場所の航空写真」を見れるようにしたいのだ。

前回オープンiエリアの位置情報(エリアコード)を取得するところまでいったので、今回はそのエリアコードから詳細情報を取得する部分を付け加えた。といっても特に難しいことはなくて、「iarea00000(エリアコード:5桁の数字).txt」というエリアデータのファイルを読み込むだけ。するとその中にエリア名や沢山の緯度経度情報がコンマ区切りで入っているという訳。
出来たのがこのページ。データを読み込んで表示させるのはすぐに出来たが、悪い予感が的中して文字によるエリア名の表示部分が文字化けしてしまう(「溝の口」の「溝」、「港北ニュータウン」の「港」)。これは php スクリプトとエリアデータの文字コードが shift-jis なのが原因ではないかと思う。shift-jis で php スクリプトを作るのは気持ち悪いけれど、docomo の携帯サイトは shift-jis で作らないといけみたいなので仕方が無い。
いろいろ考えれば対応方法を思いつくかもしれないけれど、とりあえず今回はオープンiエリアを取得する事が目的だったので、深追いせずにこれでよしとする。次はいよいよ GPS に挑戦するのだ。

ネットでいろいろ見ているうちに、iモードの web ページから位置情報を取得できることを知った。ドコモ公式メニューのグルメ・クーポン系サイトでよく見かける手法だが、自分でも簡単に出来るという事には気づかなかった。
現在、ドコモの携帯端末からその位置情報を取得する方法はオープンiエリアと GPS の2通りがあるが、まずは簡単そうなオープンiエリアでチャレンジすることにした。
早速ドコモのサイトでオープンiエリアの説明書に目を通してみたところ、こちら(自分が作成する iモードの web ページ)から A タグか FORM タグでドコモ指定のアドレスにアクセスするとオープンiエリアのエリアコードが返ってくるという仕組みであることがわかった。
久しぶりの php スクリプト作成なのでどうなることかと思っていたら、書き出しから何から忘れていたので大いに焦った。解説書と i モード対応 html タグ一覧 を見ながらどうにかエリアコードを取得することに成功。i モードで同じ URL へ再度アクセスした場合に初回表示時のキャッシュが表示されてしまうという癖があるが、エリアコード取得後に同じ URL へ戻った場合はちゃんと新しいデータを読み直しているようだ。
出来たのがこのページ。ドコモの携帯からアクセスしないと位置情報が取得できずエラーが表示される。これはドコモの仕様だそうです。


