묻고답하기

xe1.0.5 사용자입니다.

Top 10 네이버 검색어 순위를 보여주는 위젯 프로그램을 아래에서 다운받아 그리고 제 홈피에 설치하였습니다.
http://www.zeroboard.com/16720158

naver에서 Open API 등록키를 발급받았구요^^
widgets/rank_nexearch/rank_nexearch.class.php 파일에서
widgets/rank_nexearch/skins/ajax/nexearch.class.php 파일에서 
naver에서 발급받은 Open API 등록키를 넣어 주었습니다.
그리고 아래 그림과 같이 생성코드를 주었습니다.




구현된 페이지에서의 이미지는 아래와 같습니다.



문제는 1위에 랭크된 황재원이란 곳을 마우스오버 하면 아래와 같은 url이 표시됩니다.
http://search.naver.com/search.naver?where=nexearch&query=황재원&x=0&y=0&frm=t1

이어서 클릭하면 아래와 같이 나옵니다.



즉, 깨져서 나옵니다.
 
그리하여 http://search.naver.com/search.naver?where=nexearch&query=황재원&x=0&y=0&frm=t1를 주소창에서 복사하여
따로 다른 페이지에서 입력하면 정상적으로 나오는 것입니다.



무엇이 문제일까요?

아래, widgets/rank_nexearch/rank_nexearch.class.php 코드를 붙여 보았습니다.

