マッシュアップ沖縄版 おまけ:opensocail

163
1時間で作ると 間に合わないので 45分で作る マッシュアップ 株式会社ワイズノット 増井 雄一郎

Upload: yuichiro-masui

Post on 19-Jan-2015

4.181 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: マッシュアップ沖縄版 おまけ:OpenSocail

1時間で作ると間に合わないので

45分で作るマッシュアップ株式会社ワイズノット 増井 雄一郎

Page 2: マッシュアップ沖縄版 おまけ:OpenSocail

今日の話題

Page 3: マッシュアップ沖縄版 おまけ:OpenSocail

WebAPI & mashup

Page 4: マッシュアップ沖縄版 おまけ:OpenSocail

マッシュアップで沖縄そばマップ

mixiに自分でアプリが組み込めるOpenSocial

Page 5: マッシュアップ沖縄版 おまけ:OpenSocail

Rails使ったことある人

Page 6: マッシュアップ沖縄版 おまけ:OpenSocail

自分でMashup

したことある人

Page 7: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 8: マッシュアップ沖縄版 おまけ:OpenSocail

Mashupマッシュアップ

Page 9: マッシュアップ沖縄版 おまけ:OpenSocail

音楽用語

Page 10: マッシュアップ沖縄版 おまけ:OpenSocail

Remixとの違い

Page 11: マッシュアップ沖縄版 おまけ:OpenSocail

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

Remix

Page 12: マッシュアップ沖縄版 おまけ:OpenSocail

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

Mashup

Page 13: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 14: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 15: マッシュアップ沖縄版 おまけ:OpenSocail

携帯と地図のMashup

Page 17: マッシュアップ沖縄版 おまけ:OpenSocail

Mashupとは

Page 18: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 19: マッシュアップ沖縄版 おまけ:OpenSocail

昔は無理矢理やっていた

Page 20: マッシュアップ沖縄版 おまけ:OpenSocail

HTML解析して・・・

Page 21: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 22: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 23: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 24: マッシュアップ沖縄版 おまけ:OpenSocail

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

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

Page 25: マッシュアップ沖縄版 おまけ:OpenSocail

なんで?

Page 26: マッシュアップ沖縄版 おまけ:OpenSocail

ビジネスモデルの変化

Page 27: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 28: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 29: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 30: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 31: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 32: マッシュアップ沖縄版 おまけ:OpenSocail

大別すると3種類

Page 33: マッシュアップ沖縄版 おまけ:OpenSocail

データ系

Page 34: マッシュアップ沖縄版 おまけ:OpenSocail

RSSAmazon Web Service

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

Page 35: マッシュアップ沖縄版 おまけ:OpenSocail

データを公開

Page 36: マッシュアップ沖縄版 おまけ:OpenSocail

ここの部分が多い

Page 37: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 38: マッシュアップ沖縄版 おまけ:OpenSocail

処理系

Page 39: マッシュアップ沖縄版 おまけ:OpenSocail

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

テキスト→MP3変換

Page 40: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 41: マッシュアップ沖縄版 おまけ:OpenSocail

表示系

Page 42: マッシュアップ沖縄版 おまけ:OpenSocail

Google MapsNIFTY Timeline

べつやくメソッドAPI

Page 43: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 44: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 45: マッシュアップ沖縄版 おまけ:OpenSocail

Controllerをどうやって作る?

Page 46: マッシュアップ沖縄版 おまけ:OpenSocail

既存の手法と同じ

Page 47: マッシュアップ沖縄版 おまけ:OpenSocail

PHP, Perl, Ruby, Java....

Page 48: マッシュアップ沖縄版 おまけ:OpenSocail

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

PHPは不利

Page 49: マッシュアップ沖縄版 おまけ:OpenSocail

そこで我らがRuby on Rails

Page 50: マッシュアップ沖縄版 おまけ:OpenSocail

救世主

Page 51: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 52: マッシュアップ沖縄版 おまけ:OpenSocail

WebAPIを楽にするActiveResource

Page 53: マッシュアップ沖縄版 おまけ:OpenSocail

Rails2.0から標準添付

Page 54: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 55: マッシュアップ沖縄版 おまけ:OpenSocail

しかしActiveResourceは

Page 56: マッシュアップ沖縄版 おまけ:OpenSocail

