'xmlrpc'에 해당되는 글 2건

  1. 2009/08/01 Blog Posting Using MetaWeblogApi #2/2 (3)
  2. 2009/07/31 Blog Posting Using MetaWeblogApi #1/2 (4)
C#2009/08/01 20:39

안녕하세요. 김대욱입니다. 이번시간에는 전시간에 이어 MetaWeblogAPI를 사용해서 간단하게 블로그에 포스팅하는 방법에 대해 알아보도록 하겠습니다. 그리고 이전시간에 구현해놓은 내용을 바탕으로 아래그림과 같이 탐색기에서 마우스 오른쪽 버튼을 눌렀을경우 나타나는 컨텍스트 메뉴에 "블로그에 올리기"라는 메뉴를 추가하는 방법을 소개합니다.


Shell Context Menu(탐색기에서 오른쪽 버튼을 눌렀을때 나타나는 컨텍스트 메뉴)라고 불리는 녀석에 자신이 원하는 새로운 메뉴를 추가하고자 하는 COM을 이용을 하거나, 간단히 레지스트리만 변경하여 간단하게 구현 할 수 있습니다. 이번시간에 소개할 내용은 간단한 레지스트리 조작만으로 메뉴를 추가하는 방법에 대해 소개합니다.

ShellContextMenu는 레지스트리의 아래와 같은형식으로 레지스트리를 수정함으로서 추가가 가능합니다.

HKEY_CLASSES_ROOT\[확장자명/혹은 형식]\Shell\[대표이름]\Command

예를들어 모든 확장자에 메뉴를 추가하고자 한다면 아래와 같은 과정을 수행하시면됩니다.

1. HKEY_CLASSES_ROOT\*\Shell 키를 찾아값니다. (만약 Shell Key가 없다면 생성하시면 됩니다.)
2. Shell 키에 추가하고자 하는 메뉴이름을 Key로 등록합니다. (꼭 메뉴이름과 동일할 필요는 없습니다.)
3. 등록한 메뉴이름 키의 Default Value를 메뉴에 표시될 이름으로 설정합니다.
4. 그리고 메뉴이름 키에 Command라는 키를 추가합니다.
5. Command 키에 Default Value를 메뉴를 선택했을 경우 실행할 어플리케이션의 경로를 입력합니다.

저같은 경우 모든 파일에서 오른쪽 버튼을 눌렀을때 네이버 블로그에 사진 올리기라는 메뉴가 나타나도록 하기 위하여 아래와 같이 레지스트리를 수정했습니다.

====================================================================
[HKEY_CLASSES_ROOT\*\shell\UploadBlog]
@="네이버 블로그에 사진올리기"

[HKEY_CLASSES_ROOT\*\shell\UploadBlog\command]
@="C:\\SimpleBlogPosting.exe %1"
====================================================================

SimpleBlogPosting.exe 뒤에 붙어있는 %1은 파라미터를 지정하는 값으로 %1을 붙이면 선택한 파일의 이름이 입력되게 됩니다. 위와 같은 내용을 C#으로 작성하게 되면 아래와 같이 구현하실 수 있습니다. (Registry관련 Class는 Microsoft.Win32에 정의되어 있습니다.)


이번 예제의 경우 아래와 같이 폼의 생성자에서 레지스트리에 작성하는 코드를 추가해서 최초 1회 프로그램이 실행되면 자동으로 Shell ContextMenu에 메뉴가 추가되도록 구현했습니다.



위와 같은 방법을 사용해서 아래 그림과 같은 내용의 프로그램을 구현해 보았습니다.


파일에서 마우스 오른족 버튼을 누르고 네이버 블로그에 사진 올리기를 클릭하게되면 자동으로 블로그에 사진을 올려주는 어플리케이션이 되겠습니다. 이전시간에 말씀드렸다싶이 저희 어머니를 위해 제작된 프로그램이라 아주 단순하면서 기본적인 기능만 수행 가능한 형태로 구현됬습니다만, 응용해서 더 다양한 결과를 만들어 내실 수 있을것이라고 생각됩니다.

이상으로 MetaWeblogAPI + ShellCotextMenu를 이용한 블로그 포스팅내용을 마치도록 하겠습니다.
아래는 이번시간에 사용된 전체소스코드입니다.







저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 곡스
C#2009/07/31 02:50
안녕하세요. 김대욱입니다. 이번시간에는 MetaWeblogAPI를 사용해서 MetaWeblogAPI를 사용하는 블로그에 원격으로 포스팅하는 방법에대해 소개해 드리려고합니다. 티스토리나 네이버 다음등의 경우 MetaWeblogAPI를 지원하고 있기때문에 이번시간에 소개해 드릴 내용을 활용하시면 간단하게 원격 포스팅 프로그램을 구현하실수 있습니다.

