Клиент недокументированные API или обертки в Python


Получил идти вперед, чтобы сделать обертку API для недокументированных веб-API. Надеюсь получить некоторую обратную связь на мой код и выбор конструкции.

Я хожу взад и вперед и не мог действительно чувствовать себя удовлетворенным при любом из моих вариантов дизайна.

Есть много заполнителей, но я думаю, что основание того, что я собираюсь должны иметь смысл, в этот момент было бы добавлять конечные точки и делать ошибки ловить если я буду продолжать с ним.

Советы, альтернативных вариантов дизайна, на самом деле все это добро и я ценю все это.

from uuid import uuid4
from time import strftime, gmtime

from hashlib import md5

import requests


class Wrapper:

    endpoints = ['sign_in', 'sign_up']

    def __init__(self):
        # Details
        self.prv_key = ''  # private_key
        self.pub_key = ''  # token
        self.member_id = 0
        self.device_id = uuid4()

        # 'X-Device' header
        self.device_header = \
            '{0},{1},{2}:{2}'.format('android', self.device_id, '845')

    @property
    def auth_token(self):
        auth_token = ','.join((

            # MD5 of auth and time stamp
            md5(self.prv_key + self.pub_key).hexdigest(),
            md5(strftime('%Y-%m-%dT%H:%M,mobile', gmtime())).hexdigest(),

            # Member ID can't be int(0)
            str(self.member_id or '')

        ))

        return auth_token

    def request(self, url, method, **kwargs):
        # Default headers
        kwargs['headers'] = {
            'X-AuthToken':     self.auth_token,
            'X-Device':        self.device_header,
            'Accept':          'application/json',
            'Accept-Language': 'en-US',
            'User-Agent':      'okhttp/3.6.0'
        }
        # Proxy settings
        kwargs['proxies'] = {
            'https':           '192.168.178.27:8085',  # TODO: DEBUG
            'http':            '192.168.178.27:8085'   # TODO: DEBUG
        }
        # SSL verification
        kwargs['verify'] = False  # TODO: DEBUG

        r = requests.request(method, url, **kwargs)

        # TODO: CATCH ERRORS
        # TODO: CORRECT RESPONSE
        response = r.content

        return response

    def sign_in(self):
        return self.request('http://httpbin.org/get', 'GET')  # TODO: DEBUG

    def sign_up(self):
        return ''


if __name__ == '__main__':

    test = Wrapper()
    print test.sign_in()


95
2
задан 16 февраля 2018 в 08:02 Источник Поделиться
Комментарии