Upload
jinho-jung
View
2.909
Download
0
Embed Size (px)
DESCRIPTION
멋진 웹 Apps위해 필요한 것들 그런데 삽질은 하고 싶지 않아요!Pipes : Data의 수집과 가공을 한방에!YQL : Pipes를 개선, SQL 형식의 웹 데이터 처리 도구“더 많이 나누어 줄 수록 더 좋은 일이 생겼습니다”
Citation preview
Y!Pipes & YQL활용하기
Yahoo! Developer Network
정진호2009.08.25
강사 소개 : 정진호, Jinho Jung
• 일–야후 개발자 네트워크
Technical Evangelist
– YDN KR Blog 운영‣ ydnkrblog.com
– YDN KR Twitter 운영‣ twitter.com/ydnkr
• 개인– phpschool.com (’98~05, 8년)
– lovesera.com 운영 (2001년~)
– Twitter, @phploveme
멋진 웹 Apps위해 필요한 것들
1
Data 소스
Open APIRSS,XML
HTML
2
Data 가공
PHPASPJSP기타
3
멋진 UI
FlashSilverlightCSS/JS
YUI
멋진 아이디어
Flickr의 멋진 사진을 찾아서관련된 지역 정보와 함께
지도 위에서 보여 주고 싶어요.아! 날씨도 함께~
그런데 삽질은 하고 싶지 않아요!var map = new YMap(document.getElementById('map')); … var currentGeoPoint = new YGeoPoint( _c.Lat, _c.Lon ); map.addMarker(currentGeoPoint); …
… if (flickcurl_prepare(fc, "flickr.photos.geo.correctLocation", parameters, count)) { … } …
http://search.yahooapis.com/ ImageSearchService/V1/imageSearch? appid=YahooDemo&query=Corvette&results=2
http://weather.yahooapis.com/ forecastrss?p=FRXX0076&u=c
?
?
?
?
YQL의 역할
SELECT* FROMInternet
YQL
Data의 수집과 가공을 한방에!
비주얼 에디터 기반의웹 데이터 가공 도구
NHN
DAUM
Yahoo!
MS
Web Data
RSS
JSON
HTML
PHP
Badge
멋진 UI
FlashSilverlightCSS/JS
YUI
Pipes 작업 흐름
Y!Pipes 화면 구성
Canvas
DebuggerHelp
Library선택된 모듈
Output 데이터http://pipes.yahoo.com/phploveme/yuiyql
Widget 블로그에 넣기
DEMO : Daum + Naver Blog 검색pipes.yahoo.com/phploveme/yuiyql
Yahoo Pipes 따라하기• DEMO Pipes URL – http://pipes.yahoo.com/phploveme/yuiyql
• Daum Blog 검색 URL– http://apis.daum.net/search/blog?apikey=[APIKEY]&q=트위터
• Naver Blog 검색 URL– http://openapi.naver.com/search?key=[APIKEY]&target=blog&query=트위터
• 사용한 모듈 – 검색어 입력
User Input - Text Input– 검색 URL 만들기
Url - URL Builder String - Private String Source - Fetch Feed
– 검색 결과 조합 Operator - Union Operator - Sort
Pipes 장점•다양한 데이터 소스 이용•손쉬운 프로토타입 제작•빠른 네트워크 Access
•코딩 불필요•풍부한 모듈 및 샘플
Pipes를 개선, SQL 형식의 웹 데이터 처리 도구developer.yahoo.com/yql
YQL
Yahoo! Query Language
•사용가능한 데이터 소스–social, flickr, geo, local, weather –mybloglog, search, upcoming, yahoo–HTML, RSS, XML, JSON, CSV + Community Open Data Table(177)
Yahoo! 프로필
프로필
친구업데이트
YQL : social.profile
select * from social.profile where guid=me
flickr : 사진 검색
YQL : flickr.photos.search
RSS 읽어오기
select * from rss where url='http://ydnkrblog.com/blog/?feed=rss2'
IP/지역 알아내기
select * from ip.location where ip='222.122.195.6'
트위터 읽기
트위터 읽기
select * from twitter.user.status where id='ydnkr'
[ 따라하기]
YQL Flickr Widget만들기
YQL : Flickr Search
YQL : Flickr Photo Widget , yql-image.php<?php$yql = "select * from flickr.photos.search where safe_search='true' and text='yahoo korea'";
$uri = "http://query.yahooapis.com/v1/public/yql?q=".urlencode($yql)."&format=xml";$sxml = simplexml_load_file($uri);
header('Content-Type: text/html; charset=utf-8');
foreach($sxml->results->photo as $photo){ $uri = 'http://farm' .$photo['farm'] .'.static.flickr.com/' .$photo['server'].'/' .$photo['id'].'_' .$photo['secret'] .'_m.jpg'; $html[] = $photo['title'].'<br/>'; $html[] = '<img src="'.$uri.'"/><br/>';}echo implode("\n", $html);?>
실행결과http://sandbox.jemr.net/yql-image.php
Source : http://sandbox.jemr.net/yql-image.phps
실행결과 + YUI
http://sandbox.jemr.net/yql-image-yui.php
소스,http://sandbox.jemr.net/yql-image-yui.phps
Insert / Update / Delete
•웹상의 데이터 수정가능• Remote Web Service 가능–트위터 업데이트, 블로그 포스팅
•사용자 정의 Open Data Table 활용
use ‘http://mysite.com/table.xml’ as tableName;
select * from tableName where key=‘value’...
[ 따라하기]
INSERT 하기
Twitter Insert 3 단계• 1. Open Data Table (XML) 정의– Ex: http://sandbox.jemr.net/yql-twitter-status.xml
• 2. YQL 실행
• 3. Twitter 에서 실행 결과 확인
use "http://sandbox.jemr.net/yql-twitter-status.xml" as table; insert into table (username, password, status) values('yqltesting','****','YQL-Twitter Test !!! ');
1. Open Data Table 정의 yql-twitter-status.xml<?xml version="1.0" encoding="UTF-8"?>
<table xmlns="http://query.yahooapis.com/v1/schema/table.xsd"><meta> <sampleQuery>select * from {table}</sampleQuery></meta><bindings> <select itemPath="" produces="XML"> <urls><url>http://twitter.com/statuses/show/{id}.xml</url></urls> <inputs> <key id="username" type="xs:string" required="false" paramType="variable" /> <key id="id" type="xs:string" required="false" paramType="path" /> </inputs> <execute><![CDATA[ var r = null; if (username) { var query = y.query('select * from twitter.user.timeline where id="'+username+'";'); var result = <twitter/>; for each (var twit in query.results.entry) { result.appendChild(twit); } response.object = result; } else { r = request.get().response; response.object = r; } ]]></execute> </select> <insert itemPath="" produces="XML"> <urls><url>http://twitter.com/statuses/update.xml</url></urls> <inputs> <key id="username" type="xs:string" required="true" paramType="variable" /> <key id="password" type="xs:string" required="true" paramType="variable" /> <key id="status" type="xs:string" required="true" paramType="variable" /> </inputs> <execute><![CDATA[ var r = null; y.include("http://yqlblog.net/samples/base64.js"); var authheader = "Basic " + Base64.encode(username+":"+password); var content = "status="+status; r = request.header("Authorization", authheader).post(content).response; response.object = r; ]]></execute> </insert> <delete itemPath="" produces="XML"> <urls><url>http://twitter.com/statuses/destroy/{updateid}.xml</url></urls> <inputs> <key id="username" type="xs:string" required="true" paramType="variable" /> <key id="password" type="xs:string" required="true" paramType="variable" /> <key id="updateid" type="xs:string" required="true" paramType="path" /> </inputs> <execute><![CDATA[ var r = null; y.include("http://yqlblog.net/samples/base64.js"); var authheader = "Basic " + Base64.encode(username+":"+password); response.object = request.header("Authorization", authheader).del().response; ]]></execute> </delete></bindings></table>
2. INSERT into Twitter use "http://sandbox.jemr.net/yql-twitter-status.xml" as table; insert into table (username, password, status) values('yqltesting','***','YQL-Twitter Test !!! ');
3. Twitter 결과 확인http://twitter.com/yqltesting
커뮤니티 데이터 테이블 (177)http://www.slideshare.net/phploveme/ignite-seoul-intro
커뮤니티 데이터 테이블 : Slideshare.netselect * from slideshare.transcript where url="http://www.slideshare.net/phploveme/ignite-seoul-intro"
결론• YQL을 이용한 개발– 간단한 소스코드– 데이터 처리의 분리– 모든 데이터에 대한 일관된 Syntax
– Interactive 개발 환경•빠른 어플리케이션을 위해
–parallel requests 이용–Request / Data Size : 필요한 만큼만
“더 많이 나누어 줄 수록더 좋은 일이 생겼습니다”- 에반 윌리엄스 , Twitter 창업자
Evan Williams,@ev
ThanksDeveloper.yahoo.com
ydnkrblog.com