Skip to content
조회 수 3433 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

Python으로 XML-RPC 서버 구축

 

한 15년전 즈음되나?

그땐 php에 빠져 허우적댔는데,,,

 

한동안 잊고있다가

 

나이 45에...

느닷없이 python으로 xpressengine 블로그 글쓰기를 해봐야겠다고 생각했다.

그래서 한번 해보니 대충 되긴된다.

 

 

import xmlrpc.client

API_URL = "http://econo.urin79.com/attention/api"

class NaverBlog(object):
    def __init__(self, user_id, api_key):
        self.__server = None
        self.__user_id = user_id
        self.__api_key = api_key
        self.__categories = []

        try:
            self.__set_categories()
        except Exception as e:
            raise e

    def __client(self):
        if self.__server is None:
            self.__server = xmlrpc.client.ServerProxy(API_URL)

        return self.__server

    def __set_categories(self):
        categories = self.__client().metaWeblog.getCategories(self.__user_id,
                                                              self.__user_id,
                                                              self.__api_key)

        for category in categories:
            self.__categories.append(category['title'])

    def post(self, title, description, category, publish=True):
        struct = {}
        struct['title'] = title
        struct['description'] = description
        if category in self.__categories:
            struct['categories'] = [category]

        try:
            return self.__client().metaWeblog.newPost(self.__user_id,
                                                      self.__user_id,
                                                      self.__api_key,
                                                      struct,
                                                      publish)
        except Exception as e:
            raise e


def main():
    naver = NaverBlog('아이디', '비밀번호')
    naver.post('테스트 제목', '<h1>테스트 글쓰기</h1>', '카테고리 한글')


if __name__ == '__main__':
    main()

 

 

 

 

1. XML-RPC란?

XML-RPC는 XML로 인코딩을 하는 RPC(Remote Procedure Call) 프로토콜의 종류 중 하나로, Server와 Client가 통신할때 사용한다. 이때, HTTP 프로토콜로 통신한다.

 

XML-RPC를 사용하면, client에서 server의 프로그램을 마치 로컬에 있는 프로그램을 사용하듯이 원격 실행이 가능하다.

 

이후에는 좀 더 부가기능을 추가하여 SOAP 프로토콜이 개발되었지만, 단순하고 사용하기 쉬운 XML-RPC를 더 많이 사용하고 있다. (비슷한 프로토콜로는 JSON-RPC가 존재)

 

1.1. XML-RPC XML 예시

XML-RPC Call

<?xml version="1.0"?>
<methodCall>
  <methodName>examples.getStateName</methodName>
  <params>
    <param>
        <value><i4>40</i4></value>
    </param>
  </params>
</methodCall>html

 

XML-RPC Response

<?xml version="1.0"?>
<methodResponse>
  <params>
    <param>
        <value><string>South Dakota</string></value>
    </param>
  </params>
</methodResponse>html

 

1.2. REST API vs XML-RPC

하지만, 요즘은 XML-RPC를 사용하지 않고 REST API를 많이 사용한다.

  • REST API가 상대적으로 사용하기 쉬움
  • XML-RPC는 대량의 데이터 전송에 상대적으로 효율적이지 못함

 

2. Python으로 XML-RPC 서버 구축

2.1. Server

from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler


class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ("/RPC2",)


if __name__ == "__main__":
    with SimpleXMLRPCServer(('localhost', 8000), requestHandler=RequestHandler) as server:
        server.register_introspection_functions()

        # 1. pow 함수를 저장하는 경우
        server.register_function(pow)

        # 2. 사용자가 정의한 함수를 저장하는 경우
        def adder_function(x, y):
            return x + y
        server.register_function(adder_function, 'add')

        # 3. 사용자가 정의한 클래스를 인스턴스로 생성하여 저장하는 경우
        class MyFuncs:
            def mul(self, x, y):
                return x + y
        server.register_instance(MyFuncs())

        # 서버 실행
        print("Start server...")
        server.serve_forever()
