osc2007-niigata - mashup

150
風呂で のぼせないうちに作る マッシュアップ 株式会社ワイズノット 増井 雄一郎

Upload: yuichiro-masui

Post on 13-May-2015

3.988 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: OSC2007-niigata - mashup

風呂でのぼせないうちに作るマッシュアップ株式会社ワイズノット 増井 雄一郎

Page 2: OSC2007-niigata - mashup
Page 3: OSC2007-niigata - mashup

↓Macbook pro

Page 4: OSC2007-niigata - mashup

↓Macbook proNot 防水

Page 5: OSC2007-niigata - mashup

1時間以上かけてたらのぼせちゃう

Page 6: OSC2007-niigata - mashup

Rails使ったことある人

Page 7: OSC2007-niigata - mashup

自分でMashup

したことある人

Page 8: OSC2007-niigata - mashup

サイトなんかも公開しちゃってる人

Page 9: OSC2007-niigata - mashup

Mashupマッシュアップ

Page 10: OSC2007-niigata - mashup

音楽用語

Page 11: OSC2007-niigata - mashup

Remixとの違い

Page 12: OSC2007-niigata - mashup

曲をいじったりくっつけるのが

Remix

Page 13: OSC2007-niigata - mashup

歌詞はこっちメロディーはあっちで

Mashup

Page 14: OSC2007-niigata - mashup

繋げるだけじゃなく変えるだけじゃなく

Page 15: OSC2007-niigata - mashup

いろんなサイトをごちゃまぜにしちゃえ

Page 16: OSC2007-niigata - mashup

携帯と地図のMashup

Page 18: OSC2007-niigata - mashup

Mashupとは

Page 19: OSC2007-niigata - mashup

アプリケーションの再構築

Page 20: OSC2007-niigata - mashup

昔は無理矢理やっていた

Page 21: OSC2007-niigata - mashup

HTML解析して・・・

Page 22: OSC2007-niigata - mashup

自分で使う分には良いけど公開できない

Page 23: OSC2007-niigata - mashup

いまでもAPI公開してないサイトのデータを使うときにやる

Page 24: OSC2007-niigata - mashup

データが命!勝手に使わせるなんてもってのほか!

Page 25: OSC2007-niigata - mashup

でもWeb2.0時代はサイト側がある程度自由にデータや

システムを使わせてくれる

Page 26: OSC2007-niigata - mashup

なんで?

Page 27: OSC2007-niigata - mashup

ビジネスモデルの変化

Page 28: OSC2007-niigata - mashup

データを囲い込んでも換金する方法がない

Page 29: OSC2007-niigata - mashup

でもトラフィックは広告で金になる

Page 30: OSC2007-niigata - mashup

サイトに誘導するためデータを使おう

Page 31: OSC2007-niigata - mashup

その使わせてくれる口がWebAPI

Page 32: OSC2007-niigata - mashup

色々なWebAPIが提供されてきている

Page 33: OSC2007-niigata - mashup

大別すると3種類

Page 34: OSC2007-niigata - mashup

データ系

Page 35: OSC2007-niigata - mashup

RSSAmazon Web Service

Google検索ホットペッパーじゃらんnet

Page 36: OSC2007-niigata - mashup

データを公開

Page 37: OSC2007-niigata - mashup

ここの部分が多い

Page 38: OSC2007-niigata - mashup

既存にデータを持っているところは容易に展開できる為

Page 39: OSC2007-niigata - mashup

処理系

Page 40: OSC2007-niigata - mashup

スクリーンショット形態素解析

テキスト→MP3変換

Page 41: OSC2007-niigata - mashup

データを投げると何らかの処理をしてくれる

Page 42: OSC2007-niigata - mashup

表示系

Page 43: OSC2007-niigata - mashup

Google MapsNIFTY Timeline

べつやくメソッドAPI

Page 44: OSC2007-niigata - mashup

色々なデータを表示する基盤

Page 45: OSC2007-niigata - mashup

ほとんどのAPIはMVCのMやVに相当

Page 46: OSC2007-niigata - mashup

Controllerをどうやって作る?

Page 47: OSC2007-niigata - mashup

既存の手法と同じ

Page 48: OSC2007-niigata - mashup

PHP, Perl, Ruby, Java....

Page 49: OSC2007-niigata - mashup

ちゃんと作ると非同期処理が多く

PHPは不利

Page 50: OSC2007-niigata - mashup

そこで我らがRuby on Rails

Page 51: OSC2007-niigata - mashup

救世主

Page 52: OSC2007-niigata - mashup

さすがはWeb2.0系フレークワーク

Page 53: OSC2007-niigata - mashup

WebAPIを楽にするActiveResource

Page 54: OSC2007-niigata - mashup

Rails2.0から標準添付

Page 55: OSC2007-niigata - mashup

でもRails2.0がいつ出るかは謎

