待ち合わせ場所連絡ツールkokode.inに機能追加

2009/11/07 | JavaScript/Ajax

再度kokode.inに機能を追加した。

今までは単純に、地図に位置をプロットするだけだった。たしかに「渋谷のハチ公前」とか「上野の西郷さん」とかでの待ち合わせなら十分だったのだが、待ち合わせ場所といえばやっぱりカフェ。カフェを簡単に選択して待ち合わせ場所として使えないか、と思って少し考えた。

結局どこかが提供するAPIを使用することになるのだが、候補に挙がったのは「HotPepper」と「ぐるなび」。ということで最初は「HotPepper」を使ってみることにした。こちらのAPIは返してくれるデータの形式がいろいろ選べるのが便利。xmlとかjsonpとか。サーバサイドスクリプトを使わなくてもJavaScriptだけで対応できた。でも一つ問題。そもそもHotPepperだと登録されているデータ数が少なくて・・・。

ということで「ぐるなび」を使うことにした。ただしこちらはxmlでしかデータを返してくれないので、JavaScriptだけでは処理できない(クロスドメインの問題)。仕方がないので、サーバにxmlを取得するプログラムを設置して、そのプログラム経由で処理することにした。「ぐるなび」は登録データが多いから、カフェの候補もたくさん表示されるのでこちらのほうが断然いい。ということでカフェ検索機能を追加してkokode.inをリニューアルした。

待ち合わせ場所連絡ツールkokode.in

jQueryによるAjax処理でxmlを受け取るときに

最近はjQueryに夢中。毛嫌いしてきたJavaScriptだったが、jQueryに出会ってからは一転。できることならPHPをやめてしまって、jQueryでご飯を食べたいくらいだ(でもそれは無理)。

Ajaxアプリを記述するときに、サーバサイドPHP、フロントエンドjQueryが今のお決まりのスタイル。基本的にはPHPからの応答はjsonを使うのだが、今回とある理由でxmlでデータを返すことにした。ここではまった。

jQuery側では以下のような記述で受け取りたかったのだが、どうしてもデータを処理できない。

$.ajax({
type:’GET’,
url:’index.php’,
dataType:’xml’,
success:function(data){
//JavaScriptによる処理
}
});

dataTypeでxmlを指定すると、動作しないのだ。なぜだ。

なにぶん、JavaScriptはまだまだ初心者なので、さんざんJavaScriptのプログラムを疑った。でも実はPHP側に問題があったなんて・・・。

PHPからは単純にXMLを吐き出していただけなんだが、それがまずかった。通常特別なことをしない限り、PHPによる応答のContent-typeの指定はtext/htmlなはずだが、これがいけない。jQueryはこのHTTPヘッダを読み取り、Ajaxで帰ってくるデータがhtmlであることを期待しているのに、xmlが返ってきてしまったわけで、それで動作しなかったようだ。

PHP側の処理で、以下の一行を加えることで解決できた。

header(‘Content-Type: text/xml; charset=UTF-8′);

PHPでXMLを返すのではなく、単にdata.xmlのように、拡張子xmlのファイルを呼び出すのであれば問題なかったのにね。

待ち合わせ場所連絡ツールkokode.in検索機能追加

2009/11/04 | JavaScript/Ajax

待ち合わせ場所サービスkokode.inが楽しい。機能はなきに等しいけど、自分で使っていて楽しい。

待ち合わせ場所サービスkokode.in

今日は車で外出の予定があったのだが、地図が必要。ということでkokode.inを早速使用する。行き先の名前はわかっていたのだが・・・検索機能つけてなかった。ということで早速キーワードによる場所検索機能を追加。もともとジオコーディングの関数を組み込んでいたのでインターフェイスをつけただけ。でも、やっぱり便利。自分で使いたいと思えるサービスって、なんかいい。

新しいアンケートASPサービスの開発

2009/11/01 | その他

ウェブ上で簡単に無料でアンケートを作成して、集計・ダウンロードまでできる「CubeQuery」を開発して、もう2年半がたった。無料でできる同様のサービスは他にもいくつかあるみたいだけど、自分としては特にライバル視せず、また調査をするわけでもなく、ひたすら放置をしてきたわけだが、Googleからページランク4をいただいて、もうお腹いっぱいって感じだ。

アンケート作成者も多岐に渡るようで、結構大きな企業さんにも活用していただけているようだ。高評価もいただけて何より。でも今、新たなアンケートASPサービスを模索しているところだ。昨今のプログラム環境や各種API、JavaScriptフレームワークによるインタラクティブな環境が当たり前になりつつあるので(といってもまだまだなんだけど)、それに準じた使いやすさを求めたくなった、というのが正直なところだ。

あと、有料化も見据えたいんだけど、利用者にとってその敷居は高い。とても高い。だから新サービスは、現状のCubeQueryに、少し機能追加して使い勝手をよくしたものを無料で提供し、さらに付加価値をつけて有料版を提供しようと思っている。ここのところ業務でアンケートシステムを構築する機会があったので、それらで得た知識もいかせると思う。

もしCubeQueryの利用者の方で、ほしい機能があれば、ここにコメントとして残していただきたい。実は現状新システムはほぼ完成の域まできていて、ウェブサイトを作って、デザインを加えれば公開できる状態まできているのだが、まだまだ手を加えたいと思っている。是非、リクエストをいただきたい。リクエスト数の多さや論理性を検討しつつ機能を追加できたらと思う。

CSVで書き出す関数fputcsv

2009/10/31 | PHPの基本

CSVファイルを取り扱うのに便利な関数にfgetcsv、fputcsvがある。CSV吐き出し機能が欲しかったので、fputcsvの仕様を検証してみることにした。マニュアルではこんな具合に書かれている。

int fputcsv ( resource $handle , array $fields [, string $delimiter [, string $enclosure ]] )

マニュアルによると$delimiterは1文字でなくてはいけないらしい。だから$delimiterに2文字以上の文字列(例えば「<>」)を指定するのはNGらしい。同様にタブを「\t」と指定するのもダメらしい。この場合はchr関数を使ってchr(9)と記述しなくてはいけないらしい。1バイトってことかな。$enclosureも同様。

この関数で便利だなと思ったのは、配列内の値にエスケープすべき文字列(「,」と「”」)が含まれているとき、うまく取り計らってくれることだ。それらの文字列が入っていると、自動的に「”」で囲み、「”」の場合はエスケープまでしてくれる。これはとても便利。でも、不便なのは、エスケープすべき文字が入っていない場合は囲み文字で囲んでくれないということ。個人的には数値以外は全て囲んで欲しいのだが、そういう意見は少ないのだろうか。

でもまぁ便利。使ってみることにする。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net