MetaWeblog API (xmlrpc) - 안드로이드 네이버/티스토리 블로그 연동

2016. 2. 1. 16:55Programing/Android / Java

Android Application에서 또는 기타 Application에서 블로그에 글쓰기, 수정, 삭제, 댓글 등의 작업을 하기 위해서는 MetaWebBlog를 이용하여야 합니다.

티스토리, 네이버 등에서 사용 할 수 있는 BlogAPI의 표준 명칭은 RFC:  MetaWeblog API (MWA) 이며,

MetaWeblog API 는 외부프로그램을 이용하여 블로그에 게시물을 올리거나 편집을 할 수 있게 하는 프로그래밍 인터페이스로 클라이언트 프로그램과 웹 로그(티스토리 같은 블로그) 서버간 통신방식은 XML-RPC 프로토콜을 사용합니다.

MetaWeBlog xmlrpc기반으로 되어있어 웹 인터페이스가 없어도 구현이 가능하다고 합니다. 

우리나라 거의 모든 블로그들이 MetaWeBlog형식을 취하고있어 일단 블로그들 중에 국내에서 가장 많이 쓰이는 네이버, 티스토리가 가능하다는 사실을 확인!!!

특히 티스토리, 네이버 등에서 구현해서 해보니 잘 되는 것을 확인 확인하였으며, XMLRPC 는 아래 첨부 파일을 사용하면 됩니다.


org.zip



시작전에 해야될 작업

try {
xmlrpcConfig.setServerURL(new URL(지원되는 API주소 적용));
//예 네이버 같은 경우 https://api.blog.naver.com/xmlrpc 로 저장 된다.
client.setConfig(xmlrpcConfig);
} catch (Exception ex) {
ex.printStackTrace();
System.out.println("ERROR: " + ex.getMessage());
}

최신 글 가져 오는 방법
Object[] cats = new Object[] {};
try {
cats = (Object[]) this.client.execute("metaWeblog.getRecentPosts", 
new Object[] {this.blogid, this.username, this.password, 3});
//blogid : ID, username : 대부분 ID와 동일, password : API키값, 가져올 게시글 수(int형, 나머진 String형)
} catch (Exception e) {
e.printStackTrace();
System.out.println("ERROR: " + e.getMessage());
}

※ 리턴값은 api 상 struct 형태로 리턴되지만, Hashtable형태로 되어있다. 분해 방법은 여럿이지만 난 HashMap형태로 바꿔서 사용하였다.
예문
for (int i = 0; i < cats.length; i++) {
HashMap category = (HashMap) cats[i];
System.out.println((String)category.get("title")); //타이틀 부분 가져오기
}

카테고리 가져 오는 방법
public Object[] GetCategories() {
Object[] cats = new Object[] {};
try {
cats = (Object[]) this.client.execute("metaWeblog.getCategories",
new Object[] { this.blogid, this.username, this.password }); 
} catch (Exception e) {
e.printStackTrace();
System.out.println("ERROR: " + e.getMessage());
}
}

리턴되는 값은 최근글 가져오기와 동일

글작성 방법
public void PostIt(String title, String description, String category) {
Hashtable post = new Hashtable();
if (title != null)
post.put("title", title); //제목 String형
post.put("dateCreated", new Date()); //날짜
post.put("description", description); //내용 String형
post.put("tags", "test"); //태그 넣기
post.put("categories", "test"); //원하는 카테고리로 넣기

//각 블로그API에서 지원 형태는 조금 다를 수 있다. 그건 원하는 블로그 API사이트를 참고하자, 이 형태는 네이버 블로그 형태이다.

Hashtable categories = new Hashtable();

String blogpostid = ""; //작성된 포스트 아이디 로 리턴 받음
Boolean result = Boolean.TRUE; //공개 비공개 여부 단 공개된 카테고리안에서만 해당됨

try {
blogpostid = (String) this.client.execute("metaWeblog.newPost",
new Object[] { this.blogid, this.username, this.password,
post, result });
} catch (Exception ex) {
ex.printStackTrace();
System.out.println("ERROR: " + ex.getMessage());
}
}


  • metaWeblog.editPost (postid, username, password, struct, publish) returns true
  • metaWeblog.getPost (postid, username, password) returns struct
  • metaWeblog.newMediaObject (blogid, username, password, struct) returns struct

  • 위 3가지 방법은 패스 하도록 한다.

    참고사이트 : 
    http://www.ibm.com/developerworks/kr/library/x-voicexml3/
    http://egloos.zum.com/Charko/v/161806
    http://docworlds.tistory.com/entry/Android%EC%97%90%EC%84%9C-%EB%B8%94%EB%A1%9C%EA%B7%B8-Application-%EC%A0%9C%EC%9E%91-0