닷넷/C#

C# 네이버 블로그 MetaWeblog API로 글 작성하기 (with XML-RPC)

FreeBear 2020. 3. 22. 17:21
반응형

네아로가 갑자기 되지 않아서 프로그램으로

네이버 블로그에 포스팅을 할 수 없게 되었다.

당황하지 않고 다른 방법을 찾아보았다.

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

이 곳을 참고한다.

반응형