iWiz ShareBase

IT Specialist 윤태현의 iWiz ShareBase는 IT뿐 아니라 각종 잡다한 지식들을 함께 나누는 지식공유 커뮤니티입니다.

iWiz,ShareBase,윤태현,Java,JSP,EJB,IT,정보기술,웹프로그래밍,PHP,ASP,DBMS,MySQL,서버,네트워크,server,network,WAS,웹애플리케이션,블로그,blog,웹서버,DB,오라클,oracle,mysql,JRun,웹로직,톰캣,tomcat,아파치,자동차,EF쏘나타,로또 6/45

갤러리 Pixelgrapher.com | 로또 6/45 번호생성 및 통계 데이터 | 전체기사보기 | 전체글 #1 | 전체글 #2 | 전체글 #3 | 전체글 #4 | 전체글 #5 | 전체글 #6 | 전체글 #7 | 전체글 #8 | 전체글 #9 | 전체글 #10 |
HOME iWiz
ShareBase
Remember 0523 & 0818
지식은 나눌수록 커집니다 - iWiz's ShareBase
IT 잡동사니 기타 IT 및 컴퓨터 기술 관련 잡동사니 자료들을 모아두었습니다.


  iWiz(2010-01-23 15:34:37, Hit : 7866, Vote : 0
 http://www.iwiz.pe.kr
 http://blog.naver.com/iwizkr
 http://blog.dreamwiz.com/iwizkr

드림위즈에서 네이버로 블로그 이전 경험담


이번에 드림위즈에서 네이버로 블로그를 옮기는 과정을 소개하고자 합니다.


별 계획없이 작업을 하다보니 삽질도 많이 했고 불필요한 시간도 많이 걸렸었는데,

제가 겪은 시행착오를 통해 블로그 이전을 고려하는 분들에게 도움이 되었으면 하고 정리를 해봅니다.

 

 

1. 이전 할까? 말까?


드림위즈에서 블로그 관리와 기능개선에 별로 신경을 안쓰는듯 해서 예전부터 옮기려고 했었는데,

데이터 백업이 쉽지 않아 그냥 눌러앉아 있다가 지난번 장애를 계기로 이전을 결심했습니다.

글 수는 71개 밖에 되지 않지만 각 글마다 사진이 다수 들어있어 총 1,800여 장의 사진들이 텍스트와 함께

어울려져 있는 구조라서 이 형태를 똑같이 유지하면서 옮기는 것이 쉬운 일이 아니었죠.

하지만 드림위즈 블로그에 더이상 희망이 보이지 않아 결단을 내리게 되었습니다.


 

2. 무계획 삽질하기


첫 이전 시도는 IT개발자 출신답지 않게 삽질로 결정했습니다.

글이 71개 밖에 안되니까 뭘 만드니 마니 할 필요없이 그냥 손으로 가져다 옮기자는 것이었죠. 

그런데 생각보다 시간이 많이 걸리더군요.  창 두개 띄워놓고 한쪽에서 글을 가져다 붙인 후

PC에 다운로드 받아놓은 사진들을 업로드 해 텍스트 사이 원래 제 자리에 찾아넣는 것이어죠.

하지만... 시간이 생각보다 너무  많이 걸리고 지루해서 몇 개하다가 포기했습니다.


[Tip] 웹페이지에 있는 이미지를 한꺼번에 다운로드 할땐 파이어폭스를 사용하세요.

IE에서 하나씩 오른쪽 버튼 눌러가며 저장할 필요없이 파이어폭스의 도구-페이지정보를 들어가서

미디어탭에서 웹페이지의 이미지중 원하는 이미지들만 한꺼번에 저장할 수 있답니다.


 

3. 도구 이용하기


네이버 블로그 관련 정보를 보다가 MS의 Live Writer나 Word 2007 같은 외부프로그램에서도

바로 네이버 블로그로 포스팅할 수 있다는 것을 알게되었습니다.  바로 metaweblog API죠.

일단 Live Writer로 시도해봤는데 실패했습니다.  드림위즈의 컨텐츠를 Live Writer에 그대로 붙여넣고

포스팅해보니 네이버 블로그에 글은 잘 올라가는데, 이미지는 드림위즈에서 블러오더군요.

텍스트만 가져와선 아무 소용없죠.  HTML과 이미지 등 모든 데이터가 이전되야 하니까요.

몇가지 변형된 형태로 시도해봤지만 다들 실패 또는 마음에 들지 않았습니다.


MS Word 2007에선 드림위즈에서 Copy 해온 내용을 블로그로 포스팅했더니, 이미지까지 모두 올라가더군요.

그래서 쾌재를 부르다가, 문득 이상한 느낌이 들어 잘 살펴보니 이미지를 MS Word에서 임의로 변형시키더군요.

일단 사진 크기도 달라지고(원본크기보다 늘어남) 더 압축되어 퀄리티가 확 떨어지고 EXIF 등도 사라집니다.

앞서 1단계에서의 삽질보다는 더 편리한 작업이 가능하지만, 어차피 똑같은 삽질인데다 이미지 품질의 손상 때문에

선뜻 손이 가질 않는군요.


[Tip] 포스트 수가 크게 많지 않고 사진의 퀄리티를 중요하게 생각하지 않는다면 MS Word 2007을 활용한

방법도 꽤 괜찮습니다.  원래 사용하던 블로그의 컨텐츠를 복사해다 Word에 붙여넣고, Word에서 블로그 게시만

선택하면 HTML과 이미지 모두 그대로 올라갑니다.  단, 이미지는 사이즈가 바뀌거나 화질이 열화될 수 있습니다.

MS Word의 네이버 블로그 셋팅은 여기 링크를 참고하세요.

=> http://section.blog.naver.com/sub/NoticeTip.nhn

 


4. 기존 블로그 컨텐츠 긁어오기


수작업으로 가져다 붙이기를 포기한 후에는 일단 기존 블로그의 컨텐츠(HTML, 이미지)를 긁어와서 하드에

저장하기로 마음먹었습니다.  컨텐츠를 일단 내 하드에 넣어둔 뒤 볶아먹던 삶아먹던 하자는 것이었죠.

컨텐츠를 하드에 안전하게 백업 받아둔다는 의미도 있구요.

 

컨텐츠를 가져오는데는 WebZip 같은 유틸리티를 사용하셔도 되고, 다양한 방법이 있습니다.

저는 개발용으로 제 PC상의 VMWare에서 리눅스를 돌리고 있기 때문에 wget을 사용했습니다.

wget은 아주 강력한 웹스파이더 엔진이죠. 기본적으로 유닉스 환경이긴 하지만 윈도용 win32 버전도 구할 수가 있답니다.

http://gnuwin32.sourceforge.net/packages/wget.htm

 

저는 다음과 같은 명령으로 컨텐츠를 가져왔습니다.

 

 $ wget -nv -p -k -nd -P /home/myacc/blog/글번호

   "http://blog.dreamwiz.com/media/pt/CT_guestFolderList.asp?uid=사용자ID&list_id=글번호"

 


저는 포스트 수 자체가 많지 않으므로 사전에 글번호들을 확보해서 스크립트를 이용해 각 글 별로 루프를 돌렸습니다.

저 명령에 따라 wget은 /home/myacc/blog 아래에 글번호로 폴더를 만들고 해당 글의 HTML 컨텐츠와 이미지들을

모두 그 폴더에 저장시켜줍니다.  아주 깔끔하게 처리되었죠.

 

위에 사용한 옵션들을 간략하게 설명하자면

-nv : 화면에 출력되는 메세지를 최소화

- p : 페이지내의 이미지 등 구성 요소도 함께 다운로드

- k : 페이지내 링크를 다운로드 받은 디렉토리 구조에 맞게 변환

- nd : 디렉토리를 생성하지 않음 (이 옵션이 없으면 서버와 동일한 구조로 디렉토리가 생성)

- P ... : 가져온 컨텐츠를 지정한 디렉토리내에 저장

 

포스트 수가 많을 경우에는 글번호들을 미리 파악하기 어려우므로, wget 옵션을 조정해서 wget이 자동으로

링크를 따라가며 포스트들을 모두 수집하도록 하는 방법을 활용하면 됩니다.

이때 옵션을 잘못주면 드림위즈의 모든 컨텐츠가 하드로 들어올 수도 있으니 주의해야 합니다.

 

 

5. 컨텐츠 추출하기

 

wget을 이용해서 기존 블로그 컨텐츠들을 깔끔하게 가져오긴 했는데, 컨텐츠를 열어보면 드림위즈에서 붙인

불필요한 요소와 태그들로 인하여 지저분해 보입니다.

 

그래서 정규표현식을 이용해서 제목, 태그, 날짜, 원본글 URL, 본문 등 필요한 요소들을 필드별로 추출해내고,

불필요한 태그들은 깨끗하게 정리해서 가공을 하여 다시 저장하도록 하였습니다.

이렇게 깨끗하게 처리를 해두면 차후에도 다양한 용도로 재활용할 수 있을 것 입니다.

 

저는 PHP에서 정규표현식을 이용해서 작업을 했습니다.

자바로 할까 Perl로 할까 고민하다가 가장 빠르게 작업할 수 있는 PHP로 했습니다.

 

 

$html : 가져온 HTML 전체 컨텐츠

 

// 제목, 원본 링크 등 추출
$ptn = "/setUrlLayer.'(.+)', '.*- (.+)'/";
if (preg_match($ptn, $html, $matches)) {
 $blog_url = $matches[1];
 $blog_title = $matches[2];
}

// 원문 게시일 
$ptn = "/<font class="no">(d{4}-d{2}-d{2}.*)</font>/";
if (preg_match($ptn, $html, $matches)) {
 $blog_date = $matches[1];
}


// 사용자 컨텐츠 부분만 빼오기
$ptn = "/(<div id='user_contents'.*)/";
if (preg_match($ptn, $html, $matches)) {
  $line = $matches[1];
}

// 사용자 태그 추출
$ptn = "/rel=.tag.><font color='#999999'><u>(.*?)</u>/";
preg_match_all($ptn, $line, $matches);
$blog_tag = implode(', ', $matches[1]);
 
// 본문 추출
$ptn = "/<body>(.*)</body>/";
if (preg_match($ptn, $line, $matches)) {
 $html = $matches[1];
}

 

 

 

이렇게 필요한 요소들만 뽑아내면 다양한 용도로 활용할 수 있겠죠.

저는 이 데이터를 이용해 metaweblog API를 이용해 글을 네이버로 자동으로 포스팅하고,

컨텐츠의 보존을 위하여 깨끗한 HTML로 저장하여 하드에도 보관중 입니다.

 

 

6. metaweblog API로 네이버 블로그에 올리기

 

이제 metaweblog API를 활용해서 가져온 글을 네이버 블로그로 자동으로 올릴 차례입니다.

동일한 방법으로 네이버 블로그뿐 아니라 metaweblog API를 지원하는 다른 블로그에도 올릴 수 있습니다.

metaweblog를 사용하려면 먼저 블로그 관리메뉴의 환경설정 항목의 "글쓰기 API 설정"에 들어가서

연결가능 상태로 만들고 API 연결 URL과 연결 암호를 알아둬야 합니다.

 

metaweblog는 XML-RPC를 사용하므로, PHP용 XML-RPC 라이브러리가 필요하니 이것도 다운받아 둡니다.

http://phpxmlrpc.sourceforge.net/

 

막상 소스는 아주 간단합니다.

 

 

 

 

 include("xmlrpc.inc");
 $GLOBALS['xmlrpc_internalencoding'] = 'UTF-8';


 $api_url = "https://api.blog.naver.com/xmlrpc";
 $blog_user = "네이버ID";
 $blog_passwd = "API 연결암호";

 

 function upload_image($fpath) {
  global $api_url, $blog_user, $blog_passwd;
  
  $imgbit = file_get_contents($fpath, FILE_BINARY);
  $img = new xmlrpcval(
   array (
    'bits' => new xmlrpcval($imgbit, 'base64'),
    'type' => new xmlrpcval('image/jpeg', 'string'),
    'name' => new xmlrpcval(basename($fpath), 'string')
   ), 'struct');

  $c = new xmlrpc_client($api_url);
//  $c->debug = true; // Uncomment this line for debugging info
  $c->setSSLVerifyPeer(false);

  $x = new xmlrpcmsg("metaWeblog.newMediaObject");
  $x->addParam(new xmlrpcval($blog_user, 'string'));
  $x->addParam(new xmlrpcval($blog_user, 'string'));
  $x->addParam(new xmlrpcval($blog_passwd, 'string'));
  $x->addParam($img);
  
  $c->return_type = 'phpvals';
  $r =$c->send($x, 3, 'https');
  if ($r->errno=="0") {
      return $r->val['url'];
  } else {
      echo "<br>There was an error<pre>";
      print_r($r);
      echo "</pre>";
      return null;
  }
  
 } // upload_image


 function new_post($subj, $content) {
  global $api_url, $blog_user, $blog_passwd;
  
  $c = new xmlrpc_client($api_url);
//  $c->debug = true; // Uncomment this line for debugging info
  $c->setSSLVerifyPeer(false);
  
  $post = new xmlrpcval(
   array (
    'title' => new xmlrpcval($subj, 'string'),
    'description' => new xmlrpcval($content, 'string')
   ), 'struct');
 
  $x = new xmlrpcmsg("metaWeblog.newPost");
  $x->addParam(new xmlrpcval($blog_user, 'string'));
  $x->addParam(new xmlrpcval($blog_user, 'string'));
  $x->addParam(new xmlrpcval($blog_passwd, 'string'));
  $x->addParam($post); 
  $x->addParam(new xmlrpcval(true, 'boolean'));
  $x->request_charset_encoding = "UTF-8";
  
  $c->return_type = 'phpvals';
  $r =$c->send($x, 3, 'https');
  if ($r->errno=="0") {
   $post_url = "http://blog.naver.com/$blog_user/".$r->val;
      return $post_url;
  } else {
      echo "<br>There was an error<pre>";
      print_r($r);
      echo "</pre>";
      return null;
  }
 } // new_post

 

upload_image 함수는 네이버에 이미지를 업로드하기 위한 함수입니다.

인자 $fpath에 이미지 파일 경로만 전달해서 넘기면, 네이버에 업로드한 후 네이버서버 상의 이미지 URL을 반환해줍니다.

만약 이미지가 여러개라면 루프로 돌리면 됩니다.

그리고 잊지말아야 할 것은 본문의 HTML에서 이미지를 호출하는 부분(img src)은 네이버에 업로드된 이미지 URL로

바꿔줘야 합니다.  그래야 본문이 올라간 후 이미지들이 정상적으로 보이겠죠.

 

new_post 함수에 제목과 본문 내용을 인자로 넘기면 해당 내용으로 네이버에 포스트가 올라갑니다.

이 함수의 반환값은 네이버에 포스트된 글의 URL 입니다.

 

이 두 함수를 이용해 적절히 에러처리 및 루프 처리를 해주면 하드에 받아둔 컨텐츠를 자동으로 네이버에 등록할 수 있습니다.

 

 

이상으로 제가 블로그를 이전한 과정을 대략적으로 소개했는데, 상황에 따라 달라지는 부분은 있겠지만

참고할 만한 부분들이 있을것이라 생각합니다. 

 

처음부터 계획을 잘 세웠으면 시간 낭비도 하지 않고, 한 개의 프로그램으로 컨텐츠 다운로드, 컨텐츠 변환/추출,

PC저장 및 네이버 업로드를 모두 처리할 수 있도록 개발했을텐데 불필요하게 이것 저것 많이 손을 댔습니다.

 

아무쪼록 다른 분들께서는 이 글을 참조하여 시행착오없이 블로그 이전을 성공적으로 하시기 바랍니다. ^^

 




119   USB 메모리 4종 크기 비교  iWiz 2012/03/07 11381 0
118   LG070 기본 AP(myLG070) 사용/사용안함 설정  iWiz 2010/02/22 13268 0
117   스마트폰 시대 ‘모바일 OS 전쟁’  iWiz 2010/02/10 11676 0
116   애플-플래시-HTML5를 둘러싼 ‘갑론을박’ 관전법  iWiz 2010/02/03 9815 0
115   무선랜, 전자렌지·무선전화기 옆에선 '거북이'  윤태현 2008/07/02 7503 0
114   Windows XP 4G RAM 사용하기  iWiz 2008/02/05 12076 0
113   인텔 Core2Duo 성능비교 벤치마크  iWiz 2008/02/04 9049 0
112   멀티 그래픽 카드 솔루션, 진화 혹은 퇴보?  iWiz 2006/06/14 6785 0
111   "MS 오리가미" UMPC의 모든것  iWiz 2006/03/10 5732 2
110   Intel CPU 제품군 일람표  iWiz 2006/03/01 5589 2
109   KT 공유기 색출 시스템은 엄포?…개발자들 ″검출 불가능″  iWiz 2005/08/28 5781 3
108   애플, IBM과 결별 인텔과 손잡는다  iWiz 2005/06/06 4726 1
107   MSN 메신저의 로그인 메일주소 삭제하기  iWiz 2005/03/16 6244 1
106   한눈에 살펴보는 DVD 레코딩의 원리와 작동 방식  iWiz 2005/02/15 8277 6
105   씨디롬의 문(트레이)이 잘 열리지 않을 때  iWiz 2004/12/24 6521 17

1 [2][3][4][5][6][7][8]
 

Copyright 1999-2023 Zeroboard / skin by zero
iWiz ShareBase, ⓒCopyleft by iWiz.  For more information contact .
본 웹사이트에 게시된 이메일 주소가 전자우편 수집 프로그램이나 그 밖의 기술적 장치를 이용하여 무단으로 수집되는 것을 거부하며, 이를 위반시에는 정보통신망법에 의해 형사처벌됨을 유념하시기 바랍니다. [게시일 2004. 1. 31]