‘PHP’ タグのついている投稿

投稿スラッグをGoogle AJAX Language APIで英訳するWordPressのプラグインを作った

投稿スラッグをGoogle AJAX Language APIで英訳するWordpressのプラグインを作った

それは、どういうものですか?

WordPressのURLとして使われる投稿スラッグ。これは、標準だと投稿タイトルをURLエンコードしたものが自動的に使われて、やけに長くなるしかっこ悪い。

んで、ぼくは投稿タイトルを逐一英訳して投稿スラッグとして入力しているんだけど、ボキャ貧なので通じるかどうかわからない怪しげな英語になってしまう ><

そこで、自動的に投稿タイトルを英訳してくれて、それが投稿スラッグになってくれると素敵だなと思い、Wordpressのプラグインを作ってみました。

(さらに…)

Googleの逆ジオコーディングをためしてみた

ジオポの地図表示で住所を出したかったので逆ジオコーディング(緯度・経度から住所を取り出すこと)をGoogleのAPI使ってやってみました。

まず基本

Google MapsのAPIと違って、日本語での情報が少ない(マニュアル)けど、

http://maps.google.com/maps/geo?ll=35,135&output=xml&key=GOOGLE_MAPS_API_KEY&hl=ja&oe=UTF8

URLはこのサンプルみたいにして、HTTP GETでXMLが取得できる。

リクエストパラメーター
ll 緯度・経度(qでもいいと思う。違いがわからないよ><)
output xml、kml、cvs、json
key Google maps APIキー
hl 言語(日本語だとja、英語ならen)。住所記述方法にも影響
oe 文字エンコード
レスポンス(XMLをsimple_xmlでパースした場合)
$parsed_xml
->Response->Status->code
ステータスコード
$parsed_xml
->Response->Placemark
Arrayで結果が複数入る
以下 Placemark[0]が親とする  
AddressDetails[‘Accuracy’] 精度。後述
address 住所。言語によって記述方法が変化。日本語だと[県][市][町] って具合だけど、英語だと [Street], [City], [Prefecture]
あと、住所には国名が含まれる。
AddressDetails->Country
->CountryNameCode
国のコード。JP
AddressDetails->Country
->CountryName
日本
AddressDetails->Country
->AdministrativeArea
->AdministrativeAreaName
東京都
AddressDetails->Country
->AdministrativeArea
->Locality
->LocalityName
渋谷区
AddressDetails->Country
->AdministrativeArea
->Locality
->DependentLocality
->DependentLocalityName
渋谷
AddressDetails->Country
->AdministrativeArea
->Locality
->DependentLocality
->Thoroughfare
->ThoroughfareName
1丁目26
AddressDetails->Country
->AdministrativeArea
->Locality
->DependentLocality
->PostalCode
->PostalCodeNumber
日本だと取れない。アメリカだけかな?

基本的に詳細な住所ほど、先頭にくるのでPlacemark[0]を見れればokとか考えていたらハマった。

(さらに…)

ジオポの符号化、復号化をいろんな言語で書いてみる

位置情報をいくら短縮して色んなことに応用できるといっても、ユーザーが使ってくれるまでの敷居が高い(今のブラウザ経由の符号化じゃ、ダメってこと)とどうしようもない。

そんな理由で、まずはユーザーが接するアプリケーションの開発者サイドにジオポ実装を働きかけていきたい。そのためにも、具体的なサンプルコードをプログラミング苦手な僕が書いてみた。

と、その前に…
ジオポがネタフルで紹介されたよ!
位置情報を短縮したURLに変換するウェブサービス「ジオポ」

スクリーンショット付きで丁寧に紹介していただきありがとうございます。モチベーションあがりました!

(さらに…)

検索エンジンに対応した多言語化方法

検索エンジン(まぁGoogleなんだけど)って、ひとつのURIに対してひとつの言語にしか対応してないんですね。

そんなわけで、単純に内部で言語を切り替えただけではクロールされる言語がひとつになってしまい、問題になってきます。
そこで、多言語に対応したサイトの作り方をメモとして書いておく。

(さらに…)

CodeIgniterのURIルーティングで.htaccessいらず

とりあえず、開発スピードを優先させるためにフルスクラッチで作ってたジオポですけど、これから、国際化対応させたり、DB使う場面が出てくると思うので、PHPのフレームワーク CodeIgniterに変換した。

フルスクラッチは、コントローラーからビューだけをinclude()する方法で作っていたので、置き換えもスムース。そして、スピーディー。

  1. CodeIgniterをダウンロード、展開
  2. .htaccess 書き換え
  3. config.php の設定
    • $config[‘base_url’]    = "http://" . $_SERVER["HTTP_HOST"]; としてローカル環境・本番環境でも切り替え必要なし。
    • //$config[‘index_page’] = "index.php"; コメントアウト
  4. autoload.php の設定
    • ライブラリのuser_agentとコンフィグに独自config
  5. コントローラーをクラス化してやり、少しの書き換え
  6. 同時に独自configファイルを作ってやる
    • サーバ名を見て、ローカルだったらデバッグフラグ立てる
    • Google Maps APIがローカルだと使えない(localhostならいけるけど、プロジェクトごとに projectName.localhostとしてhostsの変更してるので…)
  7. ビューを配置
  8. user_agents.php の書き換え
    • 日本向けの携帯設定と、iPhone判別を追加

こんだけです。多分、1時間もかかってないんじゃないかな?

気づいたこと→routes.phpが素敵

routes.php でクラス、メソッドの呼び出しがマッピングできるんだけど、正規表現が使えるからとっても便利。

今までは、.htaccessでmod_rewriteのために正規表現の条件処理を加えて、パラメータをクエリとして渡してやって、そのクエリをバリデートと分岐させるためにPHPの内部でも正規表現で条件分けしてた。

CodeIgniterだとそんなのいらない、

$route['([0-9a-zA-Z_-]{1,10})'] = "geopo/mapGeopo/$1";

これだけで完了。記述方法もとってもわかりやすい(たしか、Cakeだともっと複雑だった気が)。

そんなこんなで、これから国際化に向けてがんばろうっと。

ブログで取り上げてもらった

ヅラずれなるままに(2009-02-26) – ジオポを試してみた

書いていただき、ありがとうございます。

地図からの選択はわかりにくいかな?あのマーカーがドロップしたときの動きが好きで、あんな仕様にしたんだけど、後で変えて試してみっか。