Rails 対 Rails にしか使えない

Page 57: マッシュアップ沖縄版 おまけ:OpenSocail

別の方法を考えよう

Page 58: マッシュアップ沖縄版 おまけ:OpenSocail

さてMashupで何を作る?

Page 59: マッシュアップ沖縄版 おまけ:OpenSocail

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

募って

Page 60: マッシュアップ沖縄版 おまけ:OpenSocail

「北海道温泉マップ」

Page 61: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 62: マッシュアップ沖縄版 おまけ:OpenSocail

これをマッピング

Page 63: マッシュアップ沖縄版 おまけ:OpenSocail

なので沖縄では

Page 64: マッシュアップ沖縄版 おまけ:OpenSocail

「沖縄温泉マップ」

Page 65: マッシュアップ沖縄版 おまけ:OpenSocail

でも沖縄温泉ないじゃん!

Page 66: マッシュアップ沖縄版 おまけ:OpenSocail

そこで・・・

Page 67: マッシュアップ沖縄版 おまけ:OpenSocail

沖縄そばマップ

Page 68: マッシュアップ沖縄版 おまけ:OpenSocail

沖縄そば大好きなんです!

Page 69: マッシュアップ沖縄版 おまけ:OpenSocail

まず必要なのは沖縄そば屋の情報

Page 70: マッシュアップ沖縄版 おまけ:OpenSocail

どこから持ってくる?

Page 71: マッシュアップ沖縄版 おまけ:OpenSocail

ぐるなび

Page 72: マッシュアップ沖縄版 おまけ:OpenSocail

グルメ情報サイト

Page 73: マッシュアップ沖縄版 おまけ:OpenSocail

APIも公開している

Page 74: マッシュアップ沖縄版 おまけ:OpenSocail

APIのページを読む

Page 75: マッシュアップ沖縄版 おまけ:OpenSocail
Page 76: マッシュアップ沖縄版 おまけ:OpenSocail

API使うには登録がいる

Page 77: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 79: マッシュアップ沖縄版 おまけ:OpenSocail

XMLで帰ってくる

Page 80: マッシュアップ沖縄版 おまけ:OpenSocail
Page 81: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 82: マッシュアップ沖縄版 おまけ:OpenSocail

Railsを使えば一発!

Page 83: マッシュアップ沖縄版 おまけ:OpenSocail

とは行かない・・・

Page 84: マッシュアップ沖縄版 おまけ:OpenSocail

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

class GNavi attr_accessor :address, :name, :id, :lat, :lon

KEY = '4e900eb4fa92d4765040993687cdfe53' URL = 'http://api.gnavi.co.jp/ver1/RestSearchAPI/?'

def self.find(params) results = [] get(params).elements.each('response/rest') do |el| results << self.new(el.elements["id"].text, el.elements["name"].text, el.elements["address"].text, el.elements["latitude"].text, el.elements["longitude"].text) end results end

def self.url(params) params[:keyid] = 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, lat, lon) @id, @name, @address, @lat, @lon = id, name, address, lat, lon endend

Page 85: マッシュアップ沖縄版 おまけ:OpenSocail

これでAPIを使える

Page 86: マッシュアップ沖縄版 おまけ:OpenSocail

ちょっと読めないよね

Page 87: マッシュアップ沖縄版 おまけ:OpenSocail

詳細はWebで!

Page 88: マッシュアップ沖縄版 おまけ:OpenSocail

沖縄そばのお店リストを取り出す

Page 89: マッシュアップ沖縄版 おまけ:OpenSocail

irb> puts GNavi.find(:pref=>'PREF47', :name=>'沖縄そば').map{|o| o.name}.join(',')=>沖縄家庭料理と沖縄そばの店 <br>うかじそば,沖縄そば 家庭料理<br>てぃだ,沖縄そば・家庭料理と泡盛<br>あんまー家,沖縄そば専門店 与那原家,沖縄そば 手打ち 波人,沖縄そばと琉球料理の店

<BR>那覇そば 那覇亭,沖縄そば処 てんぷす,沖縄そば村 浜の屋

Page 90: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 91: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 92: マッシュアップ沖縄版 おまけ:OpenSocail

YM4R/GM

Page 93: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 94: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 95: マッシュアップ沖縄版 おまけ:OpenSocail

