狠狠撸
Submit Search
How to build 1 hour mashup site
?
2 likes
?
2,089 views
Yuichiro MASUI
Follow
1 of 145
Download now
Download to read offline
More Related Content
How to build 1 hour mashup site
1.
1時間で作る マッシュアップ 株式会社ワイズノット 増井 雄一郎
3.
↓Macbook pro
4.
↓Macbook pro Not 防水
5.
1時間以上かけてたら ゆだっちゃう
6.
搁补颈濒蝉使ったことある人
7.
自分でMashup したことある人
8.
サイトなんかも 公開しちゃってる人
9.
Mashup マッシュアップ
10.
音楽用语
11.
搁别尘颈虫との违い
12.
曲をいじったり くっつけるのが Remix
13.
歌詞はこっち メロディーはあっちで Mashup
14.
繋げるだけじゃなく 変えるだけじゃなく
15.
いろんなサイトを ごちゃまぜにしちゃえ
16.
携帯と地図の惭补蝉丑耻辫
18.
実は私なんかより 有名なMashupな人が 北海道にいる
19.
元道庁の黒田さん
20.
Sun × RECRUIT
Mash Up Award 最優秀賞 出張JAWS
22.
今日は来られない らしい
23.
残念!
24.
惭补蝉丑耻辫とは
25.
アプリケーションの 再構築
26.
昔は無理矢理 やっていた
27.
贬罢惭尝解析して???
28.
自分で使う分には 良いけど公開できない
29.
いまでもAPI公開して ないサイトのデータを 使うときにやる
30.
データが命! 勝手に使わせるなんて もってのほか!
31.
でもWeb2.0時代は サイト側がある程度 自由にデータや システムを使わせてくれる
32.
なんで?
33.
ビジネスモデルの変化
34.
データを囲い込んでも 換金する方法がない
35.
でもトラフィックは 広告で金になる
36.
サイトに誘導するため データを使おう
37.
その使わせてくれる 口がWebAPI
38.
色々なWebAPIが 提供されてきている
39.
大别すると3种类
40.
データ系
41.
RSS Amazon Web Service ホットペッパー Google検索 じゃらんnet
42.
データを公开
43.
ここの部分が多い
44.
既存にデータを 持っているところは 容易に展開できる為
45.
処理系
46.
スクリーンショット 形態素解析 テキスト→MP3変換
47.
データを投げると 何らかの処理を してくれる
48.
表示系
49.
Google Maps NIFTY Timeline べつやくメソッドAPI
50.
色々なデータを表示 する基盤
51.
ほとんどのAPIは MVCのMやVに相当
52.
Controllerを どうやって作る?
53.
既存の手法と同じ
54.
PHP, Perl, Ruby,
Java....
55.
ちゃんと作ると 非同期処理が多く PHPは不利
56.
そこで我らが Ruby on Rails
57.
救世主
58.
さすがはWeb2.0系 フレークワーク
59.
WebAPIを楽にする ActiveResource
60.
搁补颈濒蝉2.0から标準添付
61.
でもRails2.0が いつ出るかは謎
62.
しかし础肠迟颈惫别搁别蝉辞耻谤肠别は
63.
Rails 対 Rails
にしか 使えない
64.
别の方法を考えよう
65.
さてMashupで 何を作る?
66.
今日のお題は 「北海道温泉マップ」
67.
YMOZE-Yさんの リクエスト
68.
じゃらんが温泉情報 をWebAPIで公開
69.
これをマッピング
70.
どっから初めるかな
71.
まずは温泉情報を 持ってこよう
72.
础笔滨のページを読む
74.
API使うには 登録がいる
75.
APIキーをもらったら URLを叩くだけ
76.
http://jws.jalan.net/APICommon/ OnsenSearch/V1/? key=&l_area=010802 &count=1&xml_ptn=1
77.
齿惭尝で帰ってくる
79.
これをプログラムで ごにょごにょ???
80.
搁补颈濒蝉を使えば一発!
81.
とは行かない???
82.
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.?nd(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 end end
83.
これで础笔滨を使える
84.
ちょっと読めないよね
85.
详细は奥别产で!
86.
ニセコの温泉リストを 取り出す
87.
irb> puts Onsen.?nd(:count
=> 10, :s_area => '010802').map{|o| o.name}.join(',') =>いわない温泉,雷電温泉,朝日温泉,ニセコワイス高原温泉?(ニセ コ),ワイス温泉?(ニセコ),ひらふ温泉?(ニセコ),ニセコアンヌプリ 温泉?(ニセコ),ニセコ昆布温泉?(ニセコ),ニセコ薬師温泉...
88.
こっちはマシ
89.
このリストを Google Mapに入れる
90.
こっちはRubyの ライブラリがある
91.
YM4R/GM
92.
GoogleMaps APIを Railsで使うライブラリ
93.
$ 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
94.
さっきのOnsenクラスは lib/onsen.rbに保存
95.
class OnsenController <
ApplicationController def index @map = GMap.new("map_div") @map.control_init :large_map => true, :map_type => true @map.center_zoom_init([42.808783,140.684566], 11) end end
96.
<html> <head> <%= GMap.header %> <%=
@map.to_html %> </head> <body> <%= @map.div(:width => 600, :height => 400) %> </body> </html>
97.
これだけで地図表示
99.
これにじゃらんで ゲットした温泉を ピンで打つ
100.
Google Mapsでピンを 打つには緯度経度が 必要
101.
じゃらんAPIでは 住所しか持ってない
102.
そこで ジオコーディング
103.
住所から緯度経度を 割り出す
104.
これもGoogle Maps API の一つ
105.
YM4R/GMを使えば それも楽々
106.
ニセコ駅の緯度経度 を調べる
107.
irb> niseko =
Geocoding.get(‘ニセコ駅’) irb> niseko.?rst.latlon => [40.34575, -3.816734]
108.
Onsenクラスにコレを くっつける
109.
class Onsen ~中略~ def latlon Geocoding.get(@address).?rst.latlon end end
110.
これで2つのAPIを あっさりMashup
111.
これを地図に 放り込む
112.
class OnsenController <
ApplicationController def index @map = GMap.new("map_div") @map.control_init(:large_map => true, :map_type => true) @map.center_zoom_init([42.808783,140.684566], 11) Onsen.?nd(:count => 10, :s_area => '010802').each do |o| marker = GMarker.new( o.latlon, :title => o.name, :info_window => render_to_string(:partial => 'point', :locals => { :onsen => o })) @map.overlay_init(marker) end end end
113.
吹き出しの贬罢惭尝も
114.
<div><strong><%=h onsen.name %></strong></div> <div><%=h
onsen.address %></div>
115.
できあがり
117.
つまらない???
118.
温泉の写真も贴ろう
119.
写真と言えば Flickr
121.
もちろん奥别产础笔滨公开
122.
Ruby用バインドも 複数公開
123.
$ cd lib $
wget http://redgreenblu.com/?ickr/?ickr.rb $ vi ?ickr.rb # 57行目のAPIKEYを変更 $ cd ..
124.
試しに五色温泉の 写真を取得
125.
irb> ?ickr =
Flickr.new irb> photo = ?ickr.photos(:text => ‘ニセコ五色温泉’).?rst irb> photo.source('Thumbnail') =>http://farm1.static.?ickr.com/136/328193836_725a658789_t.jpg
126.
これもOnsenクラスに いれちゃう
127.
class Onsen ~中略~ def photo(size='Thumbnail') Flickr.new.photos(:text
=> @name.gsub (/(.*/,'')).?rst.source(size) end end
128.
これで写真も 取得できちゃう
129.
最後にこれを マッピング
130.
<div><strong><%=h onsen.name %></strong></div> <div><%=h
onsen.address %></div> <%= image_tag(onsen.photo.source(‘Thumbnail’)) rescue ‘No photo’ %>
131.
これで吹き出しに 写真が出た
133.
写真合ってない???
134.
ひとまずこれで完成
135.
不満点が沢山
136.
遅い!
137.
キャッシュで改善
138.
ニセコ以外は?
139.
選べるように しましょう
140.
コメントとかは?
141.
补肠迟蝉冲补蝉冲肠辞尘尘别苍迟补产濒别で
142.
携帯は?
143.
箩辫尘辞产颈濒别で
144.
これを改善して 自分温泉地図を 作りませんか?
145.
スライドとソースは http://blog.masuidrive.jp/
Download now