포럼
Snoopy를 통한 BlogApi 사용시 이미지 저장에 관한 의문점
2013.03.14 08:45
[강추]!! 긁어와서 [자동]으로 게시글로!! [메타 블로그] php 로 넣기!!! xe블로그api를 이용한.. [32]
이 게시물을 보고 영감을 받아서 XE에 관한 긁어오기 기법을 사용하고자 합니다. ^^
하지만 더 진보된 클래스인 스누피를 알게 되고 다시 여러 삽질을 한 결과 만족할 만한 결과를 얻었습니다.
문제는 BlogApi의 subject, content, name 값 외에 별도로 외부이미지 파일을 XE의 파일시스템으로 옮길 수 있는 방법을 못 찾았다는 것입니다.
원래 blogapi에서도 이미지를 첨부할 수 있다는데 정확한 방법은 찾지를 못하겠네요.
혹시 저와 같은 고민을 하신 분이 있는지 궁금합니다.
이번 작업이 끝나면 강좌로 관련내용을 공유하도록 하겠습니다.
지금 현재 하고자 하는 작업은 네이버 실시간 등록과 관련내용을 자동으로 파싱하여 이미지와 함께 XE로 등록하는 것입니다.
댓글 16
-
비밀얌
2013.03.14 11:31
-
하얀마법
2013.03.14 15:17
그건 제목부분의 파싱이 잘 안되었다거나, blogapi의 제목부분에 값이 전달이 안되었을 경우일 겁니다.
일단 한번 소스를 보여주시면 관련 코드를 봐드리겠습니다.
-
KTK
2013.03.14 16:20
이부분 정말 되면 좋겠습니다... 아무것도 모르겠어요..
일단 위 링크 팁에 해당한 파일만 올려서 해보았는데 저도.. 언타이틀이 뜨더라구요 ㅠㅠ
정말 죄송하지만 만약 팁게시판에 작성을 하신다면 정말 초보도 가져 갈수 있도록
쉽게 강좌를 해 주시면 감사하겠습니다 ㅠㅠ
이기능 정말 하고 싶어요 ㅠㅠ
-
비밀얌
2013.03.14 23:18
저는 원글에 있던 Desktop.zip을 다운받아 압축을 풀어 파일 3개를 blogapi라는 폴더를 만들어 넣었습니다. functions.php, index.php, 그리고 xmlrpc.inc 입니다. functions.php와 xmlrpc.inc는 손대지 않았고요 index.php에 $g_blog_url, $g_id, $g_password, $blogid만 값을 제 계정에 맞게 올바르게 넣어 수정하였습니다. testingapi라는 게시판을 만들었으며 블로그 API 애드온을 켜두었지만 index.php를 실행하면 testingapi 게시판에 제목은 "untitled"로 나오고 클릭하면 내용에는 아무것도 안나옵니다. ㅜㅜ 무엇이 잘못되었을까요? 팁란에 원글이 조금 복잡해서 나름 천천히 읽고 이렇게 했는데 안되네요. 혹시 문제점을 아시면 공유해주시면 정말 감사하겠습니다.
-
하얀마법
2013.03.15 00:40
자세히 보시면,
$buf->voidSetPattern('title','<b>','</b>');
에서 타이틀을 잘라내는 <b>, </b> 태그는 분별력이 없는 너무 흔한 태그입니다.
좀더 구체적인 태그로 앞뒤 분별을 해주셔야 title값이 정확하게 나올겁니다.
해당 타이틀이 들어있는 소스부분만 한번 올려봐주세요.
제가 보기엔 다른 문제는 없어보입니다.
-
비밀얌
2013.03.16 02:11
하얀마법님, 감사합니다. 말씀하신 부분을 확인하여 다시 시도해보도록 하겠습니다. 감사합니다.
-
푸시아
2013.03.14 17:06
외부 프로그램에서 xe에 들어있는 blogapi를 이용하여 xe board 에 입력하는걸 말씀하시는 건가요?
파일 첨부 기능까지 해서 예전에 개발해 놓은게 있습니다만...
-
하얀마법
2013.03.14 17:38
푸시아님 맞습니다. ^^
위의 팁에 있는 소스를 전제로 해서 blogapi에 이미지파일을 첨부하는 법을 지금 연구중에 있습니다.
고견을 부탁드립니다.
혹시 프로그램을 올려주시면 큰 가르침이 될 것 같습니다.
가능할까요?
-
푸시아
2013.03.14 23:18
프로그램이 다른 것과 많이 연동되어 버려서 소스를 그대로 올리기는 좀 그렇구요.
title 과 content 까지는 올리신다니까
FileHandler::getRemoteResource($uri, $body, 3, "POST", "application/octet-stream");
정도로 올리실 것 같은데요.
파일을 올리실 때는
FileHandler::getRemoteResource($uri, $attach, 3, "POST", "application/octet-stream");
FileHandler::getRemoteResource($uri, $body, 3, "POST", "application/octet-stream");이렇게 파일 부터 올리고 그다음 글을 올리셔야 합니다.
파일첨부는 이렇게 되겠죠..
$uri = "http://XEURL/게시판MID/api";
$attach = "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<methodCall>
<methodName><![CDATA[metaWeblog.newMediaObject]]></methodName>
<params>
<param><value><string><![CDATA[게시판MID]]></string></value></param>
<param><value><string><![CDATA[어드민아이디혹은이메일]]></string></value></param>
<param><value><string><![CDATA[비밀번호]]></string></value></param>
<param><value><struct>
<member><name><![CDATA[name]]></name><value><string><![CDATA[이미지파일절대경로]]></string></value></member>
<member><name><![CDATA[type]]></name><value><string><![CDATA[이미지속성]]></string></value></member>
<member><name><![CDATA[bits]]></name><value><base64><![CDATA[base64_encode된 파일읽은값]]></base64></value></member>
</struct></value></param>
</params>
</methodCall>"; -
하얀마법
2013.03.15 00:38
지금 있는 소스에서는 xml로 하는 방법이 아니라
metaWeblog_newPost( $blogid, $title, $content);
방식으로 포스팅하는데요.
이때, $img_url 값을 파싱하였다고 할때 이후에 어떻게 해야할지가 의문입니다.
추가,
지금 FileHandler::getRemoteResource() 구조, header 선언 에 대한 글을 읽어보니 좀 이해가 되네요.
굳이 metaWeblog_newPost( $blogid, $title, $content); 방식을 사용할 것이 아니라 푸시아님이 말씀하신 소스를 그대로 대입해도 될 것 같은 느낌이 듭니다.
한번 해딩해보고 다시 문의 드리겠습니다.
-
푸시아
2013.03.15 00:56
아... 원글에 있는 링크를 지금 보았습니다.
코드가 무척 길군요...;;
갈쿠리~
metaWeblog_newPost는 함수명이군요. 이제야 봤습니다.
metaWeblog_newPost 함수를 보시면 제가 적어 놓은 xml 방식과 같은겁니다.
//body 부분에 array 요소만 바꾸면 될 것 같아요.
metaWeblog.newPost 이것도 metaWeblog.newMediaObject 로 바꾸면 되지 않을까요?
-
하얀마법
2013.03.15 01:00
아.. 너무 감사합니다.
많은 도움이 되네요.
정말 감사드립니다. ^^
-
푸시아
2013.03.15 01:08
외부 파일에서 xe 클래스를 사용하기 위해서는 config를 먼저 불러와줘야 합니다. 아니면 xe와 연동이 안되요~
-
푸시아
2013.03.14 23:22
저도 xe 초반에는 이렇게 해서 게시판에 글을 올렸는데요. 사실 모듈을 만지는게 잘 안될때 이야기구요. 모듈이 잘 이해 되시면 모듈이나 외부프로그램에서 그냥 document 모듈을 제어해버리면 되기 때문에 큰 의미가 없을 수 있어요.
-
하얀마법
2013.03.15 00:36
네. 저도 언젠가는 모듈을 한번 뜯어봐야겠다는 생각을 가지고 있습니다.
푸시아님 사이트에서 참 좋은 툴도 많이 보았구요.
저도 이런저런 도전을 해 볼 용기가 생겼습니다.
감사합니다. ^^
-
하얀마법
2013.03.15 02:03
제가 metaWeblog_newPost 함수를 복사해서
metaWeblog_newMediaObject 함수를 별도로 만들고, 여기에 말씀하신 부분을 적용하고자 합니다.$img 이미지 경로는 파싱되어 Array되어있구요.
여기에 코드를 입력해//메타블로그 이미지 첨부된 외부글쓰기 소스
function metaWeblog_newMediaObject( $img)
{
global $g_id;
global $g_passwd;
global $g_blog_url;
global $g_img;
$client = new xmlrpc_client( "{$g_blog_url}");
$f = new xmlrpcmsg("metaWeblog.newMediaObject", // metaWeblog.newMediaObject 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, "string"),
'description' => new xmlrpcval($content, "string"),
), "struct"),
new xmlrpcval(true, "boolean") // publish
)
);
$f->request_charset_encoding = 'UTF-8';
$response = $client->send($f);
echo "아래 내용이 등록되었습니다.<br><br>".$blogid."<br>".$title."<br>".$content;
}
주세요제가 궁금한 것이
FileHandler::getRemoteResource($uri, $attach, 3, "POST", "application/octet-stream");
FileHandler::getRemoteResource($uri, $body, 3, "POST", "application/octet-stream");이건 언제 선언하고
metaWeblog_newMediaObject 함수는 어떻게 각 변수를 적용할 수 있는가 입니다.
제 생각으론
metaWeblog_newMediaObject($img);
이렇게 하면 되지 않을까 싶은데요. 제생각이 어떤가요?
저는 metaWeblog_newMediaObject로 이미지를 먼저 넣고, metaWeblog_newPost함수는 글을 넣는 방식으로 생각했습니다.
부럽습니다. 네이버 실시간 등록과 관련내용을 자동으로 파싱하여 이미지와 함께 XE로 등록되면 정말 멋있어요!
실례지만 ... 저는 그 글을 읽고 해봤는데 어떤 분이 댓글에 남긴 것과 같이 제목은 Untitled로 나오고 내용은 아무것도 안나오는데 혹시 이건 왜 그런지 아시나요?