다음 책검색 API -> 알라딘 API > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

다음 책검색 API -> 알라딘 API 정보

다음 책검색 API -> 알라딘 API

본문

서누니님의 도서검색 스킨을 변경하고 싶습니다.
http://sir.co.kr/bbs/board.php?bo_table=g4_skin&wr_id=85176

해당 스킨은 다음 API를 사용중인데 알라딘 API로 바꾸려고 보니
쿼리 날리는 주소랑 변수만 바꿔주면 될 줄 알았는데 생각보다 구조가 다른 부분이 있어서 어떻게 해야 할 지 모르겠습니다.

write.skin.php만 바꾸면 리스트랑 보기 화면은 기존과 다를 것이 없으니 어떻게든 될 듯 합니다.


/* 여기부터 책검색 */
var obj = {
	apikey: "<?=$board['bo_1']?>",
	pageno: 1,
	init : function()
	{
		obj.q = document.getElementById('q');
		obj.b = document.getElementById('b');
		obj.r = document.getElementById('r');
		obj.book_page = document.getElementById('book_page');
		obj.b.onclick = obj.pingSearch;
	},
	// 검색을 요청하는 함수 
 	pingSearch : function()
 	{
	    if (obj.q.value)
	    {
//		if(!pageno)
//		var pageno=1;
	      obj.s = document.createElement('script');
	      obj.s.type ='text/javascript';
	      obj.s.charset ='utf-8';
	      obj.s.src = 'http://apis.daum.net/search/book?apikey=' + obj.apikey + '&pageno='+obj.pageno+'&result=12&output=json&callback=obj.pongSearch&q=' + encodeURI(obj.q.value);
	      document.getElementsByTagName('head')[0].appendChild(obj.s);
	    }
 	},
 	// 검색 결과를 뿌리는 함수 
	pongSearch : function(z)
	{
		obj.r.innerHTML = '';
		if(!z.channel || z.channel.item.length <= 0)
		{
			obj.r.innerHTML = "검색 결과가 없습니다.";
			return;
		}
		else
		{
			book_title = new Array();
			book_author = new Array();
			book_translator = new Array();
			book_category = new Array();
			book_pub_nm = new Array(); //출판사
			book_pub_date = new Array(); //출판일
			book_link = new Array();
			book_description = new Array(); //책소개
			book_img = new Array(); //이미지
			book_img_l = new Array(); //큰이미지
			for (var i = 0; i < z.channel.item.length; i++)
			{
				book_title[i] = obj.escapeHtml(z.channel.item[i].title);
				book_author[i] =  obj.escapeHtml(z.channel.item[i].author);
				book_translator[i] =  obj.escapeHtml(z.channel.item[i].translator);
				book_category[i] =  obj.escapeHtml(z.channel.item[i].category);
				book_pub_nm[i] =  obj.escapeHtml(z.channel.item[i].pub_nm);
				book_pub_date[i] =  obj.escapeHtml(z.channel.item[i].pub_date);
				book_link[i] =  obj.escapeHtml(z.channel.item[i].link);
				book_description[i] =  obj.escapeHtml(z.channel.item[i].description);
				book_img[i] = z.channel.item[i].cover_s_url;
				book_img_l[i] = z.channel.item[i].cover_l_url;
				var li = document.createElement('li');
				if(z.channel.item[i].cover_s_url)
					li.innerHTML = "<img src=\'"+z.channel.item[i].cover_s_url+"\' onclick=\'gogo("+i+")\' style=\'cusor:pointer;\'>";
				else
					li.innerHTML = "<a href=# onclick=\'gogo("+i+")\'>"+z.channel.item[i].title+"</a>";
				obj.r.appendChild(li);
			}
			//var totalpage = Math.ceil(z.channel.totalCount/z.channel.result);
			//if(totalpage > 1)
				//obj.book_page.innerHTML = " 검색결과("+z.channel.pageno+"쪽/"+totalpage+"쪽)";
		}
	},
	// HTML태그 안 먹게 하는 함수
	escapeHtml : function(str) 
	{
		str = str.replace(/&amp;/g, "&");
		str = str.replace(/&lt;/g, "<");
		str = str.replace(/&gt;/g, ">");
		return str;
	}
};
function gogo(book_num)
{
	document.fwrite.wr_1.value = book_category[book_num];
	document.fwrite.wr_2.value = book_title[book_num];
	if(book_translator[book_num])
		document.fwrite.wr_3.value = book_author[book_num]+"/"+book_translator[book_num];
	else
		document.fwrite.wr_3.value = book_author[book_num];
	document.fwrite.wr_4.value = book_pub_nm[book_num];
	document.fwrite.wr_5.value = book_pub_date[book_num];
	document.fwrite.wr_6.value = book_description[book_num];
	document.fwrite.wr_link1.value = book_link[book_num];
	document.fwrite.wr_9.value = book_img_l[book_num];
	document.fwrite.wr_10.value = book_img[book_num];
}
window.onload = function()
{
  obj.init();
<? if($w) { ?>
	document.getElementById('q').value = "<?=strip_tags($write[wr_2])?>";
<? } ?>
  obj.pingSearch();
};
/* 여기까지 책검색 */




