네이버의 openapi에서 키를 받으셔야 사용할수 있습니다.
궁금한 점은 http://openapi.naver.com/15.html 이곳에서 확인하세요.
결과가 간단하므로 복잡하게 처리하지 않고 간단하게 처리햇습니다.
php에서 fopen()을 지원하는 환경에서만 가능합니다.
파일저장을 UTF-8 로 하여야만 에러가 나지 않습니다.
이하 소스
-----------------------------------------------------------------------------------------------------------
<?php
$q = (!empty($_GET['q'])) ? $_GET['q'] : '';
$q_decode = (!empty($q)) ? stripslashes(urldecode($q)) : '';
$q_enocde = urlencode($q);
$start = (!empty($_GET['start']) && is_numeric($_GET['start'])) ? $_GET['start'] : 1;
$display = (!empty($_GET['display']) && is_numeric($_GET['display'])) ? $_GET['display'] : 5;
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
<title> 쇼핑 검색 </title>
</head>
<body>
<center>
<form method='GET'>
<input type=text name='q' value='<?=$q_decode?>'> <input type='submit' value='search'>
start <input type=text name='start' value='<?=$start?>' size=3>
display <input type=text name='display' value='<?=$display?>' size=3>
</form>
<table width=600 border=1 cellspacing=3>
<?php
if (!empty($q_decode)) {
$naver_openapi_key = '자신이 네이버에서 발급받은 키를 넣으세요';
$file = 'http://openapi.naver.com/search?key=' . $naver_openapi_key . '&query=' . $q_enocde . '&display=' . $display . '&start=' . $start . '&target=shop&sort=sim';
$fp = fopen($file, 'r') or die($file . ' not found');
$text = '';
while($data = fread($fp, 4096)){
$text .= $data;
}
fclose($fp);
preg_match_all("`<item>[^<]*<title>([^<]*)</title>[^<]*<link>([^<]*)</link>[^<]*(<image>([^<]*)</image>)?(<image/>)?[^<]*(<lprice>([^<]*)</lprice>)?(<lprice/>)?[^<]*(<hprice>([^<]*)</hprice>)?(<hprice/>)?[^<]*(<description>([^<]*)</description>)?(<description/>)?`s", $text, $matches);
if (is_array($matches[1]) && count($matches[1]) > 0){
foreach($matches[1] as $key => $val){
//title
$title = str_replace(array("<", ">"), array("<", ">"), $val);
//link
$link = $matches[2][$key];
//image
if (empty($matches[4][$key])) $image = '정보없음';
else $image = "<img src='" . $matches[4][$key] . "'>";
//lprice
if (empty($matches[7][$key])) $lprice = '정보없음';
else $lprice = number_format($matches[7][$key]) . " 원";
//hprice
if (empty($matches[10][$key])) $hprice = '정보없음';
else $hprice = number_format($matches[10][$key]) . " 원";
//description
if (empty($matches[13][$key])) $description = '정보없음';
else $description = str_replace(array("<", ">"), array("<", ">"), $matches[13][$key]);
echo "<tr align='center'>";
echo "<td width='100'> <a href='" . $link . "' target='_blank'>" . $title . "</a> </td>";
echo "<td width='180'>" . $image . "</td>";
echo "<td width='100'>" . $lprice . "<br>" . $hprice . "</td>";
echo "<td>" . $description . "</td>";
echo "</tr>";
}
}
else echo "<tr><td>검색결과 없음</td></tr>";
}
else echo "<tr><td>검색어를 입력하세요</td></tr>";
?>
</table>
<br><a href='http://openapi.naver.com/' target='_blank'>네이버 OPENAPI 사용</a>
</center>
</body>
</html>
-----------------------------------------------------------------------------------------------------------
utf-8 환경에서만 사용가능합니다.
데모로 걸은 링크 사이트는 며칠후에는 안보일수 있습니다
http://search.dyd.cc/shop.php?q=%EA%B0%80%EC%A0%84&start=1&display=5<div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:12:10 PHP & HTML에서 이동 됨]</div>
궁금한 점은 http://openapi.naver.com/15.html 이곳에서 확인하세요.
결과가 간단하므로 복잡하게 처리하지 않고 간단하게 처리햇습니다.
php에서 fopen()을 지원하는 환경에서만 가능합니다.
파일저장을 UTF-8 로 하여야만 에러가 나지 않습니다.
이하 소스
-----------------------------------------------------------------------------------------------------------
<?php
$q = (!empty($_GET['q'])) ? $_GET['q'] : '';
$q_decode = (!empty($q)) ? stripslashes(urldecode($q)) : '';
$q_enocde = urlencode($q);
$start = (!empty($_GET['start']) && is_numeric($_GET['start'])) ? $_GET['start'] : 1;
$display = (!empty($_GET['display']) && is_numeric($_GET['display'])) ? $_GET['display'] : 5;
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
<title> 쇼핑 검색 </title>
</head>
<body>
<center>
<form method='GET'>
<input type=text name='q' value='<?=$q_decode?>'> <input type='submit' value='search'>
start <input type=text name='start' value='<?=$start?>' size=3>
display <input type=text name='display' value='<?=$display?>' size=3>
</form>
<table width=600 border=1 cellspacing=3>
<?php
if (!empty($q_decode)) {
$naver_openapi_key = '자신이 네이버에서 발급받은 키를 넣으세요';
$file = 'http://openapi.naver.com/search?key=' . $naver_openapi_key . '&query=' . $q_enocde . '&display=' . $display . '&start=' . $start . '&target=shop&sort=sim';
$fp = fopen($file, 'r') or die($file . ' not found');
$text = '';
while($data = fread($fp, 4096)){
$text .= $data;
}
fclose($fp);
preg_match_all("`<item>[^<]*<title>([^<]*)</title>[^<]*<link>([^<]*)</link>[^<]*(<image>([^<]*)</image>)?(<image/>)?[^<]*(<lprice>([^<]*)</lprice>)?(<lprice/>)?[^<]*(<hprice>([^<]*)</hprice>)?(<hprice/>)?[^<]*(<description>([^<]*)</description>)?(<description/>)?`s", $text, $matches);
if (is_array($matches[1]) && count($matches[1]) > 0){
foreach($matches[1] as $key => $val){
//title
$title = str_replace(array("<", ">"), array("<", ">"), $val);
//link
$link = $matches[2][$key];
//image
if (empty($matches[4][$key])) $image = '정보없음';
else $image = "<img src='" . $matches[4][$key] . "'>";
//lprice
if (empty($matches[7][$key])) $lprice = '정보없음';
else $lprice = number_format($matches[7][$key]) . " 원";
//hprice
if (empty($matches[10][$key])) $hprice = '정보없음';
else $hprice = number_format($matches[10][$key]) . " 원";
//description
if (empty($matches[13][$key])) $description = '정보없음';
else $description = str_replace(array("<", ">"), array("<", ">"), $matches[13][$key]);
echo "<tr align='center'>";
echo "<td width='100'> <a href='" . $link . "' target='_blank'>" . $title . "</a> </td>";
echo "<td width='180'>" . $image . "</td>";
echo "<td width='100'>" . $lprice . "<br>" . $hprice . "</td>";
echo "<td>" . $description . "</td>";
echo "</tr>";
}
}
else echo "<tr><td>검색결과 없음</td></tr>";
}
else echo "<tr><td>검색어를 입력하세요</td></tr>";
?>
</table>
<br><a href='http://openapi.naver.com/' target='_blank'>네이버 OPENAPI 사용</a>
</center>
</body>
</html>
-----------------------------------------------------------------------------------------------------------
utf-8 환경에서만 사용가능합니다.
데모로 걸은 링크 사이트는 며칠후에는 안보일수 있습니다
http://search.dyd.cc/shop.php?q=%EA%B0%80%EC%A0%84&start=1&display=5<div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:12:10 PHP & HTML에서 이동 됨]</div>
댓글 2개
19년 전
감사합니다.^^
19년 전
조금 더 보강합니다.
네이버에서 리턴되는 링크가 지식쇼핑으로만 되어있어서
가격비교대상이 없는 상품은 내용이 없는 페이지가 나오게 됩니다.
그래서 그럴때는 상품 정보 페이지가 보이도록 수정하였습니다.
이하 소스입니다.
------------------------------------------------------------------------------------------------------------------------------------------------------
<?php
$q = (!empty($_GET['q'])) ? $_GET['q'] : '';
$q_decode = (!empty($q)) ? stripslashes(urldecode($q)) : '';
$q_enocde = urlencode($q);
$start = (!empty($_GET['start']) && is_numeric($_GET['start'])) ? $_GET['start'] : 1;
$display = (!empty($_GET['display']) && is_numeric($_GET['display'])) ? $_GET['display'] : 5;
$sort = (!empty($_GET['sort'])) ? $_GET['sort'] : 'sim';
$temp = $sort . "_selected";
$$temp = " selected";
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
<title> 쇼핑 검색 </title>
</head>
<body>
<center>
<form name='shop_search_form' method='GET'>
<input type=text name='q' value='<?=$q_decode?>'> <input type='submit' value='search'>
start <input type=text name='start' value='<?=$start?>' size=3>
display <input type=text name='display' value='<?=$display?>' size=3>
sort
<select name='sort' onchange='document.shop_search_form.submit();'>
<option value='sim' <?=$sim_selected?>>인기상품순</option>
<option value='date' <?=$date_selected?>>신상품순</option>
<option value='asc' <?=$asc_selected?>>낮은가격순</option>
<option value='dsc' <?=$dsc_selected?>>높은가격순</option>
</select>
</form>
<table width=600 border=1 cellspacing=3>
<?php
if (!empty($q_decode)) {
$naver_openapi_key = '자신이 네이버에서 발급받은 키를 넣으세요';
$file = 'http://openapi.naver.com/search?key=' . $naver_openapi_key . '&query=' . $q_enocde . '&display=' . $display . '&start=' . $start . '&target=shop&sort=' . $sort;
$fp = fopen($file, 'r') or die($file . ' not found');
$text = '';
while($data = fread($fp, 4096)){
$text .= $data;
}
fclose($fp);
preg_match_all("`<item>[^<]*<title>([^<]*)</title>[^<]*<link>([^<]*)</link>[^<]*(<image>([^<]*)</image>)?(<image/>)?[^<]*(<lprice>([^<]*)</lprice>)?(<lprice/>)?[^<]*(<hprice>([^<]*)</hprice>)?(<hprice/>)?[^<]*(<description>([^<]*)</description>)?(<description/>)?`s", $text, $matches);
if (is_array($matches[1]) && count($matches[1]) > 0){
foreach($matches[1] as $key => $val){
//title
$title = str_replace(array("<", ">"), array("<", ">"), $val);
//link
$link = $matches[2][$key];
//image
if (empty($matches[4][$key])) $image = '정보없음';
else $image = "<img src='" . $matches[4][$key] . "'>";
//lprice
if (empty($matches[7][$key])) $lprice = '정보없음';
else $lprice = number_format($matches[7][$key]) . " 원";
//hprice
if (empty($matches[10][$key])) $hprice = '정보없음';
else $hprice = number_format($matches[10][$key]) . " 원";
//description
if (empty($matches[13][$key])) {
$description = '정보없음';
if ($hprice == '정보없음') {
if ($lprice == '정보없음') {// 가격 정보가 아예 하나도 없는 것은 도서검색인것 같음
$link = preg_replace("|^.+nv_mid=([0-9]+).*$|", "http://book.naver.com/bookdb/book_detail.php?bid=\\1", $link);
}
else {//가격비교 정보가 없는것들
$link = preg_replace("|^.+\?(.+)$|", "http://shopping.naver.com/go.nhn?\\1&refer=search", $link);
}
}
}
else $description = str_replace(array("<", ">"), array("<", ">"), $matches[13][$key]);
echo "<tr align='center'>";
echo "<td width='100'> <a href='" . $link . "' target='_blank'>" . $title . "</a> </td>";
echo "<td width='180'>" . $image . "</td>";
echo "<td width='100'>" . $lprice . "<br>" . $hprice . "</td>";
echo "<td>" . $description . "</td>";
echo "</tr>";
}
}
else echo "<tr><td>검색결과 없음</td></tr>";
}
else echo "<tr><td>검색어를 입력하세요</td></tr>";
?>
</table>
<br><a href='http://openapi.naver.com/' target='_blank'>네이버 OPENAPI 사용</a>
</center>
</body>
</html>
네이버에서 리턴되는 링크가 지식쇼핑으로만 되어있어서
가격비교대상이 없는 상품은 내용이 없는 페이지가 나오게 됩니다.
그래서 그럴때는 상품 정보 페이지가 보이도록 수정하였습니다.
이하 소스입니다.
------------------------------------------------------------------------------------------------------------------------------------------------------
<?php
$q = (!empty($_GET['q'])) ? $_GET['q'] : '';
$q_decode = (!empty($q)) ? stripslashes(urldecode($q)) : '';
$q_enocde = urlencode($q);
$start = (!empty($_GET['start']) && is_numeric($_GET['start'])) ? $_GET['start'] : 1;
$display = (!empty($_GET['display']) && is_numeric($_GET['display'])) ? $_GET['display'] : 5;
$sort = (!empty($_GET['sort'])) ? $_GET['sort'] : 'sim';
$temp = $sort . "_selected";
$$temp = " selected";
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
<title> 쇼핑 검색 </title>
</head>
<body>
<center>
<form name='shop_search_form' method='GET'>
<input type=text name='q' value='<?=$q_decode?>'> <input type='submit' value='search'>
start <input type=text name='start' value='<?=$start?>' size=3>
display <input type=text name='display' value='<?=$display?>' size=3>
sort
<select name='sort' onchange='document.shop_search_form.submit();'>
<option value='sim' <?=$sim_selected?>>인기상품순</option>
<option value='date' <?=$date_selected?>>신상품순</option>
<option value='asc' <?=$asc_selected?>>낮은가격순</option>
<option value='dsc' <?=$dsc_selected?>>높은가격순</option>
</select>
</form>
<table width=600 border=1 cellspacing=3>
<?php
if (!empty($q_decode)) {
$naver_openapi_key = '자신이 네이버에서 발급받은 키를 넣으세요';
$file = 'http://openapi.naver.com/search?key=' . $naver_openapi_key . '&query=' . $q_enocde . '&display=' . $display . '&start=' . $start . '&target=shop&sort=' . $sort;
$fp = fopen($file, 'r') or die($file . ' not found');
$text = '';
while($data = fread($fp, 4096)){
$text .= $data;
}
fclose($fp);
preg_match_all("`<item>[^<]*<title>([^<]*)</title>[^<]*<link>([^<]*)</link>[^<]*(<image>([^<]*)</image>)?(<image/>)?[^<]*(<lprice>([^<]*)</lprice>)?(<lprice/>)?[^<]*(<hprice>([^<]*)</hprice>)?(<hprice/>)?[^<]*(<description>([^<]*)</description>)?(<description/>)?`s", $text, $matches);
if (is_array($matches[1]) && count($matches[1]) > 0){
foreach($matches[1] as $key => $val){
//title
$title = str_replace(array("<", ">"), array("<", ">"), $val);
//link
$link = $matches[2][$key];
//image
if (empty($matches[4][$key])) $image = '정보없음';
else $image = "<img src='" . $matches[4][$key] . "'>";
//lprice
if (empty($matches[7][$key])) $lprice = '정보없음';
else $lprice = number_format($matches[7][$key]) . " 원";
//hprice
if (empty($matches[10][$key])) $hprice = '정보없음';
else $hprice = number_format($matches[10][$key]) . " 원";
//description
if (empty($matches[13][$key])) {
$description = '정보없음';
if ($hprice == '정보없음') {
if ($lprice == '정보없음') {// 가격 정보가 아예 하나도 없는 것은 도서검색인것 같음
$link = preg_replace("|^.+nv_mid=([0-9]+).*$|", "http://book.naver.com/bookdb/book_detail.php?bid=\\1", $link);
}
else {//가격비교 정보가 없는것들
$link = preg_replace("|^.+\?(.+)$|", "http://shopping.naver.com/go.nhn?\\1&refer=search", $link);
}
}
}
else $description = str_replace(array("<", ">"), array("<", ">"), $matches[13][$key]);
echo "<tr align='center'>";
echo "<td width='100'> <a href='" . $link . "' target='_blank'>" . $title . "</a> </td>";
echo "<td width='180'>" . $image . "</td>";
echo "<td width='100'>" . $lprice . "<br>" . $hprice . "</td>";
echo "<td>" . $description . "</td>";
echo "</tr>";
}
}
else echo "<tr><td>검색결과 없음</td></tr>";
}
else echo "<tr><td>검색어를 입력하세요</td></tr>";
?>
</table>
<br><a href='http://openapi.naver.com/' target='_blank'>네이버 OPENAPI 사용</a>
</center>
</body>
</html>
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 1130 | 18년 전 | 2475 | ||
| 1129 | 18년 전 | 2461 | ||
| 1128 | 18년 전 | 2329 | ||
| 1127 | 18년 전 | 2568 | ||
| 1126 |
|
18년 전 | 3871 | |
| 1125 | 18년 전 | 3664 | ||
| 1124 |
|
18년 전 | 2103 | |
| 1123 | 18년 전 | 2038 | ||
| 1122 | 18년 전 | 1584 | ||
| 1121 | 18년 전 | 3910 | ||
| 1120 | 18년 전 | 5900 | ||
| 1119 | 18년 전 | 6996 | ||
| 1118 | 18년 전 | 2478 | ||
| 1117 |
BEST79
|
18년 전 | 2736 | |
| 1116 | 18년 전 | 4188 | ||
| 1115 | 18년 전 | 2179 | ||
| 1114 |
|
18년 전 | 3638 | |
| 1113 | 18년 전 | 2889 | ||
| 1112 | 18년 전 | 2749 | ||
| 1111 | 18년 전 | 2202 | ||
| 1110 | 18년 전 | 2480 | ||
| 1109 | 18년 전 | 2623 | ||
| 1108 | 18년 전 | 3100 | ||
| 1107 | 18년 전 | 3739 | ||
| 1106 | 18년 전 | 3271 | ||
| 1105 | 18년 전 | 2787 | ||
| 1104 |
|
18년 전 | 2278 | |
| 1103 | 18년 전 | 2945 | ||
| 1102 | 18년 전 | 3027 | ||
| 1101 | 18년 전 | 2541 | ||
| 1100 | 18년 전 | 2298 | ||
| 1099 | 18년 전 | 3330 | ||
| 1098 | 18년 전 | 4857 | ||
| 1097 | 18년 전 | 5095 | ||
| 1096 | 18년 전 | 2312 | ||
| 1095 | 18년 전 | 2199 | ||
| 1094 | 18년 전 | 5008 | ||
| 1093 | 18년 전 | 8978 | ||
| 1092 | 18년 전 | 2050 | ||
| 1091 |
DeepnBlue
|
18년 전 | 4928 | |
| 1090 |
|
18년 전 | 4375 | |
| 1089 |
도날드주주
|
18년 전 | 2618 | |
| 1088 |
|
18년 전 | 4969 | |
| 1087 | 18년 전 | 2796 | ||
| 1086 | 18년 전 | 3680 | ||
| 1085 | 18년 전 | 2621 | ||
| 1084 | 18년 전 | 3440 | ||
| 1083 | 18년 전 | 1945 | ||
| 1082 | 18년 전 | 5381 | ||
| 1081 | 18년 전 | 1703 | ||
| 1080 | 18년 전 | 6061 | ||
| 1079 |
|
18년 전 | 2894 | |
| 1078 | 18년 전 | 6057 | ||
| 1077 |
|
18년 전 | 6850 | |
| 1076 | 18년 전 | 3730 | ||
| 1075 | 18년 전 | 2208 | ||
| 1074 |
hwatta
|
18년 전 | 2101 | |
| 1073 | 18년 전 | 6904 | ||
| 1072 | 18년 전 | 2409 | ||
| 1071 | 18년 전 | 3961 | ||
| 1070 |
|
18년 전 | 5351 | |
| 1069 | 18년 전 | 2702 | ||
| 1068 | 18년 전 | 1760 | ||
| 1067 | 18년 전 | 1595 | ||
| 1066 | 18년 전 | 1541 | ||
| 1065 | 18년 전 | 1821 | ||
| 1064 | 18년 전 | 1817 | ||
| 1063 | 18년 전 | 1789 | ||
| 1062 | 18년 전 | 1719 | ||
| 1061 | 18년 전 | 2516 | ||
| 1060 | 18년 전 | 2318 | ||
| 1059 | 18년 전 | 3467 | ||
| 1058 | 18년 전 | 2602 | ||
| 1057 | 18년 전 | 2577 | ||
| 1056 | 18년 전 | 3417 | ||
| 1055 | 18년 전 | 4631 | ||
| 1054 | 18년 전 | 2971 | ||
| 1053 | 18년 전 | 2824 | ||
| 1052 | 18년 전 | 3354 | ||
| 1051 | 18년 전 | 6282 | ||
| 1050 | 18년 전 | 2193 | ||
| 1049 | 18년 전 | 2005 | ||
| 1048 | 18년 전 | 1956 | ||
| 1047 | 18년 전 | 2014 | ||
| 1046 | 18년 전 | 3204 | ||
| 1045 | 18년 전 | 2264 | ||
| 1044 | 18년 전 | 1961 | ||
| 1043 | 18년 전 | 1627 | ||
| 1042 | 18년 전 | 2084 | ||
| 1041 | 18년 전 | 3368 | ||
| 1040 | 18년 전 | 3234 | ||
| 1039 | 18년 전 | 1927 | ||
| 1038 | 18년 전 | 1509 | ||
| 1037 | 18년 전 | 3205 | ||
| 1036 | 18년 전 | 2066 | ||
| 1035 | 18년 전 | 1617 | ||
| 1034 | 18년 전 | 2839 | ||
| 1033 | 18년 전 | 1975 | ||
| 1032 | 18년 전 | 1851 | ||
| 1031 | 18년 전 | 1823 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기