캠프가 많군요.
선거를 하는 것도 아니고, 캠프라는 말 뜻처럼 잠깐의 모임이겠지요.
오늘은 오픈마루에서 주관하는 Winter of Code의 참가자들 즉 멘토와 멘티가 만나는 자리입니다. 저는 상품 오픈API를 활용한 블로그 위젯만들기로 만나게 될 것입니다.

내일은 다음과 네이버가 주관하는 Mashup Camp 에 참가합니다.
가이드를 받으면서 리믹스라기보다는 매시업을 구축하는데 노력을 기울여 볼까 합니다.
플리커와 네이버지도의 연결 주제도 재미있을 것 같군요.
사용자 삽입 이미지
우측의 shop gallery 위젯이 페이지를 새로 고칠 때마다 바뀌는 것을 볼 수 있을 것입니다.
티스토리의 스킨 바꾸기에서 다음 스크립트만 삽입하면 됩니다.

<script src="http://www.okjsp.pe.kr/mashup/shopg.jsp">
</script>

확장자는 jsp 입니다만 브라우저에 저 주소를 호출해보면 자바스크립트만 나오는 것을 알 수 있습니다.

서버 쪽의 소스는 따로 설명해드리겠습니다. shopg.jsp 의 소스를 공개하면 다음과 같습니다.

<%@ page pageEncoding="utf-8"
    import="java.util.*, service1.*"%><%
        String q = "macbook";
        Map item = GetSearchResults.getItemByRandom(q);
%>
function showShopGallery() {
  var shopg_link = 'http://itempage.auction.co.kr/detailview.aspx?itemno=<%= item.get("itemId") %>';
  var shopg_image = 'http://image.auction.co.kr/itemimage<%= item.get("image") %>';
  var shopg_name = '<%= item.get("name") %>';
  var shopg_price = '<%= item.get("buyItNowPrice") %>';
  var htmlCode =
'<link rel="stylesheet" type="text/css" href="http://www.okjsp.pe.kr/mashup/style.css" />\
\
<table class="shopg"><tr>\
<td rowspan="2"><a \
href="'+shopg_link+'"><img \
src="'+shopg_image+'"></a></td>\
<td><div class="shopg_name">'+shopg_name+'</div></td>\
</tr>\
<tr>\
<td>'+shopg_price+'</td>\
</tr></table>\
';

  document.write(htmlCode);
}

showShopGallery();

키워드는 "macbook"입니다. 이것을 자바스크립트 호출시 부르도록 바꿀 수도 있습니다. 그건 따로 설명하겠습니다. 아주 기본적인 프로그램이기 때문에 예외적인 데이터 처리는 빠져있습니다. 보안, 캐싱, 문자열 처리 등의 안전장치들이 앞으로도 추가되어야 합니다.

서버쪽에서 어떤 변화가 있었는지 궁금하신 분들은 프로젝트 홈페이지의 소스들을 받아보세요. 커밋해 놓았습니다. http://code.google.com/p/shopgallery

블로그에서 자바스크립트를 호출하는 도메인이 다른데도 "Access Violation" 에러가 나오지 않고 정상적으로 동작하는 것을 보면 현재 도메인의 함수와 원격 도메인의 자바스크립트가 서로 상관하는 것이 없어서인듯 생각되는군요.

일단 화면단에서 가장 기본적으로 처리해야하는 것은 일단락 지겠습니다.
자바스크립트의 특징 중 하나는 위에서 아래로 해석되면서 실행되는 것입니다. 때문에 위에서 선언되지 않은 함수를 호출하면 undefined 라고 에러를 발생하게 됩니다. 그 함수가 바로 아래 빤히 보여도 말이죠. 때문에 함수의 선언은 상단에서 이뤄져야 합니다. 함수의 호출은 아래쪽에 위치해야 합니다.

동적으로 바꾼 자바스크립트 부분을 함수로 바꿔보겠습니다.

