標準ライブラリだけでいけた。

ブツ

実行

NAME='Python.Monaledge.Api.MyInfo.MyArticles.Article.20221008103206'
git clone https://github.com/ytyaru/$NAME
cd $NAME/src
./run.py

コード

モナレッジAPIを解析してみたときのAPIを叩いてみた。

run.py

#!/usr/bin/env python3
# coding: utf8
import importlib
MonaledgeApi = importlib.import_module("monaledge-api")
print(MonaledgeApi)
api = MonaledgeApi.MonaledgeApi()
address = 'MEHCqJbgiNERCH3bRAtNSSD9uxPViEX1nu'
user = api.my_info(address)
print(user)
print()
articles = api.my_articles(user['id'], 1)
print(articles)
print()
print(articles['articles'][0]['id'])
article = api.article(articles['articles'][0]['id'])
print(article)
print()

monaledge-api.py

モナレッジAPIクラス。

#!/usr/bin/env python3
# coding: utf8
import importlib
ApiRequester = importlib.import_module("api-requester")
import urllib.parse

class MonaledgeApi:
    def __init__(self):
        self._base = 'https://monaledge.com:8443'
        self._req = ApiRequester.ApiRequester()
    def my_info(self, address):
        return self._req.post(self._url('myInfo'), {'address':address})
    def my_articles(self, author_id, page=1):
        return self._req.post(self._url('myArticles'), {'author_id':author_id, 'page':page})
    def article(self, id):
        return self._req.get(self._url('article'), {'id':id})
    def _url(self, path): return urllib.parse.urljoin(self._base, path)

api-requester.py

WebAPIを叩く汎用クラス。

#!/usr/bin/env python3
# coding: utf8
import urllib.request
import json
import time
class ApiRequester:
    def __init__(self): self._sleep_time = 1
    def get(self, url, data=None): return self._request('GET', url, data)
    def post(self, url, data): return self._request('POST', url, data)
    def put(self, url, data): return self._request('PUT', url, data)
    def patch(self, url, data): return self._request('PATCH', url, data)
    def delete(self, url, data): return self._request('DELETE', url, data)
    def _request(self, method, url, data):
        print(method, url)
        print(data)
        req = urllib.request.Request(self._url(method, url, data), json.dumps(data).encode(), self._headers(), method=method)
        with urllib.request.urlopen(req) as res:
            time.sleep(self._sleep_time)
            return json.loads(res.read().decode('utf-8'))
    def _headers(self): return { 'Content-Type': 'application/json' }
    def _url(self, method, url, data):
        if data is None: return url
        match method:
            case 'GET': return '{}?{}'.format(url, urllib.parse.urlencode(data))
            case _: return url

ふつうWebAPIはRESTでHTTPS通信。その引数や戻り値はJSONで受け渡しする。なのでそのへんをPythonの標準ライブラリだけで実装した。