Home > Ruby On Rails > GoogleMapでマッシュアップの練習(Rails編) #5

GoogleMapでマッシュアップの練習(Rails編) #5

4travelにパラメータとして地名を送信するには、返されたXMLの中から地名だけを取りだす必要がある。難しいことはしないけどRubyでXMLをいじった経験はなし。きっとそういうライブラリがあるはず、と思って探すとREXMLというものを発見。日本語情報が少なくここを参考になんとかやってみた。

REXML:RubyによるXML処理

どうもREXMLの日本語情報が少ないようで、これ以上調べるのも時間がかかりそうな気がしたので、見よう見まねでかなり強引に作ってみた。きっともっとスマートな方法があるはず。main_controller.rbにget_name_of_placeというメソッドを追加し、そこにXMLのデータを渡すと都道府県名と都市名を別々にようにした。取得失敗時は取得失敗という文字を返す。

main_controller.rb

require 'net/http'
require 'rexml/document'

class MainController < ApplicationController

  def index
  end
  def search
    #HTTP通信設定
    site = Net::HTTP.start('refits.cgk.affrc.go.jp')

    #地名情報取得
    response = site.get("/tsrv/jp/rgeocode.php?lon=#{params[:x]}&lat=#{params[:y]}")
    resXML = response.body
    site.finish

    #XML要素から都道府県名と都市名を取得する
    pref, munic = get_name_of_place(resXML)

    #画面表示用のテキスト整形
    @resText = "都道府県名:#{pref}  都市名:#{munic}"

    render(:layout => false)
  end

  def get_name_of_place xml
    #XMLツリー作成
    docTree = REXML::Document.new xml

    #ステータス取得(地名の取得が成功したかどうか)
    status = docTree.elements.each("/rgeocode/status"){}[0].text
    return "取得失敗", "取得失敗" if status != "true"

    #都道府県取得
    pref = docTree.elements.each("/rgeocode/prefecture/pname"){}[0].text

    #都市名取得
    munic = docTree.elements.each("/rgeocode/municipality/mname"){}[0].text

    return pref, munic
  end
end

今回もサーバサイドのみの変更なのでそのまま地図をクリック。よし、成功!僕の住んでる近辺を狙って何度かクリックするものの、なかなか難しい。よし、面白くなってきたぞ。

家からは少し離れてるけど・・・


関連するエントリー GoogleMapでマッシュアップの練習 (Rails編) #5





プレビュー

トラックバック:No Trackbacks

トラックバック URL
http://blog.garden-place.jp/action.php?action=plugin&name=TrackBack&tb_id=19
Listed below are links to weblogs that reference
GoogleMapでマッシュアップの練習(Rails編) #5 from Web 酒 肴
このエントリにトラックバックはありません
このトラックバックURLを使ってこの記事にトラックバックを送ることができます。 もしあなたのブログがトラックバック送信に対応していない場合にはこちらのフォームからトラックバックを送信することができます。.

Home > Ruby On Rails > GoogleMapでマッシュアップの練習(Rails編) #5

Search
Feeds

Page Top