[python 인터넷] Python으로 XML-RPC 서버 구축

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가 존재)

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

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]

 

 

[출처] 우린친구블로그 - Python 메타블로그 글쓰기(제로보드, xpressengine blog api) (urin79.com)

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
411 [python, 인터넷] Web Search Engine, 인터넷 검색 엔진 구현 file 졸리운_곰 2023.01.16 4
410 [Amazon S3 clone] minio 설치 및 파이썬 업로드 스크립트 졸리운_곰 2022.12.24 6
409 [Python][flask] Flask 로 Rest API 구현하기 - 개발환경구축 file 졸리운_곰 2022.12.24 4
408 [python][자료구조] Dropbox API 사용하기 (with python) 졸리운_곰 2022.12.03 7
407 [Python][자료구조] SQLAlchemy Tutorial(한글) - 2 졸리운_곰 2022.12.03 4
406 [Python]][자료구조] SQLAlchemy Tutorial(한글) - 1 졸리운_곰 2022.12.03 11
405 [python] [Anaconda]가상환경 설치,삭제 file 졸리운_곰 2022.12.03 7
404 [python][머신러닝] Scikit-learn Tutorial: Machine Learning in Python file 졸리운_곰 2022.11.29 13
403 [python, 그래픽] [파이썬 활용] 마우스 자동화 (pyautogui) file 졸리운_곰 2022.11.26 29
402 [python, 그래픽] 파이썬 자동화 툴 - pyautogui 사용하기 file 졸리운_곰 2022.11.26 6
401 [Python] 파이썬 프로젝트의 구조 file 졸리운_곰 2022.11.18 27
400 [python] [Python] 파이썬 Source의 기본 형태 file 졸리운_곰 2022.11.18 7
399 cython 튜토리얼 Cython 시작하기 졸리운_곰 2022.11.13 8
398 [python] 파이썬 스케줄 수행 - schedule, apscheduler file 졸리운_곰 2022.11.13 20
397 [python 일반] python 난독화 및 실행파일 한 번에 만들기 졸리운_곰 2022.11.06 29
396 [python] 파이썬(sklearn) 사이킷런(sklearn) 기초 졸리운_곰 2022.08.20 27
395 [python] scikit-learn이란 file 졸리운_곰 2022.08.20 21
394 [python] Apache Airflow 소개 및 실습하기(기초) file 졸리운_곰 2022.07.25 39
393 [anaconde3][python] Create environment for tensorflow 1.4 in Anaconda 3 졸리운_곰 2022.07.02 34
» [python 인터넷] Python으로 XML-RPC 서버 구축 file 졸리운_곰 2022.06.28 7
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED