Search results for '프로그래밍/.NET (C#)'

BlogAPI의 이해와 활용

2009.07.03 06:11

6월 23일.

삼성 소프트웨어 멤버십에 들어오고나서 나의 첫 기술세미나를 가졌다. 세미나 주제는 신입 단기과제때 잠시 다뤄보았던 BlogAPI. 이를 이용하여 MS Windows Live Writer같은 원격 블로깅 프로그램을 만들어보자!
 

BlogAPI에 대해 알아보기 전에 XML-RPC에 대해서 알아볼 필요가 있다. XML-RPC란, RPC(Remote Procedure Call) 프로토콜의 일종으로서, 인코딩 형식에서는 XML을 채택하고, 전송 방식에서는 HTTP 프로토콜을 사용하고 있다. XML-RPC는 매우 단순한 규약으로서, 작은 데이터 형식이나 명령을 정의하는 정도로만 사용하고 있으며, 사양서도 A4 2매 정도로 꽤나 단순한 편이다. 이는 대다수의 RPC 프로토콜 시스템이 수많은 규격을 규정하고, 실제 사용할 때에도 엄청난 양의 코딩을 요구하는 것과 비교하면 눈에 띄는 특징이라고 할 수 있다. 간단히 말해 서로 다른 운영체제, 프로그래밍 언어 간에도 웹을 통해 데이터를 주고 받을 수 있도록 해주는 표준 프로토콜을 의미한다.

 

< XML-RPC 아키텍쳐 >


XML-RPC 중 특히 블로깅과 관련된 기능을 지원하는 것을
BlogAPI 라고 하며, 블로그에 직접 접속하지 않고도 원격으로 포스팅이 가능하고, 포스팅 한 글의 편집, 삭제 등등 블로깅 전반에 걸친 여러 함수들을 제공한다.


BlogAPI
에는 MetaWeblog API, Blogger API, MovableType API 등등 여러 종류의 BlogAPI가 있다. 티스토리 블로그는 위의 세 BlogAPI를 모두 지원하며 각 블로그 서비스마다 지원하는 BlogAPI가 조금씩 틀리다. 여기서는 가장 널리 지원되고 있는 MetaWeblog API를 이용하여, C# 언어로 티스토리 블로그에 원격 블로깅을 할 수 있는 간단한 예제를 구현해본다.


http://www.xml-rpc.net/
에 접속하면 첫페이지 상단에서 XML-RPC.NET Ver.2.4.0 을 다운받을 수 있다. 압축을 풀면 여러 폴더와 파일들이 나오는데, 다 필요없고 bin1_0 폴더 안의 CookComputing.XmlRpc.dll 파일만이 필요하다.