<script type="text/javascript">
function showShopGallery() {
  var shopg_link = 'http://itempage.auction.co.kr/detailview.aspx?itemno=A099090503';
  var shopg_image = 'http://image.auction.co.kr/itemimage/016/85/02/0168502107.gif';
  var shopg_name = '1+1고객행복상품07가을/에니팅그래픽티셔츠시즌2/R13552/남여공용/착불';
  var shopg_price = '8,900원';
  var htmlCode =
'<link rel="stylesheet" type="text/css" href="style.css" />\
\
<table class="shopg"><tr>\
<td rowspan="2"><a \
href="'+shopg_link+'"><img \
src="'+shopg_image+'"></a></td>\
<td><div class="shopg_name">'+shopg_name+'</div></td>\
</tr>\
<tr>\
<td>'+shopg_price+'</td>\
</tr></table>\
';

  document.write(htmlCode);
}
showShopGallery(); // 함수 호출
</script>


함수로 만드는 것은 아주 간단하게 끝났습니다.


관련글: http://okjsp.tistory.com/tag/openapi

[shopgallery] 개발 구조에서 일단 화면에 보이는 것을 만들었습니다. 이렇게 만들어진 화면에 컨텐츠를 자유롭게 바꾸기 위해서는 동적으로 html 태그가 만들어져야 합니다.

데이터가 들어가는 부분 외의 style영역은 따로 파일을 만들어도 좋을 듯 합니다.
다음과 같이 코드가 분리됩니다.

style.css

.shopg {
  border: 1px solid #88F;
  background-color: #FEE;
  padding : 1px;
}
.shopg img {
  border: 1px solid #88F;
  width : 65px;
}
.shopg td {
  font-size : 11px;
  width: 65px;
}
.shopg_name {
  height: 39px;
  overflow: hidden;
}

simple.html

<link rel="stylesheet" type="text/css" href="style.css" />

<table class="shopg"><tr>
<td rowspan="2"><a
href="http://itempage.auction.co.kr/detailview.aspx?itemno=A099090503"><img
src="http://image.auction.co.kr/itemimage/016/85/02/0168502107.gif"></a></td>
<td><div class="shopg_name">1+1고객행복상품07가을/에니팅그래픽티셔츠시즌2/R13552/남여공용/착불</div></td>
</tr>
<tr>
<td>8,900원</td>
</tr></table>


이제 simple.html 을 javascript를 이용해서 출력하도록 바꿔보겠습니다.
html에서는 모두 큰따옴표를 썼기 때문에 자바스크립트에서 문자열은 작은따옴표를 이용해서 둘러싸도록 하겠습니다.

자바스크립트 문자열의 특징은 자바와 다르게 줄 끝에 \ 를 붙여서 이어쓰기 할 수 있습니다. 때문에 이렇게 문자열을 만들 수 있습니다.
simple.html

<script type="text/javascript">
  var htmlCode =
'
<link rel="stylesheet" type="text/css" href="style.css" />\
\
<table class="shopg"><tr>\
<td rowspan="2"><a \
href="http://itempage.auction.co.kr/detailview.aspx?itemno=A099090503"><img \
src="/'>http://image.auction.co.kr/itemimage/016/85/02/0168502107.gif"></a></td>\
<td><div class="shopg_name">1+1고객행복상품07가을/에니팅그래픽티셔츠시즌2/R13552/남여공용/착불</div></td>\
</tr>\
<tr>\
<td>8,900원</td>\
</tr></table>\
';

  document.write(htmlCode);
</script>

일단 프로그램화 시키는 것은 성공했습니다. 이제 변수를 뽑아야죠.
'... href="http://itempage.auction.co.kr/detailview.aspx?itemno=A099090503"> ...'
위 코드가 다음과 같이 나눠집니다.
'... href="'+'http://itempage.auction.co.kr/detailview.aspx?itemno=A099090503'+'"> ...'
동적으로 변하는 부분의 양쪽을 문자열 덧셈표시로 바꾼 것이죠. ' 로 막고 + 붙이고 ' 로 다시 문자열 시작을 합니다. 이것을 변수처리해주면 됩니다.
var shopg_link = 'http://itempage.auction.co.kr/detailview.aspx?itemno=A099090503';
...
'... href="'+shopg_link+'"> ...'

코드를 바꾸면 다음과 같습니다.
simple.html

<script type="text/javascript">
  var shopg_link = 'http://itempage.auction.co.kr/detailview.aspx?itemno=A099090503';
  var shopg_image = 'http://image.auction.co.kr/itemimage/016/85/02/0168502107.gif';
  var shopg_name = '1+1고객행복상품07가을/에니팅그래픽티셔츠시즌2/R13552/남여공용/착불';
  var shopg_price = '8,900원';
  var htmlCode =
