Recent Post»

Recent Comment»

Archive»

« 2025/1 »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Google AJAX Feed API

카테고리 없음 | 2010. 6. 23. 01:18 | Posted by 블로장생

블로그 글을 구독하는 방법으로 주로 사용되는 feed라는 방식이 있다. 수 년 전에 RSS를 접했을 때에는 단순한 XML 형식이라고 생각했는데 다양한 분야에 활용되고 있는 것을 보면 놀라운 일이다.

ATOM, RSS 등의 feed 형식은 다음과 같은 분야에 쓰이고 있다.

  • 블로그 등의 구독용 피드 : 블로깅 시스템과 글이 매우 느슨한 관계를 형성하게 되었다.
  • 다양한 분야로의 확대 : MediaRSS, GeoRSS 등이 생김
  • 다양한 응답에 사용 : Open API에서 결과를 ATOM이나 RSS로 주는 경우가 있다. (예: Naver 검색 API)

Google AJAX Feed API는 무엇을 해 주나?

Feed를 대신 가져온다. ATOM, RSS 등의 종류나 버전에 상관없이 일정한 포맷으로 변환하여 가져온다. JSON을 기본으로 하면 XML 형식도 가져온다.

정리하면 다음과 같다.

  • 다양한 형식의 지원 : RSS, ATOM 모든 버전, MediaRSS
  • 자동 feed 검색  : 페이지에서 관련 feed용 URL을 찾아준다.
  • 캐시 : 자체적인 FeedFetcher의 결과를 가져오기 때문에 최신의 내용과 차이가 있을 수 있다. 1시간 안에는 다시 가져오기 때문에 크게 문제는 되지 않는다. 더구나 v2에서는 pubsubhubbub을 이용한 PUSH까지 지원한다고 한다.

사이트에서 직접 가져올 수도 있는데 왜 Google Feed API를 사용해야 하나?

XSS등의 보안 문제로 브라우저는 HTML을 가져온 사이트 이외에서는 데이터를 가져오더라고 서로 접근을 못하게 하고 있다. 이를 피하는 거의 유일한 방법은 script tag를 런티임에 추가하여 원하는 결과를 얻는 것이다. 매우 성가신 작업이며 서버에서 javascript 의 형태로 응답을 해야 한다는 단점이 있다. 이런 것을 google API가 간단히 해결해 준다. Google는 자신의 서버에 요청을 하고 google 서버는 해당 서버로 요청을 하거나 캐시된 결과를 돌려준다. 물론 응답은 javascript로 한다.

다음은 google API가 google 서버를 통해서 받는 응답의 일부이다. javascript의 callback 함수의 인자 형태로 응답을 하고 있는 것을 알 수 있다. 이런 내용은 google API가 내부적으로 처리를 하고 있는 것이다.

google.feeds.Feed.RawCompletion('0',{"feed":{"feedUrl":"http://feeds.feedburner.com/blogspot/RBev","title":"Google AJAX Search API Blog","link":"http://googleajaxsearchapi.blogspot.com/","author":"A Googler","description":"Your official source on the AJAX Search API.","type":"atom10","entries":[{"title":"Google Feed API — Now with instant gratification","link":"http://feedproxy.google.com/~r/blogspot/RBev/~3/Ga_gAUnW_Xw/google-feed-api-now-with-instant.html","author":"Adam Feldman","publishedDate":"Wed, 19 May 2010 09:19:00 -0700","contentSnippet":"One of Google's most popular APIs is our Feed API. This API is found

API 설명

다음은 샘플 코드의 일부에 사용된 getElementsByTagNameNS 함수의 사용 예이다. 여기서 NS는 Name Space를 뜻하는데 XML element중에 특정 name space를 지정해서 element를 찾을 데 사용하면 좋다.

google.feeds.getElementsByTagNameNS(items[i], "http://digg.com/docs/diggrss/", "diggCount")[0];

관련 XML은 다음과 같다.


<rss xmlns:digg="http://digg.com/docs/diggrss/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnames
pace.org/feedburner/ext/1.0" version="2.0">
<channel>
…   
   <digg:diggCount>136</digg:diggCount>

http://digg.com/docs/diggrss/ 에서 digg를 찾아내고 digg:diggCount를 찾는 과정을 한 번에 해결하고 있다.

Javascript에서 XML name space를 다루는 것은 알려진 문제이며 이 문제를 쉽게 해결해 주기 위한 sarissa 같은 라이브러리도 있다. 이것도 DOM level 2를 지원하지 않는 IE 때문인 것 같다.

: