Script / CSS

G1sUtil.js

G1sBlogger.js

G1sNavigationList.js

G1sCode

G1sTagList

Posts List

전체 리스트 ()

2012년 3월 10일 토요일

[Daum API] 다음 쇼핑 API를 이용한 쇼핑 검색.

다음DNA에서 제공하는 다음 쇼핑 api를 이용한 간단 쇼핑 검색.
역시나 CSS 등은 입히지 않은 기능 위주로 구현했습니다.
코드는 이전에 블로깅 한 검색 api와 비슷하며 쇼핑 apikey는 검색 apikey와 따로 관리 되므로 이것 역시 개발시에는 apikey를 발급받아야 합니다. apikey 발급받기

HTML 태그
  1. <div id="daumShoppingForm">
  2. <input id="daumShoppingSearch" type="text" value="다음"onkeydown="javascript:if(event.keyCode == 13) daumShoppingSearch.search();"/>
  3. <input id="daumShoppingSubmit" type="submit" value="검색" onclick="javascript:daumShoppingSearch.search()"/>
  4. </div >
  5. <div id="daumShopping"></div>
  6. <div id="daumShoppingScript"></div>
Base Script
  1. <script language="Javascript" type="text/javascript">
  2. var daumShoppingSearch = {
  3. /** 초기화. **/
  4. init : function(){
  5. this.apikey = "DAUM_SHOP_DEMO_APIKEY";
  6. this.q = document.getElementById('daumShoppingSearch');
  7. //검색 객체들 초기화.
  8. daumShopping.init(6);
  9. },
  10. /** 검색 **/
  11. search : function(){
  12. this.query = '?apikey=' + this.apikey + '&output=json&q='
  13. + encodeURI(this.q.value);
  14. //검색어에 맞게 각각 첫페이지를 띄움.
  15. daumShopping.pingSearch(1);
  16. },
  17. /** callback 함수 호출. **/
  18. pingSearch : function(ds, api, pgno, callback, result){
  19. ds.innerHTML = "";
  20. var s = document.createElement('script');
  21. s.type = 'text/javascript';
  22. s.charset = 'utf-8';
  23. s.src = api + this.query + '&pageno=' + pgno + '&callback='
  24. + callback + '&result='+result ;
  25. ds.appendChild(s);
  26. },
  27. /** 결과를 뿌려줌. **/
  28. pongSearch : function(search, z){
  29. var ul = document.createElement('ul');
  30. for(var i=0; i<z.channel.item.length; i++){
  31. //title 정보를 얻음.
  32. var title = document.createElement('h4');
  33. var a = document.createElement('a');
  34. a.href = z.channel.item[i].link;
  35. a.target = '_blank';
  36. a.innerHTML = this.escapeHtml(z.channel.item[i].title)
  37. + '<br'+'/>';
  38.  
  39. title.appendChild(a);
  40. //세부 내용을 얻음.
  41. var content = search.getContent(z.channel.item[i]);
  42. //리스트 화.
  43. ul.appendChild(search.getSearch(title,content));
  44. }
  45. return ul;
  46. },
  47. /** PageNumber를 그려줌. **/
  48. pongPgno : function(pgno,max,func){
  49. var maxpg = (pgno+6<max)?pgno+6:max;
  50. var div = document.createElement('div');
  51. div.align = 'center';
  52. div.style.clear = 'left';
  53. //좌측 화살표.
  54. var left = document.createElement('a');
  55. left.innerHTML = "<< ";
  56. if(pgno-5>1)
  57. this.onMouseDown(left,pgno-6,func);
  58. else{
  59. left.style.color = "gray";
  60. left.style.cursor = "default";
  61. }
  62. div.appendChild(left);
  63. //페이지 번호.
  64. for(var i=(pgno-5>1)?pgno-5:1; i<maxpg; i++){
  65. var a = document.createElement('a');
  66. a.innerHTML = " " + i + " ";
  67.  
  68. if(i==pgno){
  69. a.style.color = 'yellow';
  70. a.style.cursor = "default";
  71. }
  72. else
  73. this.onMouseDown(a,i,func);
  74. div.appendChild(a);
  75. }
  76. //우측 화살표.
  77. var right = document.createElement('a');
  78. right.innerHTML = ">> ";
  79. if(pgno+6<max)
  80. this.onMouseDown(right,pgno+7,func);
  81. else{
  82. right.style.color = "gray";
  83. right.style.cursor = "default";
  84. }
  85. div.appendChild(right);
  86. return div;
  87. },
  88. /** 마우스 이벤트. **/
  89. onMouseDown: function(a, i, func){
  90. a.style.cursor = 'pointer';
  91. a.onmousedown = function(){
  92. func(i);
  93. }
  94. },
  95. /** HTML태그 안 먹게 하는 함수 **/
  96. escapeHtml: function (str) {
  97. str = str.replace(/&amp;/g, "&");
  98. str = str.replace(/&lt;/g, "<");
  99. str = str.replace(/&gt;/g, ">");
  100. return str;
  101. }
  102. };
  103. window.onload = function () {
  104. daumShoppingSearch.init();
  105. daumShoppingSearch.search();
  106. };
  107. </script>
쇼핑검색
  1. <script language="Javascript" type="text/javascript">
  2. /** 쇼핑 검색. **/
  3. var daumShopping = {
  4. /** 초기화. **/
  5. init : function(r){
  6. daumShopping.api = 'http://apis.daum.net/shopping/search';
  7. daumShopping.pgno = 1;
  8. daumShopping.result = r;
  9. },
  10. /** callback 함수 호출. **/
  11. pingSearch : function(pgno){
  12. daumShopping.pgno = pgno;
  13. var ds = document.getElementById('daumShoppingScript');
  14. var callback = 'daumShopping.pongSearch';
  15. daumShoppingSearch.pingSearch(ds,daumShopping.api,
  16. daumShopping.pgno, callback, daumShopping.result);
  17. },
  18. /** 결과를 뿌려줌. **/
  19. pongSearch : function(z){
  20. var dv = document.getElementById('daumShopping');
  21. dv.innerHTML ="";
  22. dv.appendChild(daumShoppingSearch.pongSearch(this, z));
  23. dv.appendChild(daumShoppingSearch.pongPgno(daumShopping.pgno,
  24. z.channel.totalCount/daumShopping.result,daumShopping.pingSearch));
  25. },
  26. /** li setting **/
  27. getSearch : function(title,content){
  28. var li = document.createElement('li');
  29. li.style.height = '150px';
  30. li.appendChild(title);
  31. li.appendChild(content);
  32. return li;
  33. },
  34. /** 설명 return **/
  35. getContent : function(z){
  36. var div = document.createElement('div');
  37. var a = document.createElement('a');
  38. var b = document.createElement('b');
  39. var ba1 = document.createElement('a');
  40. var ba2 = document.createElement('a');
  41. var ba3 = document.createElement('a');
  42. var ba4 = document.createElement('a');
  43. var ba5 = document.createElement('a');
  44. var img = document.createElement('img');
  45. var aimg = document.createElement('a');
  46. img.width = 100;
  47. img.height = 100;
  48. img.src = z.image_url;
  49. img.style.paddingRight = '20px';
  50. aimg.target = '_blank';
  51. aimg.href = z.link;
  52. aimg.style.float = 'left';
  53. aimg.appendChild(img);
  54. a.style.clear = 'left';
  55. a.innerHTML = daumShoppingSearch.escapeHtml(z.price_group)
  56. + daumShoppingSearch.escapeHtml(z.description) + '<br'+'/>';
  57. ba1.innerHTML = '가격 : '
  58. + z.price_min + '원 ~ ' + z.price_max + '원<br'+'/>';
  59. ba2.innerHTML = 'Maker : '
  60. + daumShoppingSearch.escapeHtml(z.maker) + '<br'+'/>';
  61. ba3.innerHTML = '카테고리 : '
  62. + daumShoppingSearch.escapeHtml(z.category_name) + '<br'+'/>';
  63. ba4.innerHTML = '출시일 : '
  64. + daumShoppingSearch.escapeHtml(z.publish_date) + '<br'+'/>';
  65. ba5.innerHTML = '상품평 : ' + z.review_count + '<br'+'/>';
  66.  
  67. b.appendChild(ba1);
  68. b.appendChild(ba2);
  69. b.appendChild(ba3);
  70. b.appendChild(ba4);
  71. b.appendChild(ba5);
  72. div.appendChild(aimg);
  73. div.appendChild(b);
  74. div.appendChild(a);
  75. return div;
  76. }
  77. };
  78. </script>

댓글 6개:

  1. 안녕하세요! 다음 쇼핑 API를 적용해보려 찾던 중 보물을 발견했네요.
    그래서 이것저것 손봐보고 있는데요 이 스크립트를 적용하면 페이징시 페이지가 없어도 화살표가 나오고 우측 화살표 클릭시마다 페이지수가 늘어나는 현상이 있습니다ㅜㅜ
    혹시 어떻게 수정을 하면 제대로 잘 나올 수 있을까요?

    답글삭제
    답글
    1. 블로그 주소가 바껴서 한동안 샘플이 안보였었네요.
      지금 제 샘플 적용 되어 있는데서는 화살표는 나오지만 우측 화살표 클릭하여도 페이지수는 늘어나지 않고 있는데요.
      Base Script 부분의 pongPgno : function(pgno,max,func) 부분을 중점적으로 봐주셔야 할 것 같네요. max 값이 제대로 넘어오는 지 등...
      자세한 것은 현상을 봐야 알 수 있을 것 같네요.
      혹시 제 데모에도 나타난다면 검색했던 검색어 등을 알려주시면 확인해보겠습니다.

      삭제
    2. 빠른 피드백 감사합니다.
      메일 주소 알려주시면 제가 적용한 소스와 부분들 알려드리겠습니다.
      좋은 하루 되세요

      삭제
    3. creatorhong@gmail.com 입니다.

      삭제
  2. 검색한 결과값이 아닌 다른 결과값이 나오는 건 왜그러는 건가요?ㅠㅠ

    답글삭제
    답글
    1. 결과값은 Daum에서 뿌려주는 거라 그것까지는 어떻게 할 수 가 없을것 같네요...

      삭제