지난 번에 C# 3.0의 Linq를 이용해 네이버 오픈 API를 호출하는 예제 코드를 올린 적이 있다. ( http://devnote.tistory.com/199 ) 이번에는 node.js의 클라이언트 기능을 이용하여 네이버의 오픈API를 호출해 보았다.
네이버 API는 예제로 사용하기 좋게 심플해서 좋다. 인증 절차도 다른 것 없이 개인 인증키만 파라미터로 같이 넘겨주면 되니까, 결국은 특정 url로 request를 보내고 XML 포맷으로 된 response를 받는게 전부인 셈이다.
요즘은 API의 응답이 json인 경우가 많지만(트위터, 페이스북은 모두 json임), xml을 다루는 일도 많으니 xml을 파싱하는 코드를 알아두는 것도 도움이 된다.

node.js를 웹 클라이언트로 사용하려면 자체 모듈 http만 있으면 된다. 웹소켓까지 사용할 필요도 없다.
xml 포맷을 다루는 것은 기본으로 제공되는 모듈은 없는 듯. 하지만 자바 스크립트 라이브러리는 요즘 널리고 널렸다. 구글링 해보다가 괜찮아 보이는 녀석이 있어서 이것을 사용했다. ( http://www.thomasfrank.se/xml_to_json.html )

2010년 12월호 마이크로소프트웨어에 나온 자료에 보면 node.js를 이용해서 트위터 API를 이용하는 코드가 나오는데, 여기에서 사용한 http.createClient는 지금은 deprecated 되었다. 현재 버전(0.5.9) 기준의 인터페이스로는 http client 객체를 따로 생성할 것없이 http.get 함수만으로 처리 가능하다. (post 방식이 필요한 경우는 http.requst 사용)

   1: http = require( "http" )
   2: sys = require( "util" )
   3: tojson = require( "./xml2json.js" )
   4: fs = require( "fs" )
   5:  
   6: apikey = "…";
   7: query = "검색어";
   8:  
   9: var options = {
  10:   host: 'openapi.naver.com',
  11:   port: 80,
  12:   path: '/search?key='+apikey+'&query='+query+'&display=10&start=1&target=webkr'
  13: };
  14:  
  15: http.get(options, function(response){
  16:         var body = "";
  17:         response.addListener('data', function(chunk)
  18:             {
  19:                 sys.debug("response...");
  20:                 body += chunk;
  21:             });
  22:         response.addListener('end', function()
  23:             {
  24:                 sys.debug("end...");
  25:  
  26:                 jsonObj = xml2json.parser( body );
  27:  
  28:                 for( itemName in jsonObj.rss.channel )
  29:                 {
  30:                     console.log( jsonObj.rss.channel[itemName] );
  31:                 }
  32:  
  33:                 fs.writeFileSync( 'result.txt', JSON.stringify(jsonObj) );
  34:  
  35:             });
  36:     }).on('error', function(e) {
  37:         console.log("Got error: " + e.message);
  38:     });
  39:  

apiKey 변수에 자신의 네이버 API 키값을, query 변수에 검색어를 넣고 실행하면 네이버 웹문서 검색을 한 후 돌려받은 데이터를 xml2json (26 line)을 이용해 json 포맷으로 변경한다.

변경한 데이터 중 실제 검색 데이터 내용 (jsonObj.rss.channel.item)을 콘솔에 출력하고, 리턴받은 결과 전체를 result.txt 파일로 저장한다.

한글을 검색하고 싶을 땐 query 변수에 한글을 그대로 적은 다음, js 파일을 utf-8로 저장하고 실행하면 검색된다.

Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요