BlogAPI를 이용해 원격에서 티스토리에 글쓰는걸 테스트하고 있습니다.

한글이 깨지는 문제가 있는데 해결 방법을 아시는분 계시면 도움 부탁 드립니다 ^^


http://phpXMLRPC.sourceforge.net 

이곳에서 xmlrpc.inc를 받아 PHP로 테스트를 하다가 몇가지 문의사항이 있어 질문 드립니다. 

metaWeblog.newPost (blogid, username, password, struct, publish) 
metaWeblog.editPost (postid, username, password, struct, publish) 
metaWeblog.getPost (postid, username, password) 
metaWeblog.newMediaObject (blogid, username, password, struct) 
metaWeblog.getCategories (blogid, username, password) 
metaWeblog.getRecentPosts (blogid, username, password, numberOfPosts) 



질문 1. 데이터를 읽어올때 한글이 깨져서 보임 

현재 이 API를 이용하여 하나씩 테스트를 하는데 글등록시엔 한글이 정상적으로 입력이 되는데 editPost, getPost, getCategories, getRecentPosts등으로 데이터를 읽어올때 한글이 깨져서 보입니다. 

해결해보려고 이것저것 하고 있는데 해결이 되질 않네요 ^^; 

현재 테스트하고 있는 소스의 일부분 입니다. 

테스트 주소 => http://gpson.kr/xmlrpc/ 

$GLOBALS['XMLRPC_internalencoding'] = 'UTF-8'; 