표지 대/소와 제목, 출판사, 내용만 나오면 됩니다.


다음 책검색 API
http://dna.daum.net/apis/search/book

알라딘 책검색 API
http://blog.aladin.co.kr/ttb/category/16526940?communitytype=MyPaper
  • 복사

댓글 전체

아..부끄럽....
obj.s.src 의 주소를 바꾸셔야 되고 z.channel.item[i]. 의 이름들도 바뀌게 되겠지요.
알라딘 에서 JSON형식으로 결과값을 받으시면
넘어오는 값을 찍어보시고 변수에 맞게 배치 해주시면 될 것 같습니다.
다음으로 하시면 됩니다. ttbkey는 여분필드 1번에 넣으면 됩니다. 근데 이걸 jquery를 이용해서 하는 것이더 깔끔할 것 같기도 한데...

/* 여기부터 책검색 */
var obj = {
apikey: "<?=$board['bo_1']?>",
pageno: 1,
init : function()
{
obj.q = document.getElementById('q');
obj.b = document.getElementById('b');
obj.r = document.getElementById('r');
obj.book_page = document.getElementById('book_page');
obj.b.onclick = obj.pingSearch;
},
// 검색을 요청하는 함수
  pingSearch : function()
  {
    if (obj.q.value)
    {
// if(!pageno)
// var pageno=1;
      obj.s = document.createElement('script');
      obj.s.type ='text/javascript';
      //obj.s.charset ='utf-8';
    obj.s.src = 'http://www.aladin.co.kr/ttb/api/ItemSearch.aspx?TTBKey=' + obj.apikey + '&Query=' + encodeURI(obj.q.value) + 'QueryType=Title&MaxResults=12&Start=' + obj.pageno + '&Output=JS&SearchTarget=Book&CallBack=obj.pongSearch';
      document.getElementsByTagName('head')[0].appendChild(obj.s);
    }
  },
  // 검색 결과를 뿌리는 함수
pongSearch : function(z)
{
obj.r.innerHTML = '';
if(!z.totalResults || z.item.length <= 0)
{
obj.r.innerHTML = "검색 결과가 없습니다.";
return;
}
else
{
book_title = new Array();
book_author = new Array();
book_translator = new Array();
book_category = new Array();
book_pub_nm = new Array(); //출판사
book_pub_date = new Array(); //출판일
book_link = new Array();
book_description = new Array(); //책소개
book_img = new Array(); //이미지
book_img_l = new Array(); //큰이미지
for (var i = 0; i < z.channel.item.length; i++)
{
book_title[i] = obj.escapeHtml(z.item[i].title);
book_author[i] =  obj.escapeHtml(z.item[i].author);
book_translator[i] =  /* obj.escapeHtml(z.item[i].author) */null; // 알라딘은 번역자는 제공하지 않는다.
book_category[i] =  obj.escapeHtml(z.item[i].categoryName);
book_pub_nm[i] =  obj.escapeHtml(z.item[i].publisher);
book_pub_date[i] =  obj.escapeHtml(z.item[i].pubDate);
book_link[i] =  obj.escapeHtml(z.item[i].link);
book_description[i] =  obj.escapeHtml(z.item[i].description);
book_img[i] = z.item[i].cover; // 알라딘은 이미지가 하나밖에 제공하지 않는다.
book_img_l[i] = z.item[i].cover;
var li = document.createElement('li');
if(z.item[i].cover)
li.innerHTML = "<img src=\'"+z.item[i].cover+"\' onclick=\'gogo("+i+")\' style=\'cusor:pointer;\'>";
else
li.innerHTML = "<a href=# onclick=\'gogo("+i+")\'>"+z.item[i].title+"</a>";
obj.r.appendChild(li);
}
//var totalpage = Math.ceil(z.totalResults/z.itemsPerPage);
//if(totalpage > 1)
//obj.book_page.innerHTML = " 검색결과("+z.channel.pageno+"쪽/"+totalpage+"쪽)";
}
},
// HTML태그 안 먹게 하는 함수
escapeHtml : function(str)
{
str = str.replace(/&amp;/g, "&");
str = str.replace(/&lt;/g, "<");
str = str.replace(/&gt;/g, ">");
return str;
}
};
function gogo(book_num)
{
document.fwrite.wr_1.value = book_category[book_num];
document.fwrite.wr_2.value = book_title[book_num];
if(book_translator[book_num])
document.fwrite.wr_3.value = book_author[book_num]+"/"+book_translator[book_num];
else
document.fwrite.wr_3.value = book_author[book_num];
document.fwrite.wr_4.value = book_pub_nm[book_num];
document.fwrite.wr_5.value = book_pub_date[book_num];
document.fwrite.wr_6.value = book_description[book_num];
document.fwrite.wr_link1.value = book_link[book_num];
document.fwrite.wr_9.value = book_img_l[book_num];
document.fwrite.wr_10.value = book_img[book_num];
}
window.onload = function()
{
  obj.init();
<? if($w) { ?>
document.getElementById('q').value = "<?=strip_tags($write[wr_2])?>";
<? } ?>
  obj.pingSearch();
};
/* 여기까지 책검색 */
© SIRSOFT
현재 페이지 제일 처음으로