標準ライブラリだけでいけた。
ブツ
実行
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の標準ライブラリだけで実装した。