네이버 OPEN API 웹검색 짜집기
링크
http://www.ihelpers.co.kr/programming/lec.php?CMD=view&TYPE=0&KEY=&SC=S&&CC=&PAGE=1&IDX=248 (753) http://www.allblog.net/GoPage/787877.html (792)
링크 1/2를 참고해서 짜집기 -_-; 했습니다
문제가 있다면 자삭하겠습니다.;;
네이버 Open API 사용시 제약조건
- 하루 쿼리 5000건 이하
- 절대적 건전하고, 비상업적인 용도
- 네이버 OpenAPI를 사용하고 있음을 표기
라고 합니다.
http://openapi.naver.com 에서 key값을 받아야됩니다.
아래 내용을 파일로 저장해서
filename.php?query=검색단어 하면 됩니다.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>네이버 OPEN API</title>
</head>
<body>
네이버 OpenAPI를 사용하였습니다.<br /><br />
<?
/*///////////////////////////////////////////////////////////////
작성자 : 손상모<smson@ihelpers.co.kr>
최초작성일 : 2004.10.25
변경내용 : 없슴
/////////////////////////////////////////////////////////////////*/
/**
* RSS parser class.
*
* This class is a parser for Resource Description Framework (RDF) Site
*
* @author Sang Mo,Son <smson@ihelpers.co.kr>
* @version 0.9 beta
* @access public
*/
class RSSParser {
var $parser;
var $insideTag = '';
var $activeTag = '';
var $channel = array();
var $items = array();
var $item = array();
var $images = array();
var $image = array();
var $textinput = array();
var $textinputs = array();
// 2004.10.25 RSS 2.0 적용
var $parentTags = array('CHANNEL', 'ITEM', 'IMAGE', 'TEXTINPUT');
var $channelTags = array('TITLE', 'LINK', 'DESCRIPTION', 'LANGUAGE','COPYRIGHT','MANAGINGEDITOR',
'WEBMASTER','PUBDATE','LASTBUILDDATE','CATEGORY','GENERATOR','DOCS','CLOUD',
'TTL','RATING','SKIPHOURS','SKIPDAYS','IMAGE','ITEMS', 'TEXTINPUT');
var $itemTags = array('TITLE', 'LINK', 'DESCRIPTION',
'AUTHOR','CATEGORY','COMMENTS','ENCLOSURE','GUID','PUBDATE','SOURCE');
var $imageTags = array('TITLE', 'URL', 'LINK','WIDTH','HEIGHT','DESCRIPTION');
var $textinputTags = array('TITLE', 'DESCRIPTION', 'NAME', 'LINK');
var $moduleTags = array('DC:TITLE', 'DC:CREATOR', 'DC:SUBJECT', 'DC:DESCRIPTION',
'DC:PUBLISHER', 'DC:CONTRIBUTOR', 'DC:DATE', 'DC:TYPE',
'DC:FORMAT', 'DC:IDENTIFIER', 'DC:SOURCE', 'DC:LANGUAGE',
'DC:RELATION', 'DC:COVERAGE', 'DC:RIGHTS',
'BLOGCHANNEL:BLOGROLL', 'BLOGCHANNEL:MYSUBSCRIPTIONS',
'BLOGCHANNEL:MYSUBSCRIPTIONS', 'BLOGCHANNEL:CHANGES');
/**
* Constructor
*
* @access public
* @return void
*/
function RSSParser(){
$this->_create();
}
/**
* create the XML parser resource
*
* @access private
* @return boolean
*
* @see xml_parser_create
*/
function _create(){
$this->parser = @xml_parser_create();
if (is_resource($this->parser)) {
xml_set_object($this->parser, &$this);
xml_set_element_handler($this->parser, "startHandler", "endHandler");
xml_set_character_data_handler($this->parser, "cdataHandler");
return true;
}
return false;
}
/**
* Free the internal resources associated with the parser
*
* @return null
**/
function free(){
if (is_resource($this->parser)) {
xml_parser_free($this->parser);
unset( $this->parser );
}
return null;
}
/**
* Start element handler for XML parser
*
* @access private
* @param object XML parser object
* @param string XML element
* @param array Attributes of XML tag
* @return void
*/
function startHandler($parser, $element, $attr){
switch ($element) {
case 'CHANNEL':
case 'ITEM':
case 'IMAGE':
case 'TEXTINPUT':
$this->insideTag = $element;
break;
default:
$this->activeTag = $element;
}
}
/**
* End element handler for XML parser
*
* @access private
* @param object XML parser object
* @param string
* @return void
*/
function endHandler($parser, $element){
if ($element == $this->insideTag) {
$this->insideTag = '';
$this->struct[] = array_merge(array('type' => strtolower($element)),
$this->last);
}
if ($element == 'ITEM') {
$this->items[] = $this->item;
$this->item = '';
}
if ($element == 'IMAGE') {
$this->images[] = $this->image;
$this->image = '';
}
if ($element == 'TEXTINPUT') {
$this->textinputs = $this->textinput;
$this->textinput = '';
}
$this->activeTag = '';
}
/**
* Handler for character data
*
* @access private
* @param object XML parser object
* @param string CDATA
* @return void
*/
function cdataHandler($parser, $cdata){
if (in_array($this->insideTag, $this->parentTags)) {
$tagName = strtolower($this->insideTag);
$var = $this->{$tagName . 'Tags'};
if (in_array($this->activeTag, $var)){
$this->_add($tagName, strtolower($this->activeTag),$cdata);
} elseif(in_array($this->activeTag, $this->moduleTags)) {
$this->_add($tagName, strtolower($this->activeTag),$cdata);
}
}
}
/**
* Add element to internal result sets
*
* @access private
* @param string Name of the result set
* @param string Fieldname
* @param string Value
* @return void
* @see cdataHandler
*/
function _add($type, $field, $value)
{
if (empty($this->{$type}) || empty($this->{$type}[$field])) {
$this->{$type}[$field] = $value;
} else {
$this->{$type}[$field] .= $value;
}
$this->last = $this->{$type};
}
/**
* Central parsing function.
*
* @access public
* @param string XML Content
* @return boolean
*/
function parse($data){
xml_parse($this->parser,$data);
return true;
}
/**
* Get complete structure of RSS file
*
* @access public
* @return array
*/
function getStructure()
{
return (array)$this->struct;
}
/**
* Get general information about current channel
*
* @access public
* @return array
*/
function getChannel()
{
return (array)$this->channel;
}
/**
* Get items from RSS file
*
* @access public
* @return array
*/
function getItems()
{
return (array)$this->items;
}
/**
* Get images from RSS file
*
* @access public
* @return array
*/
function getImages()
{
return (array)$this->images;
}
/**
* Get text input fields from RSS file
*
* @access public
* @return array
*/
function getTextinputs()
{
return (array)$this->textinputs;
}
}
?>
<?
$key =""; //http://openapi.naver.com 회원가입후 키를 받아야 됩니다.
$display="20"; //20개 출력
$query = $_GET[query];
$ary[] = "UTF-8";
$ary[] = "EUC-KR";
$ary[] = "ASCII";
if(mb_detect_encoding($query, $ary)=="EUC-KR") $query = iconv("EUC-KR","UTF-8",$query);
$query = urlencode($query);
$file = "http://openapi.naver.com/search?key=$key&query=$query&display=$display&start=1&target=webkr";
$fp = fopen($file, "r") or die("file not found");
while (!feof ($fp)) {
$buffer .= fgets($fp, 4096);
}
fclose ($fp);
$rss = new RSSParser();
$rss->parse($buffer);
$structure =($rss->getStructure());
$channel = ($rss->getChannel());
$items = ($rss->getItems());
for($i = 0 ; $i < count($items) ; $i++){
echo "<a href='http://".$items[$i][link]."' target='_blank'>".$items[$i][title]."</a><br />";
echo "http://".$items[$i][link]."<br />";
echo $items[$i][description]."<br />";
echo "<br /><br /><br />";
}
?>
</body>
</html>
문제가 있다면 자삭하겠습니다.;;
네이버 Open API 사용시 제약조건
- 하루 쿼리 5000건 이하
- 절대적 건전하고, 비상업적인 용도
- 네이버 OpenAPI를 사용하고 있음을 표기
라고 합니다.
http://openapi.naver.com 에서 key값을 받아야됩니다.
아래 내용을 파일로 저장해서
filename.php?query=검색단어 하면 됩니다.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>네이버 OPEN API</title>
</head>
<body>
네이버 OpenAPI를 사용하였습니다.<br /><br />
<?
/*///////////////////////////////////////////////////////////////
작성자 : 손상모<smson@ihelpers.co.kr>
최초작성일 : 2004.10.25
변경내용 : 없슴
/////////////////////////////////////////////////////////////////*/
/**
* RSS parser class.
*
* This class is a parser for Resource Description Framework (RDF) Site
*
* @author Sang Mo,Son <smson@ihelpers.co.kr>
* @version 0.9 beta
* @access public
*/
class RSSParser {
var $parser;
var $insideTag = '';
var $activeTag = '';
var $channel = array();
var $items = array();
var $item = array();
var $images = array();
var $image = array();
var $textinput = array();
var $textinputs = array();
// 2004.10.25 RSS 2.0 적용
var $parentTags = array('CHANNEL', 'ITEM', 'IMAGE', 'TEXTINPUT');
var $channelTags = array('TITLE', 'LINK', 'DESCRIPTION', 'LANGUAGE','COPYRIGHT','MANAGINGEDITOR',
'WEBMASTER','PUBDATE','LASTBUILDDATE','CATEGORY','GENERATOR','DOCS','CLOUD',
'TTL','RATING','SKIPHOURS','SKIPDAYS','IMAGE','ITEMS', 'TEXTINPUT');
var $itemTags = array('TITLE', 'LINK', 'DESCRIPTION',
'AUTHOR','CATEGORY','COMMENTS','ENCLOSURE','GUID','PUBDATE','SOURCE');
var $imageTags = array('TITLE', 'URL', 'LINK','WIDTH','HEIGHT','DESCRIPTION');
var $textinputTags = array('TITLE', 'DESCRIPTION', 'NAME', 'LINK');
var $moduleTags = array('DC:TITLE', 'DC:CREATOR', 'DC:SUBJECT', 'DC:DESCRIPTION',
'DC:PUBLISHER', 'DC:CONTRIBUTOR', 'DC:DATE', 'DC:TYPE',
'DC:FORMAT', 'DC:IDENTIFIER', 'DC:SOURCE', 'DC:LANGUAGE',
'DC:RELATION', 'DC:COVERAGE', 'DC:RIGHTS',
'BLOGCHANNEL:BLOGROLL', 'BLOGCHANNEL:MYSUBSCRIPTIONS',
'BLOGCHANNEL:MYSUBSCRIPTIONS', 'BLOGCHANNEL:CHANGES');
/**
* Constructor
*
* @access public
* @return void
*/
function RSSParser(){
$this->_create();
}
/**
* create the XML parser resource
*
* @access private
* @return boolean
*
* @see xml_parser_create
*/
function _create(){
$this->parser = @xml_parser_create();
if (is_resource($this->parser)) {
xml_set_object($this->parser, &$this);
xml_set_element_handler($this->parser, "startHandler", "endHandler");
xml_set_character_data_handler($this->parser, "cdataHandler");
return true;
}
return false;
}
/**
* Free the internal resources associated with the parser
*
* @return null
**/
function free(){
if (is_resource($this->parser)) {
xml_parser_free($this->parser);
unset( $this->parser );
}
return null;
}
/**
* Start element handler for XML parser
*
* @access private
* @param object XML parser object
* @param string XML element
* @param array Attributes of XML tag
* @return void
*/
function startHandler($parser, $element, $attr){
switch ($element) {
case 'CHANNEL':
case 'ITEM':
case 'IMAGE':
case 'TEXTINPUT':
$this->insideTag = $element;
break;
default:
$this->activeTag = $element;
}
}
/**
* End element handler for XML parser
*
* @access private
* @param object XML parser object
* @param string
* @return void
*/
function endHandler($parser, $element){
if ($element == $this->insideTag) {
$this->insideTag = '';
$this->struct[] = array_merge(array('type' => strtolower($element)),
$this->last);
}
if ($element == 'ITEM') {
$this->items[] = $this->item;
$this->item = '';
}
if ($element == 'IMAGE') {
$this->images[] = $this->image;
$this->image = '';
}
if ($element == 'TEXTINPUT') {
$this->textinputs = $this->textinput;
$this->textinput = '';
}
$this->activeTag = '';
}
/**
* Handler for character data
*
* @access private
* @param object XML parser object
* @param string CDATA
* @return void
*/
function cdataHandler($parser, $cdata){
if (in_array($this->insideTag, $this->parentTags)) {
$tagName = strtolower($this->insideTag);
$var = $this->{$tagName . 'Tags'};
if (in_array($this->activeTag, $var)){
$this->_add($tagName, strtolower($this->activeTag),$cdata);
} elseif(in_array($this->activeTag, $this->moduleTags)) {
$this->_add($tagName, strtolower($this->activeTag),$cdata);
}
}
}
/**
* Add element to internal result sets
*
* @access private
* @param string Name of the result set
* @param string Fieldname
* @param string Value
* @return void
* @see cdataHandler
*/
function _add($type, $field, $value)
{
if (empty($this->{$type}) || empty($this->{$type}[$field])) {
$this->{$type}[$field] = $value;
} else {
$this->{$type}[$field] .= $value;
}
$this->last = $this->{$type};
}
/**
* Central parsing function.
*
* @access public
* @param string XML Content
* @return boolean
*/
function parse($data){
xml_parse($this->parser,$data);
return true;
}
/**
* Get complete structure of RSS file
*
* @access public
* @return array
*/
function getStructure()
{
return (array)$this->struct;
}
/**
* Get general information about current channel
*
* @access public
* @return array
*/
function getChannel()
{
return (array)$this->channel;
}
/**
* Get items from RSS file
*
* @access public
* @return array
*/
function getItems()
{
return (array)$this->items;
}
/**
* Get images from RSS file
*
* @access public
* @return array
*/
function getImages()
{
return (array)$this->images;
}
/**
* Get text input fields from RSS file
*
* @access public
* @return array
*/
function getTextinputs()
{
return (array)$this->textinputs;
}
}
?>
<?
$key =""; //http://openapi.naver.com 회원가입후 키를 받아야 됩니다.
$display="20"; //20개 출력
$query = $_GET[query];
$ary[] = "UTF-8";
$ary[] = "EUC-KR";
$ary[] = "ASCII";
if(mb_detect_encoding($query, $ary)=="EUC-KR") $query = iconv("EUC-KR","UTF-8",$query);
$query = urlencode($query);
$file = "http://openapi.naver.com/search?key=$key&query=$query&display=$display&start=1&target=webkr";
$fp = fopen($file, "r") or die("file not found");
while (!feof ($fp)) {
$buffer .= fgets($fp, 4096);
}
fclose ($fp);
$rss = new RSSParser();
$rss->parse($buffer);
$structure =($rss->getStructure());
$channel = ($rss->getChannel());
$items = ($rss->getItems());
for($i = 0 ; $i < count($items) ; $i++){
echo "<a href='http://".$items[$i][link]."' target='_blank'>".$items[$i][title]."</a><br />";
echo "http://".$items[$i][link]."<br />";
echo $items[$i][description]."<br />";
echo "<br /><br /><br />";
}
?>
</body>
</html>
댓글 10개
19년 전
고생하셨습니다.
OPEN API에 관한 좋은 글이 있어서 링크하나 붙혀 넣습니다. ^^
Open API, 어떻게 써먹을 것인가?
http://lunaris.egloos.com/1292802
OPEN API에 관한 좋은 글이 있어서 링크하나 붙혀 넣습니다. ^^
Open API, 어떻게 써먹을 것인가?
http://lunaris.egloos.com/1292802
19년 전
네이버 OPEN API를 이용해서 PHP로 검색부분을 개발중인 사이트
http://api.fopen.co.kr
http://api.fopen.co.kr
19년 전
php도 잘모르지만;;XML은 OTL입니다;;
공부좀 해야겠습니다.
izen님 감사합니다. ^^
공부좀 해야겠습니다.
izen님 감사합니다. ^^
19년 전
헉~~~
서기님께서 저에게 무슨 감사할 일이 있다고 그러십니까?
제가 오히려 고맙죠.
특정 팁에 대해서 두루두루 관련 사이트를 둘러보는것도 꽤 재미가 있어서 다른 분들도 참고나 하시라는 뜻입니다.
^^;
서기님께서 저에게 무슨 감사할 일이 있다고 그러십니까?
제가 오히려 고맙죠.
특정 팁에 대해서 두루두루 관련 사이트를 둘러보는것도 꽤 재미가 있어서 다른 분들도 참고나 하시라는 뜻입니다.
^^;
19년 전
aa
Preware
19년 전
과제물이 자꾸만 늘어가는 군요 ^^/;
19년 전
좋네요.
쿼리제한이나 상업적인 용도 제한이 아니면
좋은데....
그렇죠?
쿼리제한이나 상업적인 용도 제한이 아니면
좋은데....
그렇죠?
dwnet
19년 전
감사합니다.
19년 전
Iconv를 지원하지않는 php 버젼에서는 사용이 어렵조 - - ㅜ 대략 좌절했다는....OTL
sdfsdsdf
17년 전
상업적인용도 제한이라도 좋으니 쿼리제한만이라도 어떡게 ??ㅋㅋ
게시판 목록
그누4 팁자료실
그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.
나누면 즐거움이 커집니다.
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 409 | 19년 전 | 5231 | ||
| 408 |
|
19년 전 | 7460 | |
| 407 | 19년 전 | 3339 | ||
| 406 | 19년 전 | 5603 | ||
| 405 | 19년 전 | 3982 | ||
| 404 |
iuman
|
19년 전 | 5636 | |
| 403 | 19년 전 | 5269 | ||
| 402 | 19년 전 | 4008 | ||
| 401 | 19년 전 | 3093 | ||
| 400 | 19년 전 | 2999 | ||
| 399 | 19년 전 | 2833 | ||
| 398 | 19년 전 | 3017 | ||
| 397 | 19년 전 | 4005 | ||
| 396 | 19년 전 | 5530 | ||
| 395 | 19년 전 | 3774 | ||
| 394 |
사랑@마눌
|
19년 전 | 3102 | |
| 393 | 19년 전 | 4762 | ||
| 392 |
iuman
|
19년 전 | 5024 | |
| 391 |
iuman
|
19년 전 | 6156 | |
| 390 |
iuman
|
19년 전 | 3212 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기