ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C# 네이버 블로그 MetaWeblog API로 글 작성하기 (with XML-RPC)
    닷넷/C# 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

    이 곳을 참고한다.

    반응형

    댓글

Designed by Tistory.