'<link rel="stylesheet" type="text/css" href="style.css" />\
\
<table class="shopg"><tr>\
<td rowspan="2"><a \
href="'+shopg_link+'"><img \
src="'+shopg_image+'"></a></td>\
<td><div class="shopg_name">'+shopg_name+'</div></td>\
</tr>\
<tr>\
<td>'+shopg_price+'</td>\
</tr></table>\
';

  document.write(htmlCode);
</script>

데이터의 1차 분리가 끝났습니다. 점점 프로그램 짜는 듯 느껴지십니까.

관련글: http://okjsp.tistory.com/tag/openapi


 

일단 시작한 프로젝트라 고민이 많이 됩니다.
WoC를 통해서 멘토 역할을 합니다만, 한 번도 이런 것은 해 본 적이 없어서 정확히 무엇을 해야하는지 모르겠습니다. 그냥 옆에서 감 놔라 배 놔라 훈수 두는 것도 멘토링이라고 할 수 있겠지만, 맘에 안듭니다.

각설하고, 애플리케이션의 구조는 3가지로 나눌 수 있습니다.
  1. 화면 (UI)
  2. 엔진 (비즈니스 로직)
  3. 데이터 (DB)

두 명 이상 개발하는 경우, 화면과 데이터로 나눠서 개발하는 방법과 업무별로 나눠서 개발합니다. 요즘같이 서버와 클라이언트로 각기 특화된 기술을 필요로 하는 경우 데이터 인터페이스를 맞춘 뒤에 나뉘어서 개발합니다. 즉 openAPI로 데이터를 빼오는 작업과 그렇게 만들어진 데이터를 화면에 보여주는 작업으로 양분할 수 있습니다.

엔진은 화면과 데이터를 연결해주는 역할을 합니다. 엔진을 역할에 따라 세분화할 수도 있는데, 그것은 애플리케이션의 규모나 개발자의 역량에 따라 달라집니다.

shopgallery의 기본데이터
이 애플리케이션의 목적은 상품을 블로그의 위젯에 보여주고 지름신이 발동하도록 길을 열어주는 것입니다. 즉 다음과 같은 데이터가 필요합니다.

  1. 상품이미지
  2. 상품명
  3. 가격
  4. 링크

이 데이터를 복수개로 가져갈 것이냐 하는 것은 확장된 개념으로 보겠습니다.
일단 하나의 상품이라도 보이게 되면 가장 기본적인 지름도구로서의 자격은 갖춘 것입니다.

CSS를 이용해서 레이아웃도 코딩하고 싶지만, 위젯 특성상 얹혀지는 페이지의 DOCTYPE 에 따라 예상치 못한 결과가 올 수 있기에 테이블구조의 형식으로 일단 만들어 봅니다.

<table class="shopg"><tr>
<td><a href="http://itempage.auction.co.kr/detailview.aspx?itemno=A099090503">
<img src="http://image.auction.co.kr/itemimage/016/85/02/0168502107.gif">
</a></td>
<td>1+1고객행복상품07가을/에니팅그래픽티셔츠시즌2/R13552/남여공용/착불</td>
<td>8,900원</td>
</tr></table>

사용자 삽입 이미지
이렇게 나옵니다. ^^; 좀 다듬어야겠죠.

<table class="shopg"><tr>
<td rowspan="2"><a href="http://itempage.auction.co.kr/detailview.aspx?itemno=A099090503">
<img src="http://image.auction.co.kr/itemimage/016/85/02/0168502107.gif">
</a></td>
<td><div class="shopg_name">1+1고객행복상품07가을/에니팅그래픽티셔츠시즌2/R13552/남여공용/착불</div></td>
</tr>
<tr>
<td>8,900원</td>
</tr></table>
<style type="text/css">
 .shopg {
    border: 1px solid #88F;
   background-color: #FEE;
   padding : 1px;
 }
  .shopg img {
    border: 1px solid #88F;
    width : 65px;
  }
  .shopg td {
    font-size : 11px;
    width: 65px;
    overflow: hidden;
  }
  .shopg_name {
    height: 40px;
  }
</style>

많이 길어졌습니다. ^^;
그나마 이것도 파이어폭스2.0만 제대로 보입니다.

사용자 삽입 이미지