function metaWeblog_newPost($blogid, $title, $content, $tags, $category="") { 
global $g_id; 
global $g_passwd; 
global $g_blog_url; 

$client = new XMLRPC_client( "{$g_blog_url}"); 
$f = new XMLRPCmsg("metaWeblog.newPost", // metaWeblog.newPost method 
array( 
new XMLRPCval($blogid, "string"), // blogid. 
new XMLRPCval($g_id, "string"), // user ID. 
new XMLRPCval($g_passwd, "string"), // password 
new XMLRPCval( // body 
array( 
'title' => new XMLRPCval($title, "base64"), 
'description' => new XMLRPCval($content, "base64"), 
'category' => new XMLRPCval($category, "base64"), 
'mt_keywords' => new XMLRPCval($tags, "base64") 
), "struct"), 
new XMLRPCval(false, "boolean") // publish 

); 

$f->request_charset_encoding = 'UTF-8'; 

$response = $client->send($f); 

return $response; 


function metaWeblog_getPost($postid) { 
global $g_id; 
global $g_passwd; 
global $g_blog_url; 

$client = new XMLRPC_client( "{$g_blog_url}"); 
$f = new XMLRPCmsg("metaWeblog.getPost", // metaWeblog.getPost method 
array( 
new XMLRPCval($postid, "string"), // postid. 
new XMLRPCval($g_id, "string"), // user ID. 
new XMLRPCval($g_passwd, "string"), // password 

); 

$f->request_charset_encoding = 'UTF-8'; 

$response = $client->send($f); 

return $response; 


위의 함수를 이용하여 글을 등록할땐 한글이 정상적으로 입력이 되고 metaWeblog_getPost() 함수로 읽어올때 아래와 같이 한글이 깨져서 보입니다. 

$description = $get_result->val->me["struct"]["description"]->me["string"]; 

데이터 값은 이런식으로 받아왔습니다. 

결과값 

5266-10 글 읽기 
link : http://blog.gpson.kr/10 
permaLink : http://blog.gpson.kr/10 
postid : 5266-10 
categories : 
title : Blog API ??? ? 
description : ??? ???? 
??? ????? 
mt_keywords : tag1,tag2,???? 
publish : 0 
dateCreated : 2009-08-23T15:41:31+09:00 


한글 처리를 어떻게해야 하는지 도움 부탁 드립니다 ^^ 



질문 2. 글 등록시 카테고리가 적용이 되질 않음 

getCategories로 카테고리를 읽어오는건 정상적으로 동작을 합니다. 

카테고리 수 : 4개 
[0] categories : flickr 
[1] categories : test 
[2] categories : ?????? 
[3] categories : ??? 

$post_result = metaWeblog_newPost($g_blog_id, "Blog API 테스트 글", "한글은 안되나?<br />태그도 <b>먹히겠지?</b>", "tag1,tag2, 한글태그", "test"); 

위와 같이 카테고리를 test로 설정해서 입력하면 지정한 카테고리로 저장이 되지 않습니다. 

현재 카테고리 지정은 안되는 기능 인가요? 




질문3. 이건 어떤 차이 인가요? 

같은 소스로 티스토리와 텍스트큐브닷컴을 테스트해보면 반환되는 값에 조금 차이가 있네요. 

티스토리의 경우 
[raw_data] => HTTP/1.1 200 OK 
Date: Sun, 23 Aug 2009 07:01:51 GMT 
Server: Apache 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Content-Length: 474 
Connection: close 
Content-Type: text/xml 

����N1�_e�H� 
!M�q�*�PUܑ�k6�ze��E�Bj/Hh�C�r����;�,۴IU�2^�g~3��;�{��w:ީ�5\�x�P��N%��j�ҥDq��� 
���-�$a�)[���0�:��0�V=n(���T����I���>@�A(J��k ,h3�Z�&AEAE 
�3��n{���.�7q�Ū�����ȋa���x4�~zӫ�ɧ�������Z�ٻ�����{/��\�۟ٗ������a�r���i�;��V��hWW� H��'u��~�e.�߲�����n��Ζ;���k��V�q��[�����`����vc�~�]R5p�6��RQf�ͱ��p.Q;�Ia�%�hPמ�K�2)��a�4+7���?@���s��ڄeBq��"Ù��ë~x��r4�;�\A�9�J���-^�*� 



텍스트큐브닷컴의경우 
[raw_data] => HTTP/1.1 200 OK 
Date: Sun, 23 Aug 2009 07:01:12 GMT 
Server: Apache 
Content-Length: 1200 
Connection: close 
Content-Type: text/xml 

<methodResponse><params><param><value><struct><member><name>link</name><value><string>http://blog.gpson.kr/12</string></value></member><member><name>permaLink</name><value><string>http://blog.gpson.kr/12</string></value></member><member><name>userid</name><value><string>7722</string></value></member><member><name>description</name><value><string>한글은 안되나?&lt;br /&gt;태그도 &lt;b&gt;먹히겠지?&lt;/b&gt;</string></value></member><member><name>postid</name><value><string>5266-12</string></value></member><member><name>title</name><value><string>Blog API 테스트 글</string></value></member><member><name>dateCreated</name><value><dateTime.iso8601>2009-08-23T16:01:09+09:00</dateTime.iso8601></value></member><member><name>categories</name><value><array><data></data></array></value></member><member><name>publish</name><value><i4>0</i4></value></member><member><name>mt_allow_pings</name><value><i4>1</i4></value></member><member><name>mt_allow_comments</name><value><i4>1</i4></value></member><member><name>mt_keywords</name><value><string>tag1,tag2,한글태그</string></value></member></struct></value></param></params></methodResponse> 



한글 인코딩 문제가 해결 안되면 반환되는 데이터중 raw_data를 읽어서 처리를 할까 했는데 텍큐닷컴은 한글이 정상적으로 반환되는데 티스토리는 raw_data 값이 알수없는 문자로 나옵니다. 

티스토리엔 Content-Encoding: gzip 으로 되어 있어서 그런 건가요? 

같은 소스인데 이런 차이가 나는것은 서버에서 처리해주는게 다르기 때문인것 같은데 별도로 수정할 방법이 있는지 궁금 합니다. 


글이 길어서 잘 전달되었는지 모르겠네요 ^^; 

감사 합니다 ^____^



첫 댓글로 알려주신 우렁씨님의 도움으로 해결이 되었습니다.
감사 합니다 ^__^

1. 한글 인코딩 문제

xmlrpc.inc 에서 UTF-8로 변경을 해주면 되는군요.

$GLOBALS['xmlrpc_internalencoding']='UTF-8'; //'ISO-8859-1'; 


2. 카테고리 문제

카테고리는 배열로 보내 주어야 하고 category 가 아닌 categories 입니다 ㅡㅡ

'categories'    => new XMLRPCval(array(new XMLRPCval('test',"base64")), "array"),

5266-7 글 읽기
link : http://blog.gpson.kr/7 
permaLink : http://blog.gpson.kr/7 
postid : 5266-7 
categories : 테스트 
title : 카테고리 테스트 글 
description : 한글은 안되나?
태그도 먹히겠지? 
mt_keywords : tag1,tag2,한글태그 
publish : 0 
dateCreated : 2009-08-24T01:23:45+09:00 
신고

Posted by 상오기™

이 포스팅이 도움이 되었다면 구글에서 관련 정보를 찾아 보세요 ^^


댓글을 달아 주세요

  1. Favicon of http://nosmoke.cctoday.co.kr BlogIcon 우렁씨 2009.08.23 17:43 신고  댓글주소  수정/삭제  댓글쓰기

    저두 잘은 모르지만.. 혹시 도움이라도 되시라고..^^;;

    카테고리 부분은 배열로 전달되어야 저쪽(?)에서 받아들여지더군요(티스토리 경우)
    ->'categories' => new xmlrpcval(array(new xmlrpcval('카테고리1',"base64")), "array"),

    네이버는 아시듯이 방법없이 그냥 블로그 자체에서 설정된곳으로만 갑디다. ㅡㅡ;

    그리고 한글깨지는거... 혹시 xmlrpc 파일들 모두 UTF-8로 작업하신거죠?
    저두 글자 깨지는것때문에 고생한것이 기억이 나는데 xmlrpc.ini 에서
    $GLOBALS['xmlrpc_internalencoding']='ISO-8859-1'; 이부분 바꿔가면서 테스트하면서 해결하였습니다.
    블로그마다 약간 달라서 변수로 받아 들였습니다.

    도움이 되었으면 좋겠는데 혹여 아니더라도 화내지 마세요 ^^;;;

    • Favicon of http://sangogi.com BlogIcon 상오기™ 2009.08.23 18:02 신고  댓글주소  수정/삭제

      카테고리는 배열로 보내야 하는군요 ^^
      수정해서 해봤는데 잘 안되네요
      천천히 다시 해보겠습니다.

      작업은 모두 UTF-8로 하고 있습니다.

      xmlrpc.ini 에서 수정해보며 테스트를 해봐야겠네요

      어제 처음 본거라 해매고 있는데 많은 도움이 되었습니다.

      감사 합니다 ^____^

    • Favicon of http://sangogi.com BlogIcon 상오기™ 2009.08.23 18:12 신고  댓글주소  수정/삭제

      $GLOBALS['xmlrpc_internalencoding']='UTF-8'; //'ISO-8859-1';

      ini 파일에서 UTF-8로 변경하니 한글 출력이 되네요 ^^

      카테고리 문제는 categories 가 맞는거군요 ^^;;
      적어주신게 오타인가 싶어 그대로 뒀더니 안되더니 categories 로 바꾸니 되네요 ㅎㅎ

      감사 합니다 ^____^

    • Favicon of http://nosmoke.cctoday.co.kr BlogIcon 우렁씨 2009.08.23 19:11 신고  댓글주소  수정/삭제

      흠흠.. 오타라뇨..ㅡㅡ+

      말씀드릴땐 좀 조마조마 했는데 된다니 어깨가 으쓱하네요..ㅋㅋㅋ

    • Favicon of http://sangogi.com BlogIcon 상오기™ 2009.08.23 22:45 신고  댓글주소  수정/삭제

      한방에 해결해 주셔서 감사 합니다 ㅎㅎ
      사실 처음에 반환되는 값을 보고 categories 아냐? 하고 바꿔봤는데 안되더라구요
      배열로 넣어야 하다니...
      좋은 밤 되세요 ^___^

  2. Favicon of http://blog.daum.net/duckaby BlogIcon 호타루 2009.08.23 17:44 신고  댓글주소  수정/삭제  댓글쓰기

    저는 포스트 제목 보고 푸니 코드 문제라고 생각했는데 다른 문제 같네요. 혹시, UTF-8 읽어 들여야 하는데, Euc-kr을 읽어 들여던가 그런 문제인듯. 저 깨지는 글자가 웹브라우저 한글 인코딩 깨질 때 나오는 글자하고 유사한 것 같습니다.

    1번 항목에서 데이터를 읽어들일 때 사용한 것들이 ascii키 코드 등의 1바이트를 읽는 것들 아닌가요? 한글은 2바이트니... 그 쪽 문제이지 않을까요.

    제가 프로그래밍 하는 쪽이 아니라 추측 정도만 남겨봅니다. 좀 더 아시는 분이 덧글 달아주셔서 문제가 해결되었으면 좋겠습니다.

    • Favicon of http://sangogi.com BlogIcon 상오기™ 2009.08.23 18:04 신고  댓글주소  수정/삭제

      UTF-8에 맞추어 작업하고 있습니다.

      브라우저의 인코딩이 깨지는거랑은 좀 다른것 같기도하고...

      처음하는거라 많이 해매게되네요 ^^;

      댓글 감사 드립니다 ^____^

  3. Favicon of http://appfood.tistory.com/ BlogIcon 쟈마쿤 2015.05.15 13:03 신고  댓글주소  수정/삭제  댓글쓰기

    감사합니다.



티스토리 툴바