위 그림처럼 using CookComputing.XmlRpc 을 위해서CookComputing.XmlRpc.dll 파일을 프로젝트에 참조시킨다. 이 dll 파일안에 MetaWeblog API들이 포함되어있다. 우리는 그냥 가져다 쓰기만 하면 된다. 
 
 
위에 첨부된 MetaWeblog.cs 파일을 다운받아 프로젝트에 추가하도록 하자. MetaWeblog API를 C#에서 바로 쓸 수 있게 만들어진 클래스다. 와... 이 정도면 그냥 거져 먹는거다. 간단하게 MetaWeblog.cs 의 내용에 대하여 살펴보자. 블로그와 관련된 구조체들이 선언되어 있고, 본격적으로 XmlRpc에 구현된 함수들을 C#에서 맛있게 먹도록 해줄 클래스가 있다. 
구조체 선언부와 클래스 선언부 사이에 보면 [XmlRpcUrl("http://parksk.tistory.com/api")] 라는 부분이 있다. 티스토리 블로그의 경우에는 자신의 블로그 주소 뒤에 "/api"를 붙이면 되고, 이글루스 블로그 같은 경우에는[XmlRpcUrl(http://rpc.egloos.com/rpc1)] 로 수정하면 된다. 자신이 이용하는 블로그 서비스의 BlogAPI 설정을 참고하도록 한다. 이제 클래스 내의 여러 함수 중, 새 글을 포스팅하는 함수인 newPost함수에 대해 자세히 알아보자. 

[XmlRpcMethod("metaWeblog.newPost")] 
public string newPost( 
string blogid, 
string username, 
string password, 
Post content, 
bool publish) 
    return (string)this.Invoke("newPost", new object[] { blogid, username, password, content, publish }); 
}



newPost 함수는 blogid, username, password, content, publish 를 매개변수로 가지며, 각 매개변수를 이용하여 자신의 블로그에 원격 포스팅을 한다. 각 매개변수에 대해서 알아보자.


blogid
각 블로그 서비스마다 틀린데, 티스토리같은 경우 관리자 환경설정에서 BlogAPI메뉴를 보면 84258 등의 숫자로 되어있는 자신의 blogid를 알 수 있다.

username  블로그 아이디
password  블로그 비밀번호. 티스토리는 그냥 실제 자신의 비밀번호를 입력하면 된다.  이글루스는 비밀번호를 직접 입력하지 않고 따로 API Key를 제공받아 password로 사용한다. 아마도 실제 비밀번호가 노출되는 것을 막기 위한 듯

contents 포스팅 될 글의 제목과 내용. 실제 포스팅되는 중심부분
publish 포스팅의 공개 유무


자 이제 C#으로 원격 블로깅 프로그램을 구현할 준비가 다 되었다. 
이제 아주 간단하게 만들어 본... 포스팅 정도는 할 수 있는 코드를 살펴보자.

 

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using CookComputing.XmlRpc; 
using System.Net;

 

namespace blogapi 
    public partial class Main : Form 
    { 
        MetaWeblog mw = new MetaWeblog();


        string username; 
        string password; 
        string blogid;

 

        string postid;

 

        public Main() 
        { 
            InitializeComponent(); 
            mw.Credentials = new NetworkCredential(username, password); 
        }

 

        private void btn_posting_Click(object sender, EventArgs e) 
        { 
            username = tb_blogid.Text; 
            password = tb_blogpw.Text; 
            blogid = tb_blogapiid.Text;

 

            try 
            { 
                Post post = new Post(); 
                post.categories = new string[] { "Test Posts" }; 
                post.title = tb_title.Text; 
                post.description = tb_contents.Text; 
                post.dateCreated = DateTime.Now;

                postid = mw.newPost(blogid, username, password, post, true); 
            } 
            catch (XmlRpcFaultException xrfe) 
            { 
                MessageBox.Show("ERROR : " + xrfe.ToString()); 
                return; 
            } 
            MessageBox.Show("Posting is Completed"); 
        }

      

        private void btn_file_Click(object sender, EventArgs e) 
        { 
            username = tb_blogid.Text; 
            password = tb_blogpw.Text; 
            blogid = tb_blogapiid.Text;

            MediaObjectUrl url =

            mw.newMediaObject(blogid, username, password, mw.GetMediaObject("c:\\me.jpg"));

           

            Post post = new Post(); 
            post.categories = new string[] { "Test" }; 
            post.title = "TEST"; 
            post.description = "<img src=" + url.url.ToString() + ">"; 
            post.dateCreated = DateTime.Now;

           

            string id = mw.newPost(blogid, username, password, post, false); 
            MessageBox.Show("File Upload & Posting Completed"); 
        }

 

        private void btn_del_Click(object sender, EventArgs e) 
        { 
            username = tb_blogid.Text; 
            password = tb_blogpw.Text; 
            blogid = tb_blogapiid.Text;

            try 
            { 
                Post post = new Post(); 
                post.categories = new string[] { "Test Posts" }; 
                post.title = tb_title.Text; 
                post.description = tb_contents.Text; 
                post.dateCreated = DateTime.Now;

                mw.deletePost(String.Empty, postid, username, password, true); 
            } 
            catch (XmlRpcFaultException xrfe) 
            { 
                MessageBox.Show("ERROR : " + xrfe.ToString()); 
                return; 
            } 
            MessageBox.Show("Deleting is Completed"); 
        } 
    } 
}

 

Windows Form 응용 프로그램 프로젝트 중 코드부분만 붙였다.

위 코드중 newMediaObject함수에 의해 리턴되는 url은 포스팅할 때 자신이 올린 파일의 주소이다. 이 주소를 이용해서 이미지 태그를 사용하여 이미지를 올린다던가 파일을 다운받을 수 있게 만드는 것이 가능하다. 여기까지 BlogAPI와 간단한 활용에 대해 알아보았다. C#을 조금이라도 아는 초보개발자라면 누구나 이해할 수 있을 정도로 쉽다. BlogAPI 별거 없다.

<참고자료>
http://msdn.microsoft.com/ko-kr/library/aa905670.aspx

신고