さっきのGNaviクラスはlib/gnavi.rbに保存

Page 96: マッシュアップ沖縄版 おまけ:OpenSocail

class SobaController < ApplicationController def index @map = GMap.new("map_div") @map.control_init :large_map => true, :map_type => true @map.center_zoom_init([26.21332,127.689843], 12) endend

Page 97: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 98: マッシュアップ沖縄版 おまけ:OpenSocail

これだけで地図表示

Page 99: マッシュアップ沖縄版 おまけ:OpenSocail
Page 100: マッシュアップ沖縄版 おまけ:OpenSocail

これにぐるなびでゲットしたお店をピンで打つ

Page 101: マッシュアップ沖縄版 おまけ:OpenSocail

これを地図に放り込む

Page 102: マッシュアップ沖縄版 おまけ:OpenSocail

class SobaController < ApplicationController def index @map = GMap.new("map_div") @map.control_init(:large_map => true, :map_type => true) @map.center_zoom_init([26.21332,127.689843], 12) GNavi.find(:pref=>'PREF47', :name=>'沖縄そば').each do |o|

begin marker = GMarker.new( [o.lat, o.lon], :title => o.name, :info_window => render_to_string( :partial => 'point', :locals => { :soba => o }) ) @map.overlay_init(marker) rescue end end end

Page 103: マッシュアップ沖縄版 おまけ:OpenSocail

吹き出しのHTMLも

Page 104: マッシュアップ沖縄版 おまけ:OpenSocail

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

Page 105: マッシュアップ沖縄版 おまけ:OpenSocail

できあがり

Page 106: マッシュアップ沖縄版 おまけ:OpenSocail
Page 107: マッシュアップ沖縄版 おまけ:OpenSocail

ひとまずこれで完成

Page 108: マッシュアップ沖縄版 おまけ:OpenSocail

不満点が沢山

Page 109: マッシュアップ沖縄版 おまけ:OpenSocail

情報が少ない!

Page 110: マッシュアップ沖縄版 おまけ:OpenSocail

店名に「沖縄そば」と入ってるモノしか検索していない

Page 111: マッシュアップ沖縄版 おまけ:OpenSocail

遅い!

Page 112: マッシュアップ沖縄版 おまけ:OpenSocail

キャッシュで改善

Page 113: マッシュアップ沖縄版 おまけ:OpenSocail

沖縄そば以外は?

Page 114: マッシュアップ沖縄版 おまけ:OpenSocail

選べるようにしましょう

Page 115: マッシュアップ沖縄版 おまけ:OpenSocail

コメントとかは?

Page 116: マッシュアップ沖縄版 おまけ:OpenSocail

acts_as_commentableで

Page 117: マッシュアップ沖縄版 おまけ:OpenSocail

携帯は?

Page 118: マッシュアップ沖縄版 おまけ:OpenSocail

jpmobileで

Page 119: マッシュアップ沖縄版 おまけ:OpenSocail

これを改善して自分グルメ地図を作りませんか?

Page 120: マッシュアップ沖縄版 おまけ:OpenSocail

最近、WebAPIで話題なのは・・・

Page 121: マッシュアップ沖縄版 おまけ:OpenSocail

OpenSocial

Page 122: マッシュアップ沖縄版 おまけ:OpenSocail

mixiなどSNSのWebAPI

Page 123: マッシュアップ沖縄版 おまけ:OpenSocail

友達一覧やその友達のblogのアドレスを取得できる

Page 124: マッシュアップ沖縄版 おまけ:OpenSocail

さらにSNSに自分の書いたアプリを組み込める

Page 125: マッシュアップ沖縄版 おまけ:OpenSocail

ブログパーツ↓

SNSパーツ

Page 126: マッシュアップ沖縄版 おまけ:OpenSocail

OpenSocialには2種類のWebAPIがある

Page 127: マッシュアップ沖縄版 おまけ:OpenSocail

ぐるなびと同じようにHTTPで呼び出すWebAPI

Page 128: マッシュアップ沖縄版 おまけ:OpenSocail

Google GadgetのようにJavaScriptからアクセスするAPI

Page 129: マッシュアップ沖縄版 おまけ:OpenSocail

現在公開されているのはJavaScriptのAPIのみ

