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. 15
    Jun 2021
    08:52

    파이썬 초보자가 접하기 쉬운 오류 메시지

    Category컴퓨터잡담 Views1441
    Read More
  2. 15
    Jun 2021
    08:28

    파이썬의 IF문 사용시 실행값에서 오류발생시 진행하는 예외처리 방법

    Category컴퓨터잡담 Views2836
    Read More
  3. 14
    Jun 2021
    12:02

    파이썬 게시물 검색으로 새로운 게시물 등록시 지메일로 파일 보내기

    Category컴퓨터잡담 Views2043
    Read More
  4. 14
    Jun 2021
    08:35

    파이썬 Beautifulsoup html의 특정 주소만 가져오기

    Category컴퓨터잡담 Views2986
    Read More
  5. 11
    Jun 2021
    11:38

    농업경영에 이용하지 않는 농지의 처분 의무

    Category컴퓨터잡담 Views1223
    Read More
  6. 06
    Jun 2021
    08:46

    파이썬 pyautogui 명령어

    Category컴퓨터잡담 Views1559
    Read More
  7. 05
    Jun 2021
    23:13

    파이썬 한우정액 정보 스프레드로 추출하기

    Category컴퓨터잡담 Views1625
    Read More
  8. 05
    Jun 2021
    12:33

    파이썬으로 네이버 증권정보 추출하기

    Category컴퓨터잡담 Views1874
    Read More
  9. 05
    Jun 2021
    11:06

    자주쓰는 파이썬 명령어

    Category컴퓨터잡담 Views1249
    Read More
  10. 05
    Jun 2021
    10:24

    파이썬 자주 발생되는 에러(오류) 대처방법

    Category컴퓨터잡담 Views2662
    Read More
  11. 02
    Jun 2021
    14:05

    파이썬 웹페이지 기업정보 추출하기

    Category컴퓨터잡담 Views1822
    Read More
  12. 01
    Jun 2021
    09:48

    타지역 농지매입

    Category컴퓨터잡담 Views1108
    Read More
  13. 31
    May 2021
    00:08

    파이썬 사이트 정보 가져와서 필요한 내용 추출하기

    Category컴퓨터잡담 Views1779
    Read More
  14. 30
    May 2021
    21:03

    파이썬 셀레니움으로 네이버 증권의 종목 검색하여 특정항목 클릭하기

    Category컴퓨터잡담 Views1564
    Read More
  15. 16
    Mar 2021
    19:21

    파이썬 동행복권 판매인 모집 공고 발생시 자동알림

    Category컴퓨터잡담 Views2272
    Read More
  16. 12
    Mar 2021
    20:33

    아두이노 나노 호환보드 칩셋드라이버 CH340 설치 및

    Category컴퓨터잡담 Views2366
    Read More
  17. 12
    Mar 2021
    20:22

    [파이썬] 설치 및 사용방법

    Category컴퓨터잡담 Views1859
    Read More
  18. 08
    Jan 2021
    16:06

    한글입력이 안될때(how to hangul ...)

    Category컴퓨터잡담 Views2839
    Read More
  19. 27
    Dec 2020
    10:56

    스프레드시트 함수

    Category[Docs]스프레드시트 Views4824
    Read More
  20. 26
    Dec 2020
    16:10

    스프레드시트 스크립트 소스

    Category[Docs]스프레드시트 Views4891
    Read More
Board Pagination Prev 1 ... 5 6 7 8 9 ... 46 Next
/ 46

http://urin79.com

우린친구블로그

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


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

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

설치 취소