워드프레스에서 블로거 뉴스 추천 링크 넣기…

이글루스 밸리나 다음 블로거 뉴스, 이올린, 믹시 등의 메타 사이트에 글을 보내는 방법을 알게 되면서 많은 것들을 공부해보고 있습니다. 그런데 이 중 다음 블로거 뉴스나 이올린 같은 경우 사용자들로부터 글을 추천받아서 추천을 많이 받은 글은 메인에 노출되는 형태인 것 같더군요.

믹시의 경우 설치형 블로그 사용자들을 위해 추천 배너를 만들 수 있는 메뉴를 제공하고 있는 반면 다음 블로거 뉴스는 티스토리 사용자들에 한해서만 추천 배너를 제공하고 있습니다.

이런 불의를 보고만 있을 순 없기 때문에 (가칭) daum blogger news plugin을 제작하기로 마음먹었습니다. 추천 배너를 살펴보니 블로거 뉴스에 있는 제 글의 ID값을 플래쉬 파라미터로 넘겨주는 형태였습니다만 이 ID값이 제 블로그에서 생성되는 값이 아니라 다음 블로거 뉴스 측에서 생성하는 값이다보니 단순한 코드만으로 해결할 수 있는 문제는 아닌 듯 싶었습니다.

다음 블로거 뉴스 측에서는 ID값을 받아올 방법을 찾을 수 없었지만, 다음 OpenAPI사이트를 통해 블로거 뉴스에서 ID를 받아올 수 있는 방법을 찾아냈습니다.

‘http://api.bloggernews.media.daum.net/open/news_info.xml?permalink=내퍼머링크’ 형태로 접근하게 되면 XML로 응답이 오는데, 거기에 있는 ID값을 이용하면 되는 것이었습니다. 이를 이용하기 위해서 작성해본 코드는 다음과 같습니다.

<?PHP
 
if(!($fp=fsockopen("api.bloggernews.media.daum.net", 80, $errno, $errstr, 5 )))
    fprintf( stderr, $errstr );
 
 
$out  = "GET /open/news_info.xml?permalink=http://b.mytears.org/2009/02/1438 HTTP/1.1\r\n";
$out .= "Host: api.bloggernews.media.daum.net\r\n";
$out .= "Connection:Close\r\n\r\n";
 
// 쿼리 보내기
fputs( $fp, $out );
 
// 헤더 읽기
while( $data = fgets($fp) ){
    if( !trim($data) )
        break;
}
 
// 응답 받아오기
$data = stream_get_contents($fp);
fclose($fp);
 
// 받아온 응답 파싱
$xml = new SimpleXMLElement($data);
 
// status code가 정상이면 위젯 출력
if( $xml->head->code == 200 ){
    echo '<div class="blogger-news-widget" style="width: 100%; text-align: center">
            <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="400" height="80" align="middle">
                <param name="allowScriptAccess" value="always"/>
                <param name="movie" value="http://api.bloggernews.media.daum.net/static/recombox1.swf"/>
                <param name="flashvars" value="'.$xml->entity->news->id.'"/>
                <param name="quality" value="high"/>
                <param name="bgcolor" value="#ffffff"/>
                <embed src="http://api.bloggernews.media.daum.net/static/recombox1.swf" flashvars="nid='.$xml->entity->news->id.'" quality="high" bgcolor="#ffffff" width="400" height="80" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"/>
            </object>
        </div>';
}
 
?>

제 서버에서는 보안을 위해 allow_fopen_url을 꺼둔 상태이다보니 fsockopen을 사용해야했지만 덕분에 더 활용 폭은 넓어질 것으로 보이네요.

실제 사용을 위해서는 사용하시는 워드프레스 테마의 single.php 파일의 적당한 부분에 저 코드를 넣어주시면 되겠습니다. 그 중에서 $out = “GET /open/news_info.xml?permalink=http://b.mytears.org/2009/02/1438 HTTP/1.1\r\n”; 부분만 $out = “GET /open/news_info.xml?permalink=”.get_permalink().” HTTP/1.1\r\n”; 식으로 수정하시면 되겠네요.

사실 그 대상과 방법의 차이일 뿐[1] Trackback for Korean이나 WP-Eolin은 비슷한 역할이며, 지금 제작하려는 Mixhi 배너 삽입 플러그인이나 블로그 뉴스 추천 배너 삽입 플러그인의 경우 Trackback for Korean과 큰 연관이 있다고 생각합니다. 방금 얘기한 각각의 플러그인들 또한 그리 활발히 유지보수가 되지 않는다는 점을 생각했을 때 제가 예전에 만들었던 Korean Trackback과 이 플러그인들을 통합해서 새로운 플러그인을 하나 만들어보는 건 어떨까 하는 생각을 해보게 되네요.

