[Railsアプリを育てる#1] Foursquareから取得した位置情報をGoogleマップに静的に表示させる

先日Rails+HerokuではじめてWebアプリを公開しました。(過去記事:Ruby on Rails+Herokuで素人が工数12時間でWebサービスを公開するまでの記録

簡単な時刻表のサイトです。墨田区を走る超ローカル循環バス「すみまるくん」があまりにローカルすぎて時刻表を見るのにも一苦労だったので、ちょっと頑張って作ってみたサイトです。ちょうどRailsを勉強していたので。

形はひとつできたので、これからはしばらく少しずつ新しいものを取り入れながら、新しいスキルを身につけようと考えるに至りました。

で、今回はその第1回。「Googleマップの地図を表示させる」です。

以下を身につけることができました。めでたしめでたし。

  • dbへのcolumnの追加
  • FoursquareのAPIを叩くこと
  • RubyでJSONをhash化すること
  • rake db:reset
  • Googleマップの静的マップURL
  • Herokuでのアプリケーションの更新

以下、詳細。

モデルに位置情報を追加

すでに作っていたモデル”Busstop”に位置情報”latitude”と”longitude”を追加しました。

できたmigrationファイルに必要なこと(latitude, longitudeをfloatで追加)を書き足す。(201308XXXXXXX_add_column_latitude.rb)

元データは?

Foursquare API初体験

そもそも、バス停の位置情報がどこかに転がってないと困ります。今回はたまたまFoursquareのリストを発見したので、そこからデータを引っ張ることにしました。

このサイトでAPIを直打ちで試せます。試したAPIのURLをrubyに貼り付けて、そこからバス停名と位置情報を抜き出すスクリプトを作りました。rubyのhashとjsonがよくわからず、地味に苦労しました。

取ってきたデータのバス停名と自分のDBのバス停名が一致してなかったので、あとからcsvに手書きでbusstop_idを書き加えました。数が少ないからなんとかなったけど、スマートじゃない。

利用規約とか

ちなみに、Foursquareからデータを取って勝手に使っていいのん?っていう疑問もあったのですが、こんな記述があったのでよしとしました。

“Scraping” is doing something like running a dedicated, external process to systematically query and save information from Foursquare (except for the purposes of updating your caches).

You’re not allowed to scrape from our location database. However, we do understand that sometimes some light scraping of our location database will enhance your application, so we may consider scraping where the volume of objects you’re scraping is less than 1,000.

dbへの追加

seed.rb or オリジナルrakeタスク

地図表示の素となるデータをcsvで用意できたのですが、dbへの追加でしばらく悩みました。rake db:seedでやったらいいのか、ほかに新しいrakeタスクを作ったらいいのか、どっちかだろうなと。でも答えはない感じ。参考にしたサイトはこちら。結局seedに書きました。(rakeタスクなんて書いたこと無いし)

seedには以前のゴミが残っていました。seedの趣旨を理解せず、追加するようなスクリプトを消しては書き消しては書き繰り返していたので、ひどいもんです。今のデータベースに入っている相当のデータがちゃんとゼロから追加されるように(初期化ですな)、seedを書き直しました。意外と苦労せず15分もかからず、しかも失敗もせず。

seedの実行

今回は前のデータが残っているので、そのままrake db:seedを実行するとエラーになるので、下記を実行

これをやるとデータベースのリセットとseedの実行を一緒にやってくれるらしい。もっと前に知っていれば・・・。

Googleマップの表示

とりあえず静的なマップとしました。

もちょっと色々試したいところ。

Herokuへのデプロイ

下記の流れ。

よしやりきった。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です