ATND API+CakePHPでイベント検索。「気になるATND検索」

ウェブAPIを用いた検索に挑戦したかったので、勉強も兼ねて作ってみました。
API初挑戦。ATND API+CakePHP。

「気になるATND検索」概要

気になるATND検索
CakePHP、ATND API、jQuery Mobile、jQuery

  • ATNDに登録してあるイベントを検索出来ます。
  • 利用した検索ワードはクッキーに保存され、次アクセス時等、一旦ページを離れた場合でも、フォームに自動入力されます。
  • 気になったイベントは保存する事が出来ます。こちらはセッションを利用。 -> クッキー利用に切替ました。

また、最近jQuery Mobileのalpha3が出たので利用してみました。
jQuery Mobile | jQuery Mobile

気が向いたらちょっと覗いてみて貰うと嬉しいですm(。。)m

やってみようと思った経緯

前々からウェブAPIを使ってみたかったんだけど、怖くて取り組めませんでした。。。
この「怖さ」は、例えば、変なプログラムになっちゃって、公開元に迷惑を掛けるかもしれない、とか、Cakeの勉強を続けているのに、目的のものが作れなかったら?という怖さ。

「もうちょっとCakeを身に付けてからやった方が良いんじゃないの? => きっとそうだ」
と、自分会話を完結させていたので、この自分的「やるやる詐欺」を払拭したかったから。

それから、ATND検索を自分が欲しかったから(´・ω・)ゞ
例えば私は福岡に居るので、「福岡」と検索して、今どんなイベントがあってるのかなぁ?と眺められるものが欲しかったので、やってみました。

そして、私が目標としているある方の活動を見て、触発された点も大きいです。

作ってみて楽しかったところ・良かったところ

目的のものを作るに当って、どんな動きを実装したいかを書き出してました。

  • APIからデータを取って来て利用すること(初めてなので大前提として・・・)
  • 検索したキーワードは再利用したい。
  • 気になるイベントがあったら、一旦保存しておける仕組みを備えたい。
  • 単語だけで簡単に検索したい。

これらの実現を目標に。
一通り備える事は出来たので、それが一番良かったです。

こう言っちゃうとアレなんですが、全部の作業が楽しかったです。
今回はデータベースを利用しないので、モデル側にどういった処理をさせて、コントローラ側でどう利用して処理させるか?とか考えてみたりとか。

クッキーとセッションの利用についてもすごく取り組んでみたい課題の1つだったのでやってみました。
もともと「APIを利用してみる」という課題が前提だったところに、更に課題を加えて追い込んでみた感じです。。。

苦労したところ・勉強になったところ

普段使ってるデータベースの利用と違って、APIでデータを取得して、それをデータベースの代りに扱う、という事は頭では考えてみていても、では実際に動作として組んでみるところはやっぱり苦労しました。
この2つがすごい活躍。書籍「Pocket詳解」は見易いし(こんな自分でも)解りやすくて本当にオススメです。
マニュアル :: 1.3コレクション
Pocket詳解 CakePHP辞典