덧: 워드프레스 플러그인을 원하시면 아래 코드를 사용하세요. 발로 짰지만 동작은 합니다.

<?
 
function blogger_news($text){
 
global $post;
if(!($fp=fsockopen("api.bloggernews.media.daum.net", 80, $errno, $errstr, 5 )))
    return $text;
 
if( !is_feed() && !is_single() )
    return $text;
 
$out  = "GET /open/news_info.xml?permalink=".get_permalink($post->id)." HTTP/1.1\r\n";
$out .= "Host:api.bloggernews.media.daum.net\r\n";
$out .= "Connection:Close\r\n\r\n";
 
// 쿼리 보내기
fputs( $fp, $out );
 
// 헤더 읽기
while( $data = fgets($fp) ){
    if( !trim($data) )
        break;
}
 
// 응답 받아오기
$data = stream_get_contents($fp);
fclose($fp);
 
// 받아온 응답 파싱
$xml = new SimpleXMLElement($data);
 
// status code가 정상이면 위젯 출력
if( $xml->head->code == 200 ){
    $text .= '<div class="blogger-news-widget" style="width: 100%; text-align: center">
            <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="400" height="80" align="middle">
                <param name="allowScriptAccess" value="always"/>
                <param name="movie" value="http://api.bloggernews.media.daum.net/static/recombox1.swf"/>
                <param name="flashvars" value="nid='.$xml->entity->news->id.'"/>
                <param name="quality" value="high"/>
                <param name="bgcolor" value="#ffffff"/>
                <embed src="http://api.bloggernews.media.daum.net/static/recombox1.swf" flashvars="nid='.$xml->entity->news->id.'" quality="high" bgcolor="#ffffff" width="400" height="80" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"/>
            </object>
        </div>';
}
 
    return $text;
}
 
add_filter( 'the_content',   'blogger_news');
add_filter( 'the_excerpt_rss',   'blogger_news', 100);
?>

덧2: 매번 페이지 요청이 있을 때마다 ID를 읽어오기 보다는 해당 글이 블로거 뉴스에 정상적으로 등록된 뒤 처음으로 로딩될 때 ID를 읽어서 저장해두는 방식으로 바뀌어야할 것 같네요.


[1] 방법만을 봤을 때 이글루스 밸리나 다음 블로거 뉴스는 트랙백을 통해 글을 받고, 이올린은 AJAX를 통해 글을 받는 차이가 있지만 두 플러그인 모두 외부 메타 블로그로 글을 보내기 위한 플러그인이라는 점에서 공통점이 있다고 생각합니다.

Related Posts

This entry was posted by 정태영 on Tuesday, February 10th, 2009 at 1:05 AM and is taged under , , , , , , . You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

6 Responses to “워드프레스에서 블로거 뉴스 추천 링크 넣기…”

  1. [...] 다움추천버튼 : 수영님의 다음블로거뉴스 플러그인 + 태영님의 워드프레스에서 블로거뉴스추천링크넣기 [...]

  2. 수영 says:

    안녕하세요? 예전에 unfix에서 호스팅 받던 智熏이란 작자입니다. 기억하실는진 -_=

    다음 블로거뉴스 API에 관해 검색하다가 들렀는데요. ㅎ 보여주신 소스로 블로거뉴스 워드프레스 플러그인 제작하는데 참고해도 될까 해서 여쭙습니다.
    대충, shortcode나 custom field로 포스트 개별적으로 블로거뉴스 추천 위젯을 삽입하거나, 모든 글에 대해서 무작정 위젯을 삽입하는 플러그인을 만드려고 합니다. 헤헤.

    • 정태영 says:

      custom field를 활용하도록 고쳐야하는데 귀찮아서 그냥 냅두고 있네요. 우선 제가 사용하는 플러그인 코드를 추가해두었습니다.

  3. blogine says:

    안녕하세요. 만들어주신 code덕분에 wordpress에서 daum 추천링크를 넣는데 성공했는데요. 이상하게 Firefox에서는 안그러는데, explorer에서 보면 flash에 잘못된 태그정도라고 나옵니다. 혹시 왜그런지 알수 있나요?
    제 블로그를 인터넷익스플로러로 보시면 알수 있을거 같아요.^^

    • 정태영 says:

      티스토리 같은데서 나오는 출력을 복사해다 만든 것인데 :) 제가 지금 맥이라 확인이 쉽지 않네요. 내일 학교에 가서 체크를 해보겠습니다.

      • blogine says:

        네..감사합니다. 일단 현재는 다른 방식으로 변경해서 적용을 해둔상태라 , 확인하기가 좀 힘든듯한데,,,암튼 좋은 자료 감사합니다.

Leave a Reply

믹시