kwork-poizonstore/external_api/poizon.py

55 lines
1.6 KiB
Python

from urllib3.util import parse_url
from urllib.parse import urljoin, parse_qs
from django.conf import settings
import requests
class PoizonClient:
SPU_GET_DATA_ENDPOINT = 'spu_get_data'
MAX_RETRIES = 2
def __init__(self, token: str):
self.api_url = 'http://124.222.99.75/'
self.token = token
self.session = requests.Session()
def request(self, method, url, *args, **kwargs):
params = kwargs.pop('params', {})
params.update({"token": self.token})
joined_url = urljoin(self.api_url, url)
request = requests.Request(method, joined_url, params=params, *args, **kwargs)
retries = 0
while retries < self.MAX_RETRIES:
retries += 1
prepared = self.session.prepare_request(request)
r = self.session.send(prepared, timeout=settings.EXTERNAL_API_TIMEOUT_SEC)
# TODO: handle/log errors
return r
@staticmethod
def get_spu_id(url):
try:
# Go to short dw4.co url to get the full one from redirect
if 'dw4.co' in url:
r = requests.get(url)
url = r.url
url = parse_url(url)
qs = parse_qs(url.query)
spu_id = qs.get('spuId')
return spu_id.pop(0) if spu_id else None
except Exception as exc:
# TODO: handle/log errors
return None
def get_good_info(self, spu_id):
params = {'spuId': str(spu_id)}
r = self.request('GET', self.SPU_GET_DATA_ENDPOINT, params=params)
return r.json()