C# 네이버 블로그 MetaWeblog API로 글 작성하기 (with XML-RPC)
네아로가 갑자기 되지 않아서 프로그램으로
네이버 블로그에 포스팅을 할 수 없게 되었다.
당황하지 않고 다른 방법을 찾아보았다.
XML-RPC라는 방법을 통해 포스팅하는 방법이 있었고,
그것을 쉽게 사용할 수 있게 해주는 API는
MetaWeblog API라는 이름을 가진 것을 알 수 있었다.
사용방법은 다음과 같다.
1. 블로그 API 사용 신청 및 암호발급받기
1) 내 네이버 블로그에서 관리를 클릭한다.
2) 전체보기에서 글쓰기 API 설정을 클릭한다.
3) API사용을 신청하고(금방 된다) API연결정보에서 API연결 암호를 메모해 둔다.
2. 프로젝트에서 사전작업
1) 비주얼스튜디오 프로젝트에서 XML-RPC를 설치해야 한다.
[도구] - [NuGet 패키지 관리자] - [솔루션용 NuGet 패키지 관리]를 클릭한다.
2) 찾아보기에서 xmlrpcnet을 검색하고, 설치한다.
3) 프로젝트에서 [추가]-[클래스] MetaWeblogApi.cs 이름으로 아래 소스를 복붙해서 파일을 만든다.
using System;
using System.IO;
using System.Net;
using Microsoft.Win32;
using CookComputing.XmlRpc;
namespace YourNameSpace
{
// MetaWeblog API와 관련된 자세한 스펙이나 사용방법은 아래 URL을 참고하세요
// http://www.xmlrpc.com/metaWeblogApi
// http://msdn.microsoft.com/ko-kr/library/bb259702.aspx
// http://msdn.microsoft.com/ko-kr/library/aa905670.aspx
// http://www.xml-rpc.net/
// 포스트 등록을 위한 Post Struecture (필요한것만 명시)
// 이외에 PostID나 Categories등을 사용할 수 있음
public struct Post
{
public DateTime dateCreated;
public string description;
public string title;
}
// 첨부파일의 경로를 표현 하기위한 Sturcture
public struct MediaObjectUrl
{
public string url;
}
// 첨부파일을 업로드하기 위한 Structure
public struct MediaObject
{
public string name;
public string type;
public byte[] bits;
}
// XMLRPC를 사용할 Blog API URL
[XmlRpcUrl("https://api.blog.naver.com/xmlrpc")]
public class MetaWeblogApi : XmlRpcClientProtocol
{
// XMLRPC를 이용하여 포스팅
[XmlRpcMethod("metaWeblog.newPost")]
public string newPost(string BlogID, string ID, string Password, Post Content, bool Publish)
{
return (string)this.Invoke("newPost", new object[] { BlogID, ID, Password, Content, Publish });
}
// XMLRPC를 이용해 첨부파일 업로드
[XmlRpcMethod("metaWeblog.newMediaObject")]
public MediaObjectUrl newMediaObject(string BlogID, string ID, string Password, MediaObject MediaObject)
{
return (MediaObjectUrl)this.Invoke("newMediaObject", new object[] { BlogID, ID, Password, MediaObject });
}
// 첨부파일을 올리기 위한 MediaObject객체 생성
public MediaObject CreateMediaObject(string FilePath)
{
if (File.Exists(FilePath) == false) throw new Exception("파일이 없어요");
MediaObject MediaObject = new MediaObject();
MediaObject.name = Path.GetFileName(FilePath);
MediaObject.bits = File.ReadAllBytes(FilePath);
string Extention = Path.GetExtension(FilePath);
MediaObject.type = "application/" + Extention; // 기본값
// 레지스트리에 등록된 확장자를 검색하여 Content Type을 추출
RegistryKey Key = Registry.ClassesRoot.OpenSubKey(Extention);
if (Key != null)
{
string Result = (string)Key.GetValue("Content Type");
if (Result != null) MediaObject.type = Result;
}
return MediaObject;
}
}
}
3. 네이버 블로그에 글 작성하기
다음과 같이 소스를 작성하여 네이버 블로그에 글을 올린다.
위에 메모해 둔 API연결 암호는 이때 사용한다.
private void BlogPosting()
{
string ID = "네이버 ID";
string Password = "블로그 API연결 암호";
MetaWeblogApi MetaWeblogApi = new MetaWeblogApi();
MetaWeblogApi.Credentials = new NetworkCredential(ID, Password);
MediaObjectUrl mourlImage1 = MetaWeblogApi.newMediaObject(
ID,
ID,
Password,
MetaWeblogApi.CreateMediaObject("이미지경로"));
string sTitle = "포스트 제목 테스트";
string sContents = "포스트 내용<br><img src='" + mourlImage1.url + "' />";
Post Post = new Post();
Post.title = sTitle; // 포스트 제목
Post.description = sContents; // 포스트 내용
Post.dateCreated = DateTime.Now; // 포스트 날짜
MetaWeblogApi.newPost(ID, ID, Password, Post, true);
}
참고 사이트: https://koronaii.tistory.com/144
그 외 포스트 작성, 수정, 삭제에 관한 자세한 내용과 티스토리 또한 이를 이용하여 글을 작성하는 방법에 대한 것은
MetaWeplog(1): https://nowonbun.tistory.com/255?category=507116
MetaWeplog(2): https://nowonbun.tistory.com/256?category=507116
이 곳을 참고한다.