Page 56: OSC2007-niigata - mashup

しかしActiveResourceは

Page 57: OSC2007-niigata - mashup

Rails 対 Rails にしか使えない

Page 58: OSC2007-niigata - mashup

別の方法を考えよう

Page 59: OSC2007-niigata - mashup

さてMashupで何を作る?

Page 60: OSC2007-niigata - mashup

OSC-Doではblogでリクエストを

募って

Page 61: OSC2007-niigata - mashup

「北海道温泉マップ」

Page 62: OSC2007-niigata - mashup

じゃらんが温泉情報をWebAPIで公開

Page 63: OSC2007-niigata - mashup

これをマッピング

Page 64: OSC2007-niigata - mashup

なので新潟では

Page 65: OSC2007-niigata - mashup

「新潟温泉マップ」

Page 66: OSC2007-niigata - mashup

まずは温泉情報を持ってこよう

Page 67: OSC2007-niigata - mashup

APIのページを読む

Page 69: OSC2007-niigata - mashup

API使うには登録がいる

Page 70: OSC2007-niigata - mashup

APIキーをもらったらURLを叩くだけ

Page 72: OSC2007-niigata - mashup

XMLで帰ってくる

Page 73: OSC2007-niigata - mashup
Page 74: OSC2007-niigata - mashup

これをプログラムでごにょごにょ・・・

Page 75: OSC2007-niigata - mashup

Railsを使えば一発!

Page 76: OSC2007-niigata - mashup

とは行かない・・・

Page 77: OSC2007-niigata - mashup

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

class Onsen attr_accessor :address, :name, :id

KEY = 'phe11375af71ba' URL = 'http://jws.jalan.net/APICommon/OnsenSearch/V1/?' def self.find(params) results = [] get(params).elements.each('Results/Onsen') do |el| results << Onsen.new(el.elements["OnsenID"].text, el.elements["OnsenName"].text, el.elements["OnsenAddress"].text) end results end

def self.url(params) params[:key] = KEY URI.parse(URL+((params.map { |key,value| "#{key}=#{CGI::escape(value.to_s)}"}).join('&'))) end

def self.get(params) REXML::Document.new(Net::HTTP.get(url(params))) end def initialize(id, name, address) @id, @name, @address = id, name, address endend

Page 78: OSC2007-niigata - mashup

これでAPIを使える

Page 79: OSC2007-niigata - mashup

ちょっと読めないよね

Page 80: OSC2007-niigata - mashup

詳細はWebで!

Page 81: OSC2007-niigata - mashup

新潟の温泉リストを取り出す

Page 82: OSC2007-niigata - mashup

irb> puts Onsen.find(:count => 10, :pref => '170000').map{|o| o.name}.join(',')=>平根崎温泉,秋津温泉,椎崎温泉,住吉温泉,潟上温泉,佐和田温泉,

八幡温泉,小木温泉,瀬波温泉,湯沢温泉 (荒川峡)

Page 83: OSC2007-niigata - mashup

このリストをGoogle Mapに入れる

Page 84: OSC2007-niigata - mashup

こっちはRubyのライブラリがある

Page 85: OSC2007-niigata - mashup

YM4R/GM

Page 86: OSC2007-niigata - mashup

GoogleMaps APIをRailsで使うライブラリ

Page 87: OSC2007-niigata - mashup

$ rails onsen -d sqlite3$ cd onsen$ script/plugin install \ svn://rubyforge.org/var/svn/ym4r/Plugins/GM/trunk/ym4r_gm$ ./script/generate controller onsen index

Page 88: OSC2007-niigata - mashup

さっきのOnsenクラスはlib/onsen.rbに保存

Page 89: OSC2007-niigata - mashup

class OnsenController < ApplicationController def index @map = GMap.new("map_div") @map.control_init :large_map => true, :map_type => true @map.center_zoom_init([37.60988,138.872681], 10) endend

Page 90: OSC2007-niigata - mashup

<html><head><%= GMap.header %><%= @map.to_html %></head><body><%= @map.div(:width => 600, :height => 400) %></body></html>

Page 91: OSC2007-niigata - mashup

これだけで地図表示

Page 92: OSC2007-niigata - mashup
Page 93: OSC2007-niigata - mashup

これにじゃらんでゲットした温泉をピンで打つ

Page 94: OSC2007-niigata - mashup

Google Mapsでピンを打つには緯度経度が

必要

Page 95: OSC2007-niigata - mashup

じゃらんAPIでは住所しか持ってない

Page 96: OSC2007-niigata - mashup

そこでジオコーディング

Page 97: OSC2007-niigata - mashup

住所から緯度経度を割り出す

Page 98: OSC2007-niigata - mashup

これもGoogle Maps API

の一つ

Page 99: OSC2007-niigata - mashup

YM4R/GMを使えばそれも楽々

