# Sorrow446 import os import re from random import randint import requests from api.exceptions import IneligibleError class Client: def __init__(self): self.session = requests.Session() self.session.headers.update({ 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0' }) self.base = 'https://bifrost.marvel.com/' def set_cookies(self, cookies): self.session.cookies.update(cookies) def get_id(self, url): r = self.session.get(url) regex = r'"digitalComicID":(([0-9]+))' print(f"SEARCH") print(re.search(regex, r.text).groups()) return re.search(regex, r.text).group(1) def make_call(self, epoint, params=None): r = self.session.get(self.base+epoint, params=params) r.raise_for_status() return r def get_next_comic(self, id): self.session.headers.update({'Referer': 'https://read.marvel.com/'}) r = self.make_call(f'v1/catalog/digital-comics/metadata/{id}?') return r.json()['data']['results'][0].get('prev_next_issue',{}).get('next_issue_meta',{}).get('id') def get_comic_meta(self, id): self.session.headers.update({'Referer': 'https://read.marvel.com/'}) r = self.make_call(f'v1/catalog/digital-comics/metadata/{id}?') return r.json()['data']['results'][0]['issue_meta'] def get_comic(self, id): params={'rand': randint(10000, 99999)} r = self.make_call(f'v1/catalog/digital-comics/web/assets/{id}?', params=params) j = r.json()['data']['results'][0] if not j['auth_state']['subscriber']: raise IneligibleError('Marvel Unlimited subscription required.') urls = [url['assets']['source'] for url in j['pages']] return urls