Page 130: マッシュアップ沖縄版 おまけ:OpenSocail

友達リストを表示するパーツを作る

Page 131: マッシュアップ沖縄版 おまけ:OpenSocail

パーツを作るのに必要なモノ

Page 132: マッシュアップ沖縄版 おまけ:OpenSocail

XMLファイルが一つその中にコードを書く

Page 133: マッシュアップ沖縄版 おまけ:OpenSocail

<?xml version="1.0" encoding="UTF-8" ?><Module> <ModulePrefs title="Example"> <Require feature="opensocial-0.5"/> </ModulePrefs> <Content type="html"> <![CDATA[~コード~ ]]> </Content></Module>

Page 134: マッシュアップ沖縄版 おまけ:OpenSocail

そしてこのURLをSNSに読み込ませる

Page 135: マッシュアップ沖縄版 おまけ:OpenSocail

mixiはまだ対応してないのでorkutで

Page 136: マッシュアップ沖縄版 おまけ:OpenSocail

先ほどのXMLをサーバにアップして、そのURLを

orkutに入力

Page 137: マッシュアップ沖縄版 おまけ:OpenSocail
Page 138: マッシュアップ沖縄版 おまけ:OpenSocail
Page 139: マッシュアップ沖縄版 おまけ:OpenSocail
Page 140: マッシュアップ沖縄版 おまけ:OpenSocail

これで終わり!

Page 141: マッシュアップ沖縄版 おまけ:OpenSocail

HTMLとJavaScriptでできることなら何でもできる

Page 142: マッシュアップ沖縄版 おまけ:OpenSocail

でもコレならブログパーツと同じ

Page 143: マッシュアップ沖縄版 おまけ:OpenSocail

OpenSocialはそれだけじゃない!

Page 144: マッシュアップ沖縄版 おまけ:OpenSocail

SNS上の情報をJavaScriptで操作できる

Page 145: マッシュアップ沖縄版 おまけ:OpenSocail

OpenSocialで操作するデータは主に3種類

Page 146: マッシュアップ沖縄版 おまけ:OpenSocail

ユーザの属性や友達関係を操作する

People Data

Page 147: マッシュアップ沖縄版 おまけ:OpenSocail

日記などユーザの活動情報を操作する

Activity Data

Page 148: マッシュアップ沖縄版 おまけ:OpenSocail

SNSが保持しているデータを操作する

Persistence Data

Page 149: マッシュアップ沖縄版 おまけ:OpenSocail

どんなActivityや属性ががあり、操作できるかは

SNS次第

Page 150: マッシュアップ沖縄版 おまけ:OpenSocail

これでSNSとマッシュアップができる

Page 151: マッシュアップ沖縄版 おまけ:OpenSocail

友達リストを表示する

Page 152: マッシュアップ沖縄版 おまけ:OpenSocail

友達の名前が並んでプロフィールページへリンクされる

Page 153: マッシュアップ沖縄版 おまけ:OpenSocail
Page 154: マッシュアップ沖縄版 おまけ:OpenSocail
Page 155: マッシュアップ沖縄版 おまけ:OpenSocail

今の所People Data APIで取れるデータが少ない

Page 156: マッシュアップ沖縄版 おまけ:OpenSocail

でもプロフィール画面のURLがあれば

各種情報がスクレイピングできる

Page 157: マッシュアップ沖縄版 おまけ:OpenSocail

かと思いきやスクリプトの実行は別ドメインなのでスクレイピングは無理

Page 158: マッシュアップ沖縄版 おまけ:OpenSocail

SNSによっては友達をGoogle Mapsにマッピング

とかできるかも

Page 159: マッシュアップ沖縄版 おまけ:OpenSocail

まだ私もAPIを把握していないのでどこまでできるか分からない

Page 160: マッシュアップ沖縄版 おまけ:OpenSocail

mixiがどこまでやらせてくれるか非常に楽しみ

Page 161: マッシュアップ沖縄版 おまけ:OpenSocail

ポスペみたいのとかtwitterっぽいのが最初に出て流行るんじゃないかな?

Page 162: マッシュアップ沖縄版 おまけ:OpenSocail

2008年はSNSでマッシュアップが

流行る

Page 163: マッシュアップ沖縄版 おまけ:OpenSocail

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