Page 100: OSC2007-niigata - mashup

新潟の緯度経度を調べる

Page 101: OSC2007-niigata - mashup

irb> nigata = Geocoding.get(‘新潟駅’)

irb> nigata.first.latlon=> [37.912016, 139.061847]

Page 102: OSC2007-niigata - mashup

Onsenクラスにコレをくっつける

Page 103: OSC2007-niigata - mashup

class Onsen ~中略~ def latlon Geocoding.get(@address).first.latlon endend

Page 104: OSC2007-niigata - mashup

でもGoogleのジオコーディングは郡に対応していない

Page 105: OSC2007-niigata - mashup

正規表現で「郡」を取り除けば大丈夫

Page 106: OSC2007-niigata - mashup

class Onsen ~中略~ def latlon Geocoding.get(@address.gsub(/(北海道|府|県).{1,5}郡/,'¥¥1')).first.latlon

endend

Page 107: OSC2007-niigata - mashup

これで2つのAPIをMashup

Page 108: OSC2007-niigata - mashup

これを地図に放り込む

Page 109: OSC2007-niigata - mashup

class OnsenController < ApplicationController def index @map = GMap.new("map_div") @map.control_init(:large_map => true, :map_type => true) @map.center_zoom_init([37.60988,138.872681], 8) return Onsen.find(:count => 30, :pref => '170000').each do |o| begin marker = GMarker.new( o.latlon, :title => o.name, :info_window => render_to_string( :partial => 'point', :locals => { :onsen => o }) ) @map.overlay_init(marker) rescue end end end

Page 110: OSC2007-niigata - mashup

吹き出しのHTMLも

Page 111: OSC2007-niigata - mashup

<div><strong><%=h onsen.name %></strong></div><div><%=h onsen.address %></div>

Page 112: OSC2007-niigata - mashup

できあがり

Page 113: OSC2007-niigata - mashup
Page 114: OSC2007-niigata - mashup

つまらない・・・

Page 115: OSC2007-niigata - mashup

温泉の写真も貼ろう

Page 116: OSC2007-niigata - mashup

写真と言えばFlickr

Page 117: OSC2007-niigata - mashup
Page 118: OSC2007-niigata - mashup

もちろんWebAPI公開

Page 119: OSC2007-niigata - mashup

Ruby用バインドも複数公開

Page 120: OSC2007-niigata - mashup

でも温泉の写真は全然ヒットしない

Page 121: OSC2007-niigata - mashup

ほかに写真を公開しているAPIは・・・

Page 122: OSC2007-niigata - mashup
Page 123: OSC2007-niigata - mashup

Yahoo画像検索Webサービス

Page 124: OSC2007-niigata - mashup
Page 125: OSC2007-niigata - mashup

キーワードの写真が取得できる

Page 126: OSC2007-niigata - mashup

すばらしい!

Page 127: OSC2007-niigata - mashup

使い方も簡単

Page 129: OSC2007-niigata - mashup
Page 130: OSC2007-niigata - mashup

これもOnsenクラスにいれちゃう

Page 131: OSC2007-niigata - mashup

class Onsen ~中略~ def photo Onsen.get({ :appid=>'onsen', :query=>@name.gsub(/ ¥(.*/,''),

:results => 1}, "http://api.searc........rch?" ).elements['/ResultSet/Result/Thumbnail/Url'].text endend

Page 132: OSC2007-niigata - mashup

これで写真も取得できちゃう

Page 133: OSC2007-niigata - mashup

最後にこれをマッピング

Page 134: OSC2007-niigata - mashup

<div><strong><%=h onsen.name %></strong></div><div><%=h onsen.address %></div><div style="height: 120px"><%= image_tag(onsen.photo) rescue 'No photo' %></div>

Page 135: OSC2007-niigata - mashup

これで吹き出しに写真が出た

Page 136: OSC2007-niigata - mashup
Page 137: OSC2007-niigata - mashup
Page 138: OSC2007-niigata - mashup

写真合ってない・・・

Page 139: OSC2007-niigata - mashup

ひとまずこれで完成

Page 140: OSC2007-niigata - mashup

不満点が沢山

Page 141: OSC2007-niigata - mashup

遅い!

Page 142: OSC2007-niigata - mashup

キャッシュで改善

Page 143: OSC2007-niigata - mashup

新潟以外は?

Page 144: OSC2007-niigata - mashup

選べるようにしましょう

Page 145: OSC2007-niigata - mashup

コメントとかは?

Page 146: OSC2007-niigata - mashup

acts_as_commentableで

Page 147: OSC2007-niigata - mashup

携帯は?

Page 148: OSC2007-niigata - mashup

jpmobileで

Page 149: OSC2007-niigata - mashup

これを改善して自分温泉地図を作りませんか?

Page 150: OSC2007-niigata - mashup

スライドとソースはhttp://blog.masuidrive.jp/