사실 이번 포스팅을 하게된 계기는 저희 어머니께서 예전부터 디카로 찍은 사진을 블로그에 올리고 싶은데 너무 어렵고 힘들다고 해서 어떻게 하면 간단하게 사진을 올릴 수 있도록 할까.. 고민하다가 간단한 프로그램을 제작해서 선물(?)로 드리고자 구현하면서 내용을 그냥 버리기엔아까워서 포스팅하게 되었습니다 !! ㅎㅎ 아직 완전히 구현된게 아니기 때문에 이번 시간에는 스크린샷은 없지만 완성이 되는대로 스샷과 함께 2번째 포스팅을 하도록 하겠습니다 ㅎ

MetaWeblogAPI는 간단하게 말하면 외부 프로그램을 사용해 블로그에 글을 쓰거나, 수정, 삭제 등을 가능케하는 API라고 할 수 있으며 위키페디아 사전에는 아래와 같이 설명되어 있습니다.

The MetaWeblog API is an application programming interface created by software developer Dave Winer that enables weblog entries to be written, edited, and deleted using web services.

짧은 영어 실력으로 해석을 해보면 위에서 말씀드린내용이 어느정도 맞는것 같습니다 ㅎㅎ MetaWeblogAPI와 관련된 자세한 내용은 http://www.xmlrpc.com/metaWeblogApi에서 확인하실 수 있습니다.

그럼 본격적으로 어떻게 하면 C#을 이용해서 MetaWeblogAPI를 사용할 수 있는가에 대해서 살펴보도록 하겠습니다.
MetaWeblogAPI 는 Application과 Server 간의 통신을 위해 XML-RPC 프로토콜을 사용합니다. XML-PRC 프로토콜을 사용하기 위해서 http://www.xml-rpc.net/에서 제공하는 .Net Framework용 라이브러리를 사용했으며, MSDN에도 이를 사용하는 방법에대해 명시되어 있습니다.(http://msdn.microsoft.com/ko-kr/library/bb259697.aspx)
(MSDN에 기본적인 사용방법은 잘 설명이 되어 있기 때문에 저는 이를 사용한 예제 코드 위주로 설명하겠습니다.)

제가 MetaWeblogAPI를 이용해서 구현하고자하는 목표는 단순하게 "블로그에 사진을 올리자!" 이기때문에 새로운 글을작성하는 newpost메서드와 파일을 블로그 서버에 업로드 하는 newMediaObject 메서드를 아래와 같이 구현했습니다. 이외에 서버로 포스팅내용과 첨부파일을 전송하기 위하여 MetaWeblogAPI에 맞춰 Post Class와 MediaObject Class를 구현했습니다.  아래는 제가 사용한 클래스의 전체 소스코드입니다.


XmlRpcClientProtocol를 상속받아 구현한 MetaWeblogAPI클래스에 XmlRpcUrl Attribute를 사용해 BlogAPI의 주소를 입력합니다. 그리고 그리고 MetaWeblog API 에 따라 newpost, newMediaObject메서드를 구현했습니다. XmlRpcClientProtocol의 Invoke메서드를 호출하게 되면 입력한 내용에 따라 기능을 수행하는데, 이때 XmlRpcClientProtocol에서 메서드 명과 파라미터 구조등을 기반으로 통신하게될 XML Data를 구성하기 때문에 대소문자등에 주의 하시기 바랍니다.

그리고 아래 CreateMediaObject는 파일을 업로드 하기 위한 MediaObject객체를 생성하기 위한 메서드입니다. 해당 파일의 내용을 읽고 Content Type을 지정해주는 역할을 합니다. Content Type을 지정하기 위해서 레지스트리에 등록된 Content Type을 검색하도록 구현했으며 없을경우 Appliation/[확장자] 형태로 입력되도록 했습니다.

실제로 사용할 때에는 아래와 같이 사용하시면 되겠습니다.


newPost를 호출할때나, newMediaObject를 호출할때 ID를 두번 입력하는것을 확인 할 수 있는데, 이는 Naver의경우 BlogID가 UserID와 동일하기 때문입니다. (티스토리등에서는 제공하는 Blog ID를 입력하시면되겠습니다.)
이제 PostTest 메서드를 호출하게 되면 아래와 같이 글과 함께 첨부한그림이 정상적으로 출력되는것을 확인하실 수 있습니다.


이것으로 이번 포스팅은 마치며 다음포스팅에서는 실제 UI와 함께 동작하는 과정을 보면서 설명드리도록하겠습니다.(작성하고 보니까 글이 굉장히 많아서인지 상당히 지루해보이네요..)

아래는 이번시간에 사용된 전체 소스코드 입니다. 테스트시 아이디 비밀번호 입력 부분을 본인의 아이디와 비밀번호를 입력하시기 바랍니다.  저희 어머니께서 사용하시는 블로그가 네이버블로그라서 내용이 기준으로 작성되어 있습니다. 테스트를 하시기 위해서는 네이버에서 블로그를 이용해 테스트 하시거나 MetaWeblogAPI의 XmlRpcUrl을 테스트하고자하는 블로그 API주소로 변경하시기바랍니다.

네이버 블로그에서 MetaWeblogAPI를 사용하는 방법은 아래 URL을 참고하시기 바랍니다.
http://section.blog.naver.com/sub/NoticeTip.nhn?board=/read/1000003488/10000000000003416054





저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 곡스