요즘은 웹 기반의 솔루션들이 오픈 API를 많이 내놓고 있다. 오픈 API를 이용하면 갖가지 인터넷 정보검색은 물론 지도정보를 이용할 수도 있고, 블로그에 글도 올릴 수 있고, 구글 번역을 이용하면 문장 번역도 할 수가 있다. 구글 API는 특히나 방대하다. 아직 자세히 둘러 보지는 않았지만 YouTube도 API가 있고 Picasa, 구글 문서, 구글 캘린더도 다 API를 제공한다. 트위터와 페이스북, 미투데이 같은 SNS들도 오픈 API 형태의 기능제공을 하는 것으로 알고 있다. 앞으로 이런 오픈 API 형태로 접할 수 있는 기능들은 더욱 풍성해질 것이다.

오픈 API의 사용은 간단하다.

  1. http형태로 원하는 데이터를 요청하고,
  2. xml 형태로 요청한 데이터를 받는 것.

이게 전부다. 하지만 문제는 VC++에서는 http로 통신을 하기에도, xml 데이터를 파싱하기에도 자잘한 설정이 너무 많고 복잡하다는 점이다.

C++에서 http 통신을 하려면 WinHttp 계열의 API를 사용하는 것이 가장 기본적이다. 오픈 API 때문이 아니라 예전에 프로젝트에서 다른 작업을 할 때도 잠깐 썼던 적이 있는데, 아 뭐 어찌나 귀찮고 장황한지… 간단하게 사용할 인터페이스는 절대 못 된다.

Functions that create handles

http://msdn.microsoft.com/en-us/library/aa384270(v=VS.85).aspx

 

C++의 xml 파서는 여러 개가 있는데, 그 중에 가장 이름이 많이 알려진 게 MSXML, TinyXml 두 녀석일 듯 하다. 나는 MSXML은 써 본적 없고 TinyXml을 주로 썼는데, 적어도 게임업계 내 주변에서는 다들 TinyXml을 쓰는 거 같다. 하지만 암만 대세인 이 녀석도 아주 마음에 쏙 드는 인터페이스는 아니어서, xml 노드와 속성을 일일이 접근하는 귀찮은 과정이 많이 필요하다. ( http://sourceforge.net/projects/tinyxml/ )

그런데 요즘에 C#이랑 Linq를 공부하다가 OpenAPI 사용하는 코드를 한 번 찾아봤다. (http://chaoskcuf.com/132 )
대략 멍해졌다. C++로 대충 150~200줄 짤 거 같은 API 호출이 열 줄이면 끝난다.

   1: Console.Write("검색할 단어를 입력하세요 : ");
   2: string keyword = Console.ReadLine();
   3:  
   4: string url = "http://openapi.naver.com/search?key={0}&query={1}&target=...";
   5:  
   6: xdoc = XDocument.Load(string.Format(url, _apikey, keyword));
   7:  
   8: var result = from item in xdoc.Descendants("item")
   9:                 select new
  10:                 {
  11:                     Title = item.Element("title").Value,
  12:                     Link = item.Element("link").Value,
  13:                 };
  14:  
  15: int i = 1;
  16: foreach (var searchResult in result)
  17: {
  18:     Console.WriteLine("결과{0} : {1}", i++, searchResult.Title);
  19: }

Linq 문법과 C# 3.0의 Anonymouse Type (익명 타입) 의 엄청난 조화. 대.박.이.다.

Posted by leafbird 트랙백 0 : 댓글 1