python

 

2.2. Client

Client쪽에는 pow, add, mul 메소드가 없지만, 실행 할 수 있다.

import xmlrpc.client

if __name__ == "__main__":
    proxy = xmlrpc.client.ServerProxy("http://localhost:8000")

    # 따로 pow, add, mul 함수를 정의한적이 없지만 사용이 가능하다.
    print(proxy.pow(2, 3))
    print(proxy.add(2, 3))
    print(proxy.mul(5, 2))

    # 사용할 수 있는 메소드 확인
    print(proxy.system.listMethods())
python

 

결과

 

 

 



출처: https://memostack.tistory.com/240 [MemoStack]

로그인 후 댓글쓰기가 가능합니다.

?

  1. 08
    Dec 2016
    15:27

    최두호 컵스완슨 경기일정과 경기분석

    Category연예정보 Views4014
    Read More
  2. 26
    Nov 2016
    03:03

    [mysql] Created tmp disk tables 디스크 쓰기방지 대안

    CategoryServer Views5162
    Read More
  3. 21
    Nov 2016
    23:54

    정우성 박근혜 앞으로 나와 시국선언

    Category연예정보 Views4279
    Read More
  4. 13
    Oct 2016
    22:29

    최두호 컵스완슨 UFC 죽음을 두른 손의 맞대결

    Category연예정보 Views15380
    Read More
  5. 10
    Oct 2016
    13:36

    갤럭시노트7 생산중단 보상규정은 어떻게?

    Category사건사고 Views1920
    Read More
  6. 08
    Oct 2016
    08:50

    비만 주범 지방? 탄수화물? 웃기는 소리들

    Category유용한상식 Views1651
    Read More
  7. 06
    Oct 2016
    12:58

    동국알앤에스 투자경고종목 이후 3일째

    Category주식 Views1248
    Read More
  8. 03
    Oct 2016
    01:43

    경주 지진 스스로 살아남아야 한다.

    Category사건사고 Views1899
    Read More
  9. 25
    Sep 2016
    13:17

    심심해서 DIY 재료

    Category만들기 Views453
    Read More
  10. 22
    Sep 2016
    20:04

    절대농지 해제의 엄청난 문제점

    Category일상 Views3693
    Read More
  11. 17
    Sep 2016
    20:42

    윈도우용 MEMcached 설치방법

    CategoryServer Views5182
    Read More
  12. 11
    Sep 2016
    22:19

    jQuery CDN

    CategoryServer Views4300
    Read More
  13. 11
    Sep 2016
    16:39

    한국주철관 싱크홀 관련주

    Category주식 Views2389
    Read More
  14. 11
    Sep 2016
    12:42

    갤럭시 노트7 사용 중지 권고 국토부 결정

    Category사건사고 Views1991
    Read More
  15. 06
    Sep 2016
    20:32

    Apache에 대한 mod_proxy 지원 구성

    CategoryServer Views1801
    Read More
  16. 06
    Sep 2016
    11:38

    vcruntime140.dll / vcomp140.dll / vcamp140.dll 오류해결법

    CategoryWindowsTip Views6845
    Read More
  17. 31
    Aug 2016
    08:05

    예수 신화 가공 과정

    Category종교와철학 Views1820
    Read More
  18. 14
    Aug 2016
    08:07

    XE 반응형 모바일 메타태그 삽입하기

    CategoryServer Views3687
    Read More
  19. 13
    Aug 2016
    08:26

    구글 스프레드시트 설문지 내맘대로 수정하기

    Category[Docs]스프레드시트 Views11647
    Read More
  20. 08
    Aug 2016
    00:03

    스프레드시트 api append & update php 셀 내용 수정

    Category[Docs]스프레드시트 Views5316
    Read More
Board Pagination Prev 1 2 3 4 5 6 ... 16 Next
/ 16

http://urin79.com

우린친구블로그

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소