いまは検索結果画面をちまちまと作っています。まぁ基本バグ消化ですけど・・・・・・。
マップにちまちまと便利機能をつけてみたり、してるんですけど、ここで考えなくてはいけないのがジオコーディングの仕様ですね。
いまはGoogleMapのジオコーディングを使ってて、何も考えないで実装していたんですがここで大きな問題にぶち当たります。
Googleのジオコーディングには制限がありまして、
同一IPからのリクエストは1日2500回までというものがあります。
このIPは「ユーザーのIP」なので、ブラウザ処理であるjs側での実装部分は問題ないのですが、サーバーからのジオコーディングは誰がアクセスしようとIPはサーバーのものなので、2500回なんてすぐですね。
一応金を積めば100000回までは許容されるんですが、それすらも非現実的ではあります。
そう。今更気づくことになるのですが
ジオコーディングは全てフロントエンドでやらなくてはいけなかったということになります。
ブラウザから来る値は基本的に信用ならないので、新規登録時とかはサーバー側でやるべきかなとは思うのですが、それ以外は全部js側でやるように書き直さなくてはなりませんね。
まぁ、本来はキャッシュとかするみたいですけどね・・・・・・。
このページとかすごいわかりやすい。
ただ、新規登録時のみに絞ったとしても、やはり厳しいものは厳しいですね・・・・・・。
そこで考えられるのが
Yahooジオコーダーとの併用も一つの手です。要するに座標を取れさえすればいいわけですからね。
マップの表示はGoogle以外に選択肢がないのですが、ジオコーダーは何を使ってもぶっちゃけ結果さえ取れればいいんですよね。
国内に限れば国土交通省のデータなんかあったりしますね・・・・・・。
急いでこれを組み込むとなると私の労力が半端なくなるので、これはまたβ版をリファインしてRC版みたいなのを開発することになるのかな・・・・・・。
さすがにキャッシュを取るのは厳しいかなって感じもしますしね。ただ、サーバーサイドでGoogleジオコーダー使ってる箇所は可能な限り削除しないと公開すらできませんからね・・・・・・。
現状、新規登録の他にいまサーバーサイドでジオコーダー使ってるのは、トップ画面もしくはヘッダーからのキーワード検索ですね。
まだ見せてない画面に関して言うのもあれなんですが通常の検索画面に関しては、もともとAjaxで実装してるのでジオコーディングはなんかjavascriptでやろうとしてたんですよね。まぁ、それを作る時に「そういえば制限大丈夫なのか?」って再び疑問に思って調べたら死んだ、って感じですね。
ほんとは新規登録と住所変更時もGoogleジオコーダー使わないような処理にしなくてはいけないんですが、ほんとどうしようこれ・・・・・・。
今から作り直すのは正直きびい......
ので、β版では現状維持ということにします。組み替える時間がないし、まぁ2500件なら100ユーザーぐらいなら問題なくさばけるでしょ...
まぁ、この制限に引っかかったら住所の新規登録と変更ができなくなりますけど、検索に関しては問題ないし・・・・・・
ちなみに現段階で、検索に関してはほぼできています。あと残すは
the_day_is_ok()という名前のメソッドを一つ完成させればよかったりします。
この関数はその名の通り、「その日は空いてますか?」という旨の判定を下すメソッドで、予約テーブルとか参照する何気に巨大なメソッドなんですよね()
ただ今はそこまで作れない
(というか予約用のDAOの作り直しが確定している)ので、祝日判定とかだけなんとか終わらせたいという気持ちです。
まぁこれがまた難癖ありそうなんですけど・・・・・・。
祝日判定のライブラリはいくつかありますが、まずYasumiは美味しそうなのですが、composerぶっ壊してくる上にPHP7.1以上を要求してくるので却下。pharになんか落ちてますが、依存するパッケージがあるみたいで、これも不穏なニオイがしたので却下。サーバーにインストールするようなものは少なくとも使えないと思ったほうがいいと思うので。
他にもいくつかライブラリを見つけましたが、composerでのインストールが上手くいかなかったので、
ゴリゴリ自作されたものを拝借という手に出ました。
春分の日とかは逐一計算しているのでずれる可能性があるみたいですが、まぁたぶん大丈夫でしょ。あんまり自前でこういうデータを持つのは好きじゃないんですが、一番安全ではありますしね。
具体的には
こ↑こ↓ですね。(は?)
ということで、検索画面は完成しました。何気に一応レスポンシブ対応も終わってます。見て分かる通り大画面での最適化は全くしていないので無駄スペースがありますが、こんなのは後からどうとでもできるので放置です。
あとは詳細画面を表示して、ハンドシェイクを行い、予約確認と余力があればDM機能とかつけたいですね。
金銭的なやりとりっていつになったら実装できるんですかね。
ハンドシェイクも予約確認も、もうロジックはver0.1で組み終えてるので後は移植するだけとはいえ、またなんか手間取りそうではありますね・・・・・・。
ちなみに、今のとこ目先の大きな課題としては、検索条件である日時とかの情報を詳細ページに引き渡したいのですが、それをどうしたらいいのかと思い悩んでおります。
コロッコロ値が変わるので、逐一inputを書き換えるというのはちょっとマズいと思われるので、リンクをクリックするとイベントが発火し、formが準備され、動的に作られたフォームか、あるいはhiddenフォームを送信してページ遷移する、って実装が無難ですかね。
idさえ取得できればページ遷移は問題なくできると思うし、フォームをオブジェクトとしてまとめて取得するところもできてますしね。っていうか既にフォーム自体はすでにあんじゃん思ったら(笑)
つまりこのフォームのactionを書き換えて実行するって感じがよいのかな・・・・・・?
ただ、詳細ページへは検索結果画面だけでなくただ無作為に選ばれて表示されるトップページからも飛んでくるルートもあるので、その辺を考慮した実装にしなきゃな・・・・・・。