xReader 소개
xReader는 YQL을 경유하여 자바스크립트로 제약없이 외부 컨텐츠를 불러오게 만들어진 함수입니다.
- 버전 : v0.0.78a - 2012-11-13
- 라이선스 : MIT 허가서
- 소스
xReader.full.js - 일반 버전
xReader.micro.js - 최소 버전 (option 미지원, 725 byte)
xReader.xml - YQL 사용의 open data table - 만든이
SD05 (블로그),
oneiroi@outlook.com - 문서
xReader 영문 데모
제한 철폐!
타 리소스를 접근 제약으로 인한 지독한 고생? 그에 대한 최후 해결책!
- 철폐! XHR의 동일출처정책! (Same-Origin policy)
- 철폐! XHR의 CORS 미지원 구형 IE6, IE7, IE8 브라우저 대응!
- 철폐! window 및 frame의 도메인 제약! document.domain
- 철폐! 마지막으로 YQL의 robots.txt 제약!
아주 간단한 xReader를 사용하면서 바로 위의 제약을 해결할 수 있습니다!
xReader 사용방법
<script type="text/javascript">
xReader("http://www.yahoo.com/", function(data) {
alert(data.content);
})
xReader.micro.js나 xReader.full.js만 다운받아 사용하시면 됩니다.
xReader 특징
xReader는 구형 IE5.5부터 대부분 브라우저를 지원, charset의 인식 및 redirect 부분도 처리하고 있습니다.
- 대부분 브라우저 지원 : IE5.5~, Safari, Chrome, Firefox, Opera, Netscape Navigator9 테스트
- charset 의 자동 및 강제 설정 지원
- redirect 자동 처리
- css selector 사용 가능 (XML에 적합)
- html, xml, json, jsonp 등 다양한 텍스트형식 컨텐츠 지원
xReader API
• [string] URL
- 필수 인자, 문자열 형식, "http://"는 생략 가능
- URL은 리소스 대상의 위치를 말합니다.
• [string] CSS
- 생략 가능, 문자열 형식
- CSS는 CSS 선택자로 해당 리소스의 대상을 제한할 수 있습니다.
- 일부 페이지에서 오류 가능성이 있기에 미리 충분히 검토를 해야합니다.
• [function] callback(data)
- 필수 인자, 함수 형식
- callback 함수는 해당 컨텐츠의 로딩이 완료된 후 실행되는 함수입니다.
- callback 함수로 전달 받는 인자는 다음과 같이 구성됩니다.
headers : [obeject], // 응답 HTTP 헤더
content : "컨텐츠"
format : "컨텐츠 형식"
original : [obeject] //본래 원본 데이타
redirect : { // Redirect시 생성 객체 (2개 이상이면 배열 형식)
from : "URL",
to : "URL",
status : "" // 응답 code
},
url : "URL", // Redirect시 최종 URL
date : [date], // content 생성 시각
statue : "", // 상태
status : "200", // 응답 CODE
error : [obeject], // 에러 발생시 생성
YQL : [obeject] // YQL 정보
xReader : [obeject], // xReader 정보
option : [obeject], // 사용자 설정 옵션 정보
maxAge : [number] // maxAge 설정시 처리된 값
}
• [object] option
- 생략 가능, 객체 형식
- option은 xReader.full.js에서만 지원됩니다.
option | 설명 | 기본값 및 가능값 |
---|---|---|
cacheBurst | 캐쉬 미사용 [참고: YQL BLOG] | false | true |
charset | 전송시 사용할 charset (준비중) | undefined | [string] |
content | data의 전송 (준비중) | undefined | [string] |
contentType | 전송시 사용할 content-type (준비중) | undefined | [string] |
cookie | 대상 http 요청시 사용 cookie | undefined | [object] |
css | 출력 대상의 css selector 형식으로 선택 | undefined | [string] |
diagnostics | YQL 진단 검사 | false | true |
format | 최종 결과(data.content)의 형식에 대한 처리 | "text" | "json" | "dom" | "dom2" |
forceCharset | 대상 소스의 charset 강제 지정 | undefined | [string] |
fallbackCharset | 대상 소스의 charset 호환 | "utf-8, euc-kr, iso-8859-1" | [string] |
headers | 대상 http 요청시 사용 header | undefined | [object] |
link | xReader와 YQL의 연결 방식 | "auto" | "ajax" | "jsonp" |
method | YQL과 대상의 연결 방식 | "get" | "post" | "head" | "put" |
maxAge | 임의 시간내 캐쉬 우선 사용 (단위, 초) | undefined | [number] |
maxAgeGlobal | 임의 시간내 캐쉬 우선 전역 사용 (단위, 초) | undefined | [number] | "reset" |
query | 새로 사용할 YQL의 Query | undefined | [string] |
param | url의 추가 param의 사용 | undefined | [object] |
referer | referer 설정 | undefined | [string] |
ssl | xReader와 YQL의 SSL연결 | false | true |
table | open data table의 지정 | "http://kincrew.github.com/xReader.xml" | [string] |
target | callback 반환값을 해당 DOM 요소에 출력 | undefined | [object] |
tidy | 결과 반환시 element의 parse | false | true |
timeout | 타임아웃 시간(ms단위) | 10000 | [number] |
ua | ua 설정 ("current"사용시, 현재 ua 사용) | undefined | "current" | [string] |
xpath | 출력 대상의 xpath 형식으로 선택 | undefined | [string] |
- [cacheBurst]
과도한 사용은 YQL로 부터 제약 및 차단될 수 있으니 주의하세요. (참고, YQL BLOG)
예외적 케이스로 제한된 범위내에 확인 용도로 사용되기를 권합니다. - [maxAge, maxAgeGlobal]
설정히 해당 시간(단위, 초)내 접근은 저장된 캐쉬로 다시 사용합니다.
동일 대상, 값의 변경시 해당 범위내에 자동으로 reset 됩니다.
- [tidy, css, xpath 사용시]
tidy는 오류가능성이 있기에 사전에 충분히 테스트 후 이용하시기 바랍니다.
css 및 xpath 옵션 사용시, 내부적으로 tidy 처리되기에 사정은 같습니다. - [timeout]
xReader.timeout으로 전체 설정할 수 있습니다.
유용한 간단 예제들
HTML
xReader("news.naver.com", "dl.mtype_head dt a", function(data){
alert(data.content);
})
[참고1] xReader.micro.js 버전도 위와 같은 CSS selector 사용 방법을 지원합니다.
[참고2] xpath를 이용한 트릭으로 text만 받아올 수 있습니다. "dl.mtype_head dt a" -> "dl.mtype_head dt a/text()"
JSON / JSONP
var url = "http://api.flickr.com/services/feeds/photos_public.gne?";
url += "tags=cat&tagmode=any&format=json";
xReader(url, function(data){
var items = data.content.items;
var html = "";
for (var i=0; items.length > i ;i++ ) {
html += "<div>" + items[i].description + "</div>";
}
return html;
},
{
format : "json", // 대상 변환 형식
target : document.getElementById("exDemoResult4") // 출력 대상
})
[참고3] option.format을 json 설정시 객체로 변환되며, json과 jsonp의 구별없이 자동 인식됩니다.
[참고4] option의 target이 설정되고 callback 함수의 return 값이 있다면, return 값은 target 요소 내부로 바로 추가됩니다.
RSS / XML
xReader("www.khan.co.kr/rss/rssdata/total_news.xml", "title", function(data) {
return "<ul>" + data.content.replace(/title/gi, "li") + "</ul>"
}, { target : document.getElementById("exDemoResult5") })
FAQ
-
xReader.micro.js 와 xReader.full.js의 차이는 option의 사용여부에 있습니다.
xReader.micro.js 는 컨텐츠만 불러오는데 유용한 간결하고 짧은 코드입니다.
기타
본 소스는 YQL을 이용하며 open data table을 사용합니다. open data table의 기존 data.headers의 오류 및 확장한 xReader.xml 테이블을 사용합니다. 보다 다양한 기능을 원한다면, xClient(작업중)를 이용하면 되겠습니다.
HISTORY
- 2012-11-16 :
[xReader.micro.js] 771 byte! - 2012-11-15 :
[xReader.micro.js] document.close() 추가. IE6의 무한로딩 방지 FIX! - 2012-11-14 :
[xReader.micro.js] timeout 오류 fix!
[DCOUMENT] 영문 메인 index.html 작성 완료
[xReader.micro.js] 자동 cacheBurst 제거, 구별 table 사용, 내부 id 작동 제거
[xReader.js] xReader.js 삭제(예정) —› xReader.micro.js로 제공 - 2012-11-13 : v0.0.78a
[xReader.demo.html] 문서 정리, update
[xReader.full.js] 콜백 함수 반환 인자 정리 및 단일화
[xReader.full.js] cacheBurst 기본값 —› 비활성 상태로 변경
[xReader.full.js] domain에 따른 독자 table 사용 방식으로 변경
[xReader.full.js] UPDATE 미반영 테이블 사용 문제 FIX
[xReader.full.js] maxAge 적용, maxAgeGlobal 적용
[xReader.full.js] link 적용 (XHR, XDR, JSONP 적용)
[xReader.full.js] 독자 error 콜백 사용 제거 —› 기존 콜백 반환 인자로 오류 검출
[xReader.full.js] 코드정리
[xReader.xml] 저장 위치를 root로 원위치
[xReader.xml] 코드정리, maxAge 부분 제거 —› xReader.full.js에서 사용자 설정
- 2012-11-10 : v0.0.77a
[xReader.full.js] callback 전역 —› xReader 메서드로 변경
[xReader.full.js] headers 반환 Fix
[xReader.full.js] option.method 확장
[xReader.xml] uri 변경 (YQL의 미업데이트 때문)
[xReader.full.js] option.diagnostics 추가 - option.debug에서 결과 반환
[xReader.xml] HTTP 객체 형식 헤더 처리 변경 (JSON 프로퍼티 객체)
- 2012-11-06 : v0.0.76a
[xReader.full.js] format 차이 없이 인자 반환 (header 생략 방지 필요)
[xReader.full.js] option 추가 (charset, fallbackCharset, xpath 적용)
[xReader.full.js] option.format에서 json 제거 (jsonp 자동 인식)
[xReader.xml] 업데이트 및 위치 변경 (root —› root/yql)
[xReader.js] timeout 추가 - 2012-11-04
[xReader.full.js] format 지원(json, jsonp, dom, dom2), target 지원
[xReader.xml] JSONP 오류 수정, DATA TABLE —› param 사용 중지, http:// 자동추가는 테이블로
지원 및 연락처
사용시 문제 및 추가 지원이 필요하다면 oneiroi@outlook.com나 블로그로 연락하시기 바랍니다.
powered by Yahoo! Query Language