박상근 프로그래밍/.NET (C#) BlogAPI, Blogger, IT, MetaWeblog, xml-rpc, 블로그API, 원격블로깅

  1. blogApi에 대해서 확실히 알게 됬습니다 껌이네요 ㅋㅋㅋㅋ

  2. 좋은 정보 감사합니다.
    혹시 해당 부분을 asp 로 개발도 가능한가요?
    네이버,다음,티스토리 등의 각 블로그API 를 연동해보려고 하는데, 관련자료 찾기가 쉽지 않네요~~~

  3. ASP.NET이라면 모를까 ASP는 잘 모르겠습니다;;

  4. Blog Icon

    비밀댓글입니다

  5. 제가 ASP.NET을 접해본적은 없구요;;
    C# .NET 기반으로 구현이 되었으니 같은 .NET 기반인 ASP.NET으로도 제 포스팅과 같은 방법으로 되지 않을까 하는 추측이었습니다.

    제가 간단히 구현했던 것은 포스팅의 예제 소스와 같은 수준의 것이라 제 포스팅만 봐도 C# 으로는 바로 구현이 가능할 듯 싶네요

  6. Blog Icon

    비밀댓글입니다

  7. Blog Icon
    네오판타지

    덕분에 티스토리를 해결할수 있었습니다. 이렇게 쉽게 풀어서 상세히 공개해주셔서 큰 도움이 되었습니다. 감사합니다. ^^

MS Windows Live Writer 를 이용한 원격 포스팅

2009.06.18 00:47


삼성 소프트웨어 멤버십 신입 단기과제 때의 일이다.

스마트폰으로 찍은 사진을 블로그로 원격 포스팅하는 부분을 내가 담당하게 되어 BlogAPI에 대해서 알아볼 일이 있었다. 팀원중 자기 블로그를 관리해본 경험이 있는 사람도 딱히 나밖에 없었고,  우리가 개발하는 모바일 어플리케이션 상에서 원격 블로깅이 가능하다는 사실이 흥미롭게 다가왔다.

 

그 때야, 내가 가진 스마트폰에서 원격 블로깅을 해야했기에 BlogAPI를 이용하여 직접 코딩했었지만, 사실 이미 완벽에 가깝게 만들어져서 공개되어있는 원격 블로깅 프로그램들이 많이 있다.

 

'뭐하러 귀찮게 그런 프로그램들을 쓸까, 그냥 블로그에 접속해서 직접 쓰면되지' 라고 생각했었는데 엊그제 간만에 포스팅 한건 하려는데 Tistory 서버 점검이었다. 따로 워드 프로그램으로 작성해놓을까 했는데, 나중에 서버 점검 끝나면 또 옮겨서 이것저것 수정도 해야할 것 같고 해서 그만뒀었다. 그 때 내가 원격 블로깅 프로그램을 설치했었더라면 서버 점검중일때 포스팅할 글을 미리 작성해놓고, 서버 점검 후에 바로 포스팅을 했으면 편했을텐데...

 

그래서 방금 막 MS Windows Live Writer 라는 원격 블로깅 프로그램을 설치해서 첫 원격 블로깅을 하는 중이다. 

티스토리에서 직접 쓸때보다 표나 미디어 파일들 삽입하기가 훨씬 간단하고 편리하다. 태그 지정도 바로 가능하고 트랙백까지 바로 보낼 수가 있다. 따로 파일로 저장하는건 아니고 로컬이나 웹 로그에 임시저장이 된다. 그냥 일반 문서 프로그램처럼 글을 쓰다가 방금 웹 레이아웃으로 설정을 맞추니까, 지금 포스팅하는 문서 화면이 내 블로그에서 미리보기 하였을 때 보여지는 화면으로 셋팅이 되서, 내가 포스팅을 하면 어떻게 글이 보이겠구나 라는걸 바로 알 수가 있다. 귀찮게 미리보기를 해보지 않더라도. 오호... 이거 꽤나 매력있는 듯

http://download.live.com/writer
위 링크를 클릭해가면 각 언어별 MS Live Writer를 다운받을 수 있다. 

삽입 메뉴를 보니 표, 사진, 동영상, 지도.... 뭐?! 지도?!!!

지도 삽입을 클릭하니 구글어스 같은 Vitual Earth 라는걸로 내 지역을 찾아서 삽입이 가능하다.

삽입을 하니 바로 아래 처럼 지도보기 라는게 생겼다. 한번 클릭해보자. 어떻게 나오는지...

 

 

음, 그런데 글꼴 색상을 바꾸려다보니, 도구 모음에 글꼴 크기, 색상, 폰트 등은 없다. 폰트 관련하여선 진하게, 기울기, 밑줄 등만 있고, 글꼴 색상을 예로들면, 이를 바꾸기 위해서는 직접 메뉴의 서식을 클릭하여 글꼴 색을 클릭하여 글꼴 색 선택 창을 띄워서 색상을 골라야만 글꼴 색 변경이 가능하다. 게다가 글자를 복사/붙여넣기 하니 그 글에 적용되었던 글꼴 색은 없어지고 본래의 글꼴 색으로 돌아오고만다.

 

이제 글을 슬슬 마무리 짓고 게시하려하니까 또 단점이 보인다.

티스토리에서 게시하기 직전에 저작권 관련이라던가 발행하기 등등의 옵션들은 여기선 건드릴 수가 없다.

뭐 MS Windows Live Writer가 Tistory에 특화된 건 아니니깐 어쩔 수 없이 원격 포스팅 이후에 내 블로그에 접속해서 관리자모드로 로그인 후 설정해야한다는 귀차니즘이 필요하다. 이런 설정 없이 그냥 게시하였을때 이런 사항들이 기본으로 어떻게 셋팅되어있을까.

 

지금까지 간단하게 MS Windows Live Writer에 대한 나의 리뷰를 적어보았다.

이 외에도 MS Word 2007로도 원격 포스팅이 가능하고, Zoundry 라던가... MAC OS용의 ECTO,

그리고 ScribeFire Blog Editor라는 FireFox Plugin 등 BlogAPI를 이용한 수많은 프로그램들이 있다.

나는 아무 이유없이 그냥 MS Windows Live Writer 를 이용했지만, 여러분들은 각자 입맛에 맞는 프로그램을 찾길 바란다.

 

 

 

MS Windows Live Writer 를 이용할 분들을 위한 다운로드/설치 안내

이 글을 보시는 블로거들이라면 당연히 자신의 블로그(웹 로그)가 있을 것이다.

웹 로그 있음을 선택하고 다음!

혹시나 블로그가 없어서 MS의 라이브 스페이스라는 블로그를 만들겠다면 내 스페이스 만들기를 선택하고 다음!

 

자신이 사용하는 블로그에 맞춰서 선택. Tistory, Egloos, Naver 블로그들은 당연히 기타 웹 로그 서비스입니다.

 

자신의 블로그 주소를 적고, 이 블로그에 대한 자신의 관리자 아이디(사용자 이름), 암호를 입력합니다.

 

웹 로그 설정들을 받아옵니다.

 

웹 로그 설정 검색중 갑자기 이런 창이 뜹니다. 원격 포스팅을 하면서 미리보기도 하고 해야하니 를 선택

(싫으시면 아니오를 하셔도 상관없습니다. 각자 기호에 맞게...)

 

방금 자신이 등록한 블로그를 MS Windows Live Writer에서 구분하기 위한 이름을 입력합니다.

그리고 자신의 블로그가 정상적으로 설정되었는지 확인합니다.

 

자 이제 편집화면입니다. 맘껏 원격 블로깅을 즐겨보아요~♬

----------------------------------------------------------------------------------

PS.
MS Windows Live Writer로 포스팅 하고 난 후, 직접 Tistory에 로그인해보니
발행시 공개설정은 그냥 일반 공개로 되어있었고 CCL(저작권)설정은 없었다.
이를 위해서 직접 발행을 선택하고 CCL설정은 상업적이용 불가로 설정했다.
이정도 외에는 따로 설정할 것 없이 깔끔하게 잘 포스팅 된 듯. 만족~

PS2.

티스토리에서 원격 블로깅을 하기 위해서는 환경설정에서 BlogAPI 을 사용하기로 설정해야한다.

아래 화면에서 [사용하기]를 클릭하여 사용중으로 변경하면 BlogAPI 를 사용할 수 있게된다.


저작자 표시 비영리 변경 금지
신고

박상근 프로그래밍/.NET (C#) BlogAPI, MS Windows Live Writer, 블로그API, 원격블로깅

  1. 덕분에 잘됫어요 감사해요 ㅋ

  2. 앗, 도움이 되셨다니 저도 기브네요 ^^

블랙잭 개발환경 구축하기 ( Windows Mobile 6 )

2009.06.06 20:12


막연히 모바일 개발이 해보고싶다라고 생각만 했었는데,
삼성 소프트웨어 멤버십 19기로 합격하고 단기과제를 진행하면서 Windows Mobile 6 기반에서 개발할 기회가 생겼다.

Museum Assitst
박물관에서 각 작품의 해당 정보를 얻기 위해 자신의 스마트폰에서 지정된 작품 번호를 입력하면
해당 작품의 정보를 텍스트, 이미지 뿐 아니라 음성으로 바로 안내를 받을 수 있는 시스템

Museum Assist 에서 내가 스마트폰 개발 파트를 담당하게 되었다.
옴니아같은 스마트폰은 100여만원... 너무 비싸고, 무난히 쓸만한 블랙잭 ( SCH-M620 )을 구매했다..
상태도 깨끗했고 4GB MicroSD 칩 포함해서 직거래 12만원에 ㅎㅎㅎ. 중고매매 처음해봤다.

스마트폰이 준비되었으니 이제는 개발환경을 구축할 차례다.
블랙잭은 기본으로 Windows Mobile 5 가 깔려있는데 Windows Mobile 6 으로 롬업했다.

Visual Studio 2008 은 미리 준비되어 있었고, 스마트폰 개발을 위한 Windosw Mobile 6 SDK 를 다운받자.

http://www.microsoft.com/downloads/details.aspx?FamilyID=06111a3a-a651-4745-88ef-3d48091a390b&DisplayLang=en
Windows Mobile 6 Professional SDK 는 터치가 가능한 스마트폰용이고 블랙잭은 터치가 안되기때문에
Windows Mobile 6 Standard SDK 를 다운받아서 설치하면 된다.

이제 블랙잭을 위한 에뮬레이터 이미지를 다운받아야한다.
일단 윈도우 폼 개발에서의 Form 형태를, 스마트폰 개발에서는 각 폰 형태에 맞게 이미지를 지정해줘야한다.
각 폰마다 액정의 크기도 틀리고, 키패드 배열 등도 틀리기 때문이다.

http://www.microsoft.com/downloads/details.aspx?familyid=38C46AA8-1DD7-426F-A913-4F370A65A582&displaylang=en
위 링크에서 0412/Windows Mobile 6 Standard Images (KOR).msj 를 다운받아 설치하자.


자, 이제 스마트폰 개발을 위한 새 프로젝트를 생성해본다. Visual Studio 2008 을 설치하고
파일 -> 새로만들기 -> 새 프로젝트 를 하면 위 그림과 같은 새 프로젝트 창이 뜬다.
본인은 Visual C# 으로 개발할 생각이었으므로 Visual C# -> 스마트 장치 를 선택했다.
이 스마트 장치가 바로 스마트폰을 의미한다. ( PDA 개발도 포함 )


새 프로젝트에서 이름과 위치 등을 설정하고 확인을 누르면 위와 같은 스마트 장치에 대한 설정 창이 뜬다.
대상 플랫폼을 Windows Mobile 6 Standard SDK로 설정하고 .NET Compack Framework는 각자 자신에 맞게.
장치 응용 프로그램을 선택하고 확인을 클릭해보자.

 
 
좌측이 Windows Mobile 6 Standard SDK, 우측이 Windows Mobile 6 Standard Landscape QVGA 폼 이미지이다.

처음 프로젝트를 생성하면 폼 속성의 FormFackor 가 Windows Mobile 6 Standard SDK 로 되어있으므로
블랙잭 폼 이미지를 사용하기 위해서는 Windows Mobile 6 Standard Landscape QVGA 폼 이미지로 변경한다.


자, 이제 에뮬레이터도 블랙잭으로 설정을 바꿔보자.
프로젝트의 속성에서 장치 탭을 보면 배포 옵션의 대상 장치를 선택할 수 있다.
이것도 폼 속성의 FormFackor 를 변경했던것과 마찬가지로, 위 그림과 같이 바꿔준다.


자 이것이 에뮬레이터 동작 화면이다.
디버깅 하면 저 에뮬레이터가 동작하게된다. 블랙잭과 아주 유사하지 않은가?

이제 블랙잭 폰에 맞춘 스마트폰 개발환경을 마쳤다.

휴... 4달 전 단기과제 시작할 때의 기억을 더듬어 쓰려니 힘들다.
그 땐 정말 아무것도 몰랐는데, 한번 해봤다고 프로젝트 있을 때마다 스마트폰 관련 기능을 넣어서
내 폰으로 어찌어찌 아웃풋을 내보려는 내 모습을 보면 조금 우습기도 하다. 하하하~

내가 지금 이럴때가 아니지. 시험기간인데...


저작자 표시 비영리 동일 조건 변경 허락
신고

박상근 프로그래밍/.NET (C#) c#, qwerty, SCH-M620, windows mobile, windows mobile6 sdk, 모바일, 블랙잭, 스마트폰

티스토리 툴바