それから、検索ワードやイベントの保存に利用しているクッキーとセッションの仕組み。
やってみると「なるほどクッキー!」とか「なんでならんのウガーッ!ヽ(`Д´)ノ」とか、ひとりでなってました。

そして、本当に今更で恥ずかしいのですが、配列について更に理解が深まりました。
なんというか、今までキーと値の組み合わせって判ってはいたんだけど、ちょっとモヤモヤした部分があったんですね。
それらが一気に解消されました。頭の中で整理出来るようになった感じ。

そしてもちろん、提供されてるAPIの読み方についても勉強になりました。
今までナントナークしか眺める事が出来なかったAPIを、こういうことなんだなぁ、って「読める」感じ。

う~ん。。。「全部勉強になった!」ですね。←またそれ!?

最初考えていたことと違ってきたところ

最初はCakePHPのデフォルト表示で良いよね、って思ってました。
だって使うのは自分だけ、って前提だったので。
だけど、せっかくなので整えて出してみようかな?とナゼか思ってしまいました。
そんなところにjQuery Mobile alpha3のお報せ。

・・・これで見た目を整えてみよう~丶(・ω・)ノ ←安直

気をつけたところ

変な内部エラーが発生しないように気をつけました。
CakePHPは、/app/tmp/logs に色んな情報を残してくれるので、これらを有効活用。
一見して問題ないように見えるけど、内部(例えばコントローラ側)で変数の未定義エラーが実はありますよ?といった点は極力なくすように心掛けました。

例えば、ビュー側では配列の利用をempty判定してるから問題ないけど、内部では実は定義エラーが起きちゃってたり。
「Use of undefined constant ~」・・・配列のキーをシングルクォートで囲ってなかったり。
※ちなみに文字列内で配列のキーを書く時は、シングルクォート要りません、よね。

課題として残っている点ややってみたい点

目標は達成出来たけど、新たに浮上してきた問題点ややりたいことなど。

■リクエストURLに期間を指定するとエラーになる。
 + 既に終了、又は開催日が過ぎたイベントのみの場合
 + ブラウザからURLを直接叩いた場合は、結果が取れる
■取得したデータを任意のキー値で並び替えてみたい。
ID順とか、開催日付順とか、既に終了しているか?、とか。
・・・Set::sort() 使ってみて出来ました。これすごいです。
■クッキーが保存されているなら、その情報をもとにしてボタンを押さずに結果が表示されるようにしてみたい。
クッキーに多次元配列を保存して、取り出す際に出来ない点を解消したい。 -> 解決しますた。
■クッキー削除、セッション削除時、画面変遷が必要ないAjax仕様にしてみたい。
■気になるリスト に保存した際、画面変遷がない仕様にしてみたい。
debug_kit を入れてセッションを削除しようとするとエラーが出る。 -> 解決。どうやら利用したいコントローラで明示的に追加する必要があるみたい。

<追加:2011/02/06 17:15:06>
■過去の検索ワードを保存して、何らかの統計を取ってみたい。(取得するのは検索語だけ)。
■セッションの仕組みを利用して、その時点での利用者の過去検索ワード再利用の仕組みを持たせてみたい。

あとがき

やっぱりAjaxで画面変遷がない動作はやってみたいです。

あと、自分はとにかく一覧で出して眺めてチェックする用途に・・・という目的だったので、イベントの詳細ページは用意しなかったんですが、他のひとだとどうなのかなぁ?って思ってます。
あった方が良いのかなぁ(´・ω・)

今回もまた、作ってみて判った事がたくさんあって、ほんと良い経験になりました。
体験した事を次に活かして、また何か作ってみようと思います。

追記

■2011/02/07 09:04:29
セッションを使った動作がうまく行ってないみたいです。。。すいません。
Chromeでは、「気になるイベント」に追加しても、ページを閉じて再度開くと、保存した情報が読み込まれてない、と思います。
なんとかして改善しようと思いますー(´;ω;`)

■2011/02/09 05:34:04
セッションを利用した「気になるイベント」が、環境により動作が異なる点が判明。
セッション利用 -> クッキー利用 に切替ました。

「気になるイベント」に登録したイベントを、個別に削除出来るようにしました。

Pocket詳解 CakePHP辞典
Pocket詳解 CakePHP辞典
posted with amazlet at 11.02.06
滝下 真玄
秀和システム
売り上げランキング: 18541

▲ to Top

コメント(4)

いいですね!jquerymobile綺麗に使われています。
検索をajaxにしたら、立ち上げ時にクッキー存在する場合そのまま
$(document).ready
などで検索を呼び出すのは簡単になるんでしょうか?
構造はあまり分かりませんが何となくそんな気がしました。

実は僕もCakePHPのAJAXを使ったことないですorz

トラックバック(0)

▲ to Top