일단 요기까지 올립니다.
숙제는 ie와 오페라에서 잘 보이는 것이겠죠. 아, 제 숙제입니다. ^^;


 

관련글 : http://okjsp.tistory.com/tag/openapi

WoC(Winter of Code)에서 함께 할 파트너가 정해졌습니다. 돌아오는 토요일에 처음 만나게 됩니다. 함께 진행하지 못하는 네분의 신청자분들에게 고마움과 미안함을 전합니다. 이 프로젝트가 어떻게 진행되는지는 프로젝트 홈페이지(http://code.google.com/p/shopgallery)를 통해서 확인할 수 있습니다.

사용자 삽입 이미지

구걸 코드에서 제공하는 오픈소스 프로젝트 호스팅 서비스를 이용해서 다음과 같은 일들을 진행할 수 있습니다.

  • 프로젝트 홈페이지
  • 다운로드 서비스
  • 위키
  • 이슈트래커
  • 소스버전관리 - subversion
  • 프로젝트 멤버 관리
비슷한 류의 원조격인 서비스는 sourceforge.net 입니다. 한국어로 된 서비스로 kldp.net도 있습니다. 자바닷넷도 오픈소스 프로젝트 인큐베이터를 자처하고 있습니다.

현재 프로젝트에는 옥션의 openAPI 샘플만 들어가 있습니다. 소스 탭에 나온 설명대로 다음의 소스 주소를 통해서 확인할 수 있습니다.

svn checkout http://shopgallery.googlecode.com/svn/trunk/ shopgallery-read-only

내년 2월까지 진행되는 이 프로젝트를 통해서 오픈소스에 대한 감각을 좀 더 익히고 싶습니다.

WoC에 제출한 프로젝트 준비중입니다. 상품 OpenAPI로 매시업 위젯만들기 프로젝트를 제안했습니다. 국내 최대의 경매 사이트인 옥션의 API를 이용해보려고 시도했는데, 웹서비스의 SOAP를 구성해서 보내야 되기 때문에 URL을 통해서 데이터를 전송하고 받아오는 REST방식보다 아주 많이 복잡합니다.

다행히 http://api.auction.co.kr/developer/APIGuide/APIGuide.aspx?categoryID=D02 페이지에 자바 샘플도 있기 때문에 이것을 이용해서 접근 테스트를 해보았습니다. 상품코드를 이용해 상품명을 가져오는 간단한 테스트입니다.

결과는 다음과 같이 보여집니다.

사용자 삽입 이미지

위와 같은 결과를 가져오기 위해서는 옥션 개발자 프로그램에 회원가입되어 있어야 합니다. 개발자 회원은 옥션의 회원아이디와는 별개입니다.

개발자 등록을 마치면 오픈API를 이용하는 애플리케이션을 등록해야 합니다. 이때 어플리케이션에서만 사용되는 인증 정보가 따로 정해집니다. 개발자 프로그램 페이지 우측 상단의 회원정보수정 링크를 통해서 이동합니다.

사용자 삽입 이미지
페이지 하단에 등록된 애플리케이션 링크가 있습니다. 클릭해서 들어가면 다음과 같은 정보들이 보입니다.
사용자 삽입 이미지

여기서 프로그램 작동에 관해 중요한 요소는 4가지입니다. 상단 빨간박스 안에 있는 회원ID, 애플리케이션 ID, 비밀번호 세 가지와 하단에 실서버, 테스트서버 IP를 추가할 수 있는데, 이렇게 등록된 IP입니다. 옥션의 api서버에 도달하는 ip는 다음 주소에서 확인할 수 있습니다.
http://www.okjsp.pe.kr/mashup/ip.jsp
이들 정보 중에서 하나라도 맞지 않으면 원하는 결과를 얻을 수 없습니다.

http://upload.auction.co.kr/APICommunity/DownloadAPICommunityFile.aspx?kind=docs&name=0711190946i37_java_auction_codesamples_new.zip 클릭하면 java 샘플을 다운로드 받을 수 있습니다.

이클립스에 java project를 만들고 import합니다. 가능하면 src 아래는 패키지에 따른 디렉토리 형태로 자바소스가 위치해야 합니다. jsp는 여기서는 다루지 않겠습니다.
사용자 삽입 이미지


소스의 구성은 위 그림과 같이 됩니다. 여기서 수정되는 파일은 service1 패키지의 RequestApplicationTicket.java 파일입니다.
45번 라인을 자신이 등록한 정보에 맞게 수정합니다.
사용자 삽입 이미지

그리고 service1.RequestApplicationTicket.java 파일을 실행합니다. 콘솔창에 보면 Ticket이 찍혀나오게 됩니다. 이 티켓을 복사합니다. 굉장히 깁니다.
service1.ViewItem.java 파일을 열어서 47번 라인으로 이동하면 "<Value></Value>" 사이에 복사한 키를 붙여넣습니다.
사용자 삽입 이미지

그리고 service1.ViewItem.java를 Run As > Java Application 메뉴로 실행하면 콘솔에 해당 상품코드와 상품명이 찍혀 나오는 것을 확인 할 수 있습니다.

테스트 서버에서 이루어진 개발이기 때문에 실 서버의 데이터를 이용하려면 서버의 주소를 바꿔줘야 합니다. 소스 내에 주석처리되어있습니다.

이것을 위젯에서 사용하려면 갈 길이 먼 듯 합니다. ^^
제목: 상품 openAPI로 매시업 위젯만들기

사용 openAPI :
옥션 http://api.auction.co.kr/developer/
다음쇼핑 http://dna.daum.net/apis
네이버쇼핑 http://openapi.naver.com/page.nhn?PageId=1_07

기본 기능:
카테고리명이나 키워드에 맞는 상품들의 롤링 위젯
상품이미지의 사이즈, 상품명, 상품가격, 상품정보URL 등의 정보를 기본적으로 표시

설정항목:
위젯 사이즈 (폭, 높이)
상품 이미지 사이즈 (폭, 높이)
상품 갯수
상품 롤링 속도
롤링 방향
openAPI Key

타겟플랫폼:
1차로 tistory 에 적용
데스크탑 위젯, 싸이월드, 블로그 등에 표시될 수 있도록

매뉴얼:
일반인도 쉽게 붙일 수 있도록 개발자 이메일과 전화번호, 방문 가능시간 등...

기타:
amazon, ebay 등의 외부 api 도 기회가 된다면...

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
아주 오래 전에 시작한 블로그 수익 프로그램입니다.
세이하쿠님이 책을 내셨다고 하시길래 축하해 드리려 했는데, 헉, 감사의 글 명단에 저도 끼어있는 것입니다. 그래서 책사서 싸인받아야지 마음 먹었습니다.
제가 좋아하는 강컴은 컴퓨터 관련서적만 파는데, (블로그도 컴퓨터 관련서적인데 쩝) 세이하쿠님의 책이 없어서 알라딘으로 가기로 했습니다.

블로거에게 책서평 등을 통해서 판매되는 수익의 일부를 나눠주는 Thanks To Blogger(TTB) 가 있다는 것을 생각해 냈습니다.
http://www.aladdin.co.kr/ttb/wmain.aspx
사용자 삽입 이미지

ttb


알라딘과 별개로 가입을 해야합니다.
사용자 삽입 이미지

join ttb


역시나 돈이 왔다갔다하는 서비스라 심사과정이 있군요. 책 바로 사서 TTB를 쓸 수는 없을 것 같습니다. 제가 읽을 책을 살 때도 TTB를 이용해도 될지 모르겠군요. 알라딘 TTB의 정책이 아량이 넓다면 봐줄 것이고, 쪼잔하게 따진다면 얄짤없겠죠. 그래도 전자에 기대보렵니다. ^^; 지금 읽을 책이 스택오버플로우가 날 정도로 많이 쌓여있다구요. 세이하쿠님 몇일만 기다렸다 사도 되겠죠. ㅎㅎ

블로그와 제 사이트를 등록했습니다.
open API를 제공하는 듯 합니다. 시간을 내서 살펴볼만 하군요.
사용자 삽입 이미지

블로그 관리

원격블로그 설정을 보니 okjsp도 openAPI를 만들어야겠다는 생각이 부쩍 듭니다. ^^;
사용자 삽입 이미지

글이 길어지네요. ㅡㅡ;

새로 가입을 하니 천원쿠폰도 주시는군요.
천원 쿠폰으로 그냥 주문해야겠습니다.

사용자 삽입 이미지

많은 것을 보았습니다.
행복합니다. 희망이 보이니까요.
다음 건승하세요. ^^

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지

+ Recent posts