<?php
    /**
     * @class rank_nexearch
     * @author Simulz (k10206@naver.com)
     * @brief 실시간 검색어
     **/

    class rank_nexearch extends WidgetHandler {
        /**
         * @brief 위젯의 실행 부분
         *
         * ./widgets/위젯/conf/info.xml 에 선언한 extra_vars를 args로 받는다
         * 결과를 만든후 print가 아니라 return 해주어야 한다
         **/
        function proc($args) {
            // 위젯 자체적으로 설정한 변수들을 체크
            $title = $args->title;
            $query = $args->query;
            $target = (in_array($query, array("nexearch", "cafeblog", "dic", "image", "kin", "music", "video", "webkr", "news"))) ? "rank" : "ranktheme";
           
            $APIkey = "등록키";//네이버 OpenAPI 등록키

            $URL_parsed = parse_url("http://openapi.naver.com/search?key=".$APIkey."&query=".$query."&target=".$target);

            $host = $URL_parsed["host"];
            $port = $URL_parsed["port"];

            if ($port == 0) $port = 80;

            $path = $URL_parsed["path"];

            if ($URL_parsed["query"] != "") $path .= "?".$URL_parsed["query"];

            $out = "GET $path HTTP/1.0\r\nHost: $host\r\n\r\n";

            $fp = fsockopen($host, $port, $errno, $errstr, 30);
            if(!$fp) return new Object(-1, 'msg_fail_to_socket_open');
           
            fputs($fp, $out);

            $buff = ''+ '+ ';

            while (!feof($fp)) {
                $str = fgets($fp, 128);
                if ( $start ) $buff .= $str;
                if ( $str == "\r\n" ) $start = true;
            }

            fclose($fp);

            $buff = str_replace('<?xml version="1.0" encoding="UTF-8" ?>', '', $buff);

            $oXmlParser = new XmlParser();
            $xml_doc = $oXmlParser->parse($buff);

            $item = $xml_doc->result->item;

            for($i = 1; $i <= 10; $i++) {
                unset($items);
                $items->k = $item->{'+ 'r'.$i}->k->body;
                $items->s = $item->{'r'.$i}->s->body;
                $items->v = $item->{'r'.$i}->v->body;
               
                $items->href = "http://search.naver.com/search.naver?where=nexearch&query=".urlencode($items->k)."&x=0&y=0&frm=t1";

                $rank_list[$i] = $items;
            }

            $widget_info->rank_list = $rank_list;
            $widget_info->title = $title;

            Context::set('widget_info', $widget_info);

            // 템플릿의 스킨 경로를 지정 (skin, colorset에 따른 값을 설정)
            $tpl_path = sprintf('%sskins/%s', $this->widget_path, $args->skin);
            Context::set('colorset', $args->colorset);

            // 템플릿 컴파일
            $oTemplate = &TemplateHandler::getInstance();
            $output = $oTemplate->compile($tpl_path, 'list');
            return $output;
        }
    }
?>

그리고 widgets/rank_nexearch/skins/ajax/nexearch.class.php 를 붙여봅니다.

<?php
/****************************************************************
먼저 네이버의 OpenAPI 사용 등록 후 인증키를 받으셔야 합니다.
http://openapi.naver.com/
위의 주소로 가셔서, API 이용등록 하시면 발급됩니다.

하단의 23 ~ 46번 줄을 수정하시면 디자인 변경이 가능합니다.
단, 한글은 입력하지 마세요.

라이센스 같은 건 없고, 소스 수정 및 배포도 자유입니다.
단, 문제 발생 시 책임은 사용자에게 있습니다.
*****************************************************************/
$APIkey = "등록키";//네이버 OpenAPI 등록키

$content = get_url_fsockopen("http://openapi.naver.com/search?key=$APIkey&query=nexearch&target=rank");

$content = str_replace(" ","",$content);
$content = str_replace("\n","",$content);

$trans = array (
     "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" => "",
     " " => "",
     "<result>" => "<table width='100%' border='0' cellspacing='0' cellpadding='0'>",
     "<item>" => "",
     "<R1>" => "<tr><td><img src='http://sstatic.naver.com/search/images10/num_realtime01.gif'> ",
     "<R2>" => "<tr><td><img src='http://sstatic.naver.com/search/images10/num_realtime02.gif'>  ",
     "<R3>" => "<tr><td><img src='http://sstatic.naver.com/search/images10/num_realtime03.gif'>  ",
     "<R4>" => "<tr><td><img src='http://sstatic.naver.com/search/images10/num_realtime04.gif'> ",
     "<R5>" => "<tr><td><img src='http://sstatic.naver.com/search/images10/num_realtime05.gif'> ",
     "<R6>" => "<tr><td><img src='http://sstatic.naver.com/search/images10/num_realtime06.gif'> ",
     "<R7>" => "<tr><td><img src='http://sstatic.naver.com/search/images10/num_realtime07.gif'> ",
     "<R8>" => "<tr><td><img src='http://sstatic.naver.com/search/images10/num_realtime08.gif'> ",
     "<R9>" => "<tr><td><img src='http://sstatic.naver.com/search/images10/num_realtime09.gif'> ",
     "<R10>" => "<tr><td><img src='http://sstatic.naver.com/search/images10/num_realtime10.gif'> ",
     "</R1>" => "</td></tr>",
     "</R2>" => "</td></tr>",
     "</R3>" => "</td></tr>",
     "</R4>" => "</td></tr>",
     "</R5>" => "</td></tr>",
     "</R6>" => "</td></tr>",
     "</R7>" => "</td></tr>",
     "</R8>" => "</td></tr>",
     "</R9>" => "</td></tr>",
     "</R10>" => "</td></tr>",
     "<item>" => "",
     "</result>" => "</table>",
     "</K>" => ""
    );
$content = strtr($content, $trans);

$search = array ('/<K>(.[^ \n\<\"\']+)/',
        '@<S>.*?</S>@si',
        '@<V>.*?</V>@si');

$replace = array ('<a href=http://search.naver.com/search.naver?where=nexearch&query=\\1&x=0&y=0&frm=t1 target=_blank class=jung10><strong>\\1<strong /></a>','','');

$content = preg_replace($search, $replace, $content);

if($utf8) echo $content;
else echo iconv('UTF-8', 'EUC-KR', $content);//iconv 함수가 지원하지 않는다면, charset=UTF-8 으로 선언해 주셔야 한글이 안깨집니다.
echo date("Y-m-d H:i:s");

function get_url_fsockopen($url) {
    $URL_parsed = parse_url($url);

    $host = $URL_parsed["host"];
    $port = $URL_parsed["port"];

    if ($port == 0)
        $port = 80;

    $path = $URL_parsed["path"];

    if ($URL_parsed["query"] != "")
        $path .= "?".$URL_parsed["query"];

    $out = "GET $path HTTP/1.0\r\nHost: $host\r\n\r\n";

    $fp = fsockopen($host, $port, $errno, $errstr, 30);
    if (!$fp)
  {
      echo "$errstr ($errno)<br>\n";
    }
  else
  {
        fputs($fp, $out);
        $body = false;

        while (!feof($fp))
    {
            $s = fgets($fp, 128);
            if ( $body )
                $in .= $s;
            if ( $s == "\r\n" )
                $body = true;
        }

        fclose($fp);

        return $in;        // string으로 받고싶을땐...
    }
}
?>

글쓴이 제목 최종 글
XE 공지 글 쓰기,삭제 운영방식 변경 공지 [16] 2019.03.05 by 남기남
윤바라기 실수 해버렸습니다. [3] 2012.05.12 by homebiz123
kbj153 메인 페이지 기본 설정 질문입니다. [1] 2012.05.12 by kain786
lmjy2k 관리자 아이콘,업체 아이콘,레벨 아이콘 분리 어떻게 하나요? [1] 2012.05.12 by 툴툴스
고이풀 포인트 실시간 값 반영 안되는 이유 문의해요.  
유샤인 혹시 XE에 Formmail 과 같은 기능이 있는 지요? [1] 2012.05.12 by 윈컴이
cryingjean 언어변경 질문드립니다~~!! file  
빠다Lee 정말 도움이 필요합니다!!!! 꼭 도와주세요 [2] 2012.05.12 by homebiz123
김팀장 아무리 해 봐도 잘 안 된다면 여기로 여쭤보는 게 맞는 거죠? (게시판달기) [2] 2012.05.12 by homebiz123
쩌는소군 게시판 합치기에 대한 질문입니다. [2] 2012.05.12 by homebiz123
김종흔 회원가입을 클릭하면 웹페이를 표시할수 없다고.... [1] 2012.05.12 by homebiz123
임펄스 텍스타일 언어팩 프랑스, 스페인 구할수 없나요?  
카우도 위젯 페이지에 배경색 지정하는 방법좀 알려주세요  
쮸야282 제로보드는 폰에서 갤러리 추가가 안되나요? [1] 2012.05.11 by 마음의빈자리
주니주니11 최근게시물을 만들려고 하는데요... ㅠㅠ [2] file 2012.05.11 by CMD
mchat_ [질문] 설치문제 OS 재설치후 XE 설치 화면이 나타나질 읺습니다. 도와주세요 [1] 2012.05.11 by 퍼니엑스이
딸기생크림 cafexe 게시판 추가하고 싶어요. ㅠㅠ  
koma js 파일이 수정이 안됩니다.  
비커즈 첨부파일 질분 입니다. 이미지확장자에 따라 아이콘틀리게.. [1] 2012.05.11 by 노란붕어
leeba37 로그인 유지 풀림 현상 [1] 2012.05.11 by 강하레
황인석203 게시판설정 에대해서 [2] 2012.05.11 by 다조아해
밤송2 홈페이지에 게시판 연동  
smurp777 게시판 형식 변경 가능한가요? [1] file 2012.05.11 by 노란붕어
가브리엘조 사이트맵 메뉴 생성시 menu_item_srl에 값을 입력해주세요.  
김영신2 NEW아이콘만 안나오네요...  
Free942 쉬운설치 내부서버 오류 제발도와주세요 [1] 2012.05.11 by Free942
Free942 포인트 부족시 다운로드 금지!  
윈컴이 흠... 분류기능이 왜 안나오는걸까요...? [14] 2019.11.30 by 토르파파
이찌부 설치환경문제인지, 다른문제인지... 익스9, 크롬등에서 문제 file  
태백산맥 비회원 글쓰기시 목록에 이름 나오게 하는 방법  
혜찬들 최근게시물 위젯으로 오늘 날짜 게시물만 가져올 수 있을까요?