|
@@ -0,0 +1,84 @@ |
|
|
|
|
|
import hashlib |
|
|
|
|
|
import requests |
|
|
|
|
|
import shutil |
|
|
|
|
|
import time |
|
|
|
|
|
import textwrap |
|
|
|
|
|
import sys |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Authorization: |
|
|
|
|
|
def __init__(self): |
|
|
|
|
|
self.public_key = None |
|
|
|
|
|
self.private_key = None |
|
|
|
|
|
|
|
|
|
|
|
def get_keys(self): |
|
|
|
|
|
with open("api-keys.txt", "r") as file: |
|
|
|
|
|
lines = file.readlines() |
|
|
|
|
|
|
|
|
|
|
|
if len(lines) != 2: |
|
|
|
|
|
sys.exit("Incorrect api-keys file") |
|
|
|
|
|
|
|
|
|
|
|
self.public_key = lines[0].strip() |
|
|
|
|
|
self.private_key = lines[1].strip() |
|
|
|
|
|
|
|
|
|
|
|
def generate_params(self): |
|
|
|
|
|
params = dict() |
|
|
|
|
|
params["apikey"] = self.public_key |
|
|
|
|
|
ts = str(time.time()) |
|
|
|
|
|
to_hash = ts + self.private_key + self.public_key |
|
|
|
|
|
hasher = hashlib.md5() |
|
|
|
|
|
hasher.update(to_hash.encode()) |
|
|
|
|
|
digest = hasher.hexdigest() |
|
|
|
|
|
params["ts"] = ts |
|
|
|
|
|
params["hash"] = digest |
|
|
|
|
|
return params |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Client: |
|
|
|
|
|
def __init__(self, base_url, auth): |
|
|
|
|
|
self.base_url = base_url |
|
|
|
|
|
self.auth = auth |
|
|
|
|
|
|
|
|
|
|
|
def get_character_description(self,name): |
|
|
|
|
|
params = self.auth.generate_params() |
|
|
|
|
|
params["name"] = name |
|
|
|
|
|
response = requests.get(self.base_url+"/characters", params=params) |
|
|
|
|
|
status_code = response.status_code |
|
|
|
|
|
if status_code != 200: |
|
|
|
|
|
sys.exit("got status: " + str(status_code)) |
|
|
|
|
|
body = response.json() |
|
|
|
|
|
description = body["data"]["results"][0]["description"] |
|
|
|
|
|
attribution = body["attributionText"] |
|
|
|
|
|
return (description, attribution) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Display: |
|
|
|
|
|
def __init__(self, width=80): |
|
|
|
|
|
self.width = width |
|
|
|
|
|
|
|
|
|
|
|
def display(self, text): |
|
|
|
|
|
print("\n".join(textwrap.wrap(text, width=self.width))) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def main(): |
|
|
|
|
|
name = sys.argv[1] |
|
|
|
|
|
|
|
|
|
|
|
base_url = "http://gateway.marvel.com/v1/public" |
|
|
|
|
|
|
|
|
|
|
|
auth = Authorization() |
|
|
|
|
|
auth.get_keys() |
|
|
|
|
|
|
|
|
|
|
|
client = Client(base_url, auth) |
|
|
|
|
|
description, attribution = client.get_character_description(name) |
|
|
|
|
|
|
|
|
|
|
|
terminal_size = shutil.get_terminal_size() |
|
|
|
|
|
columns = terminal_size.columns |
|
|
|
|
|
terminal = Display(width=columns) |
|
|
|
|
|
|
|
|
|
|
|
terminal.display(description) |
|
|
|
|
|
terminal.display("---") |
|
|
|
|
|
terminal.display(attribution) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
|
|
main() |