diff --git a/sources/marvel/marvel_01.py b/sources/marvel/marvel_01.py deleted file mode 100644 index 0a88c59..0000000 --- a/sources/marvel/marvel_01.py +++ /dev/null @@ -1,61 +0,0 @@ -import hashlib -import requests -import shutil -import time -import textwrap -import sys - - -def main(): - # Get name from command line - name = sys.argv[1] - - # Read api keys from the text file - with open("api-keys.txt", "r") as file: - lines = file.readlines() - - if len(lines) != 2: - sys.exit("Incorrect api-keys file") - - public_key = lines[0].strip() - private_key = lines[1].strip() - - - # base url - base_url = "http://gateway.marvel.com/v1/public" - - # Authorization stuff - params = dict() - params["apikey"] = public_key - ts = str(time.time()) - to_hash = ts + private_key + public_key - hasher = hashlib.md5() - hasher.update(to_hash.encode()) - digest = hasher.hexdigest() - params["ts"] = ts - params["hash"] = digest - - - # Perform the request - params["name"] = name - url = base_url + "/characters" - response = requests.get(url, 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"] - - # Print the description - terminal_size = shutil.get_terminal_size() - columns = terminal_size.columns - print("\n".join(textwrap.wrap(description, width=columns))) - - # Print attribution (comply with API agreement) - print("---") - print(body["attributionText"]) - - -if __name__ == "__main__": - main() diff --git a/sources/marvel/marvel_02.py b/sources/marvel/marvel_02.py deleted file mode 100644 index 89c8192..0000000 --- a/sources/marvel/marvel_02.py +++ /dev/null @@ -1,84 +0,0 @@ -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() diff --git a/sources/marvel/marvel_03.py b/sources/marvel/marvel_03.py deleted file mode 100644 index 567b32c..0000000 --- a/sources/marvel/marvel_03.py +++ /dev/null @@ -1,80 +0,0 @@ -import hashlib -import requests -import shutil -import time -import textwrap -import sys - - -class Authorization: - def __init__(self, filename): - with open(filename, "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: - base_url = "http://gateway.marvel.com/v1/public" - - def __init__(self, auth): - self.auth = auth - - def get_character_description(self, name): - params = self.auth.generate_params() - params["name"] = name - url = Client.base_url + "/characters" - response = requests.get(url, 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] - - - auth = Authorization("api-keys.txt") - - client = Client(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() diff --git a/sources/marvel/marvel_04.py b/sources/marvel/marvel_04.py deleted file mode 100644 index 7f1821b..0000000 --- a/sources/marvel/marvel_04.py +++ /dev/null @@ -1,108 +0,0 @@ -import hashlib -import requests -import shutil -import time -import textwrap -import sys - - -class Authorization: - def __init__(self, filename): - with open(filename, "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 CharacterDescriptionGetter: - base_url = "http://gateway.marvel.com/v1/public" - - def __init__(self, auth): - self.auth = auth - - def get_character_description(self, name): - params = self.auth.generate_params() - params["name"] = name - url = CharacterDescriptionGetter.base_url + "/characters" - response = requests.get(url, 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 CreatorNumberOfSeriesGetter: - base_url = "http://gateway.marvel.com/v1/public" - - def __init__(self, auth): - self.auth = auth - - def get_number_of_series(self, first_name, last_name): - params = self.auth.generate_params() - params["firstName"] = first_name - params["lastName"] = last_name - url = CreatorNumberOfSeriesGetter.base_url + "/creators" - response = requests.get(url, params=params) - status_code = response.status_code - if status_code != 200: - sys.exit("got status: " + str(status_code)) - body = response.json() - result = body["data"]["results"][0] - attribution = body["attributionText"] - return result["series"]["available"], 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(): - auth = Authorization("api-keys.txt") - - query = sys.argv[1] - if query == "character-description": - name = sys.argv[2] - character_description_getter = CharacterDescriptionGetter(auth) - description, attribution = character_description_getter.get_character_description(name) - text = description - elif query == "creator-number-of-series": - first_name = sys.argv[2] - last_name = sys.argv[3] - creator_number_of_series_getter = CreatorNumberOfSeriesGetter(auth) - result, attribution = creator_number_of_series_getter.get_number_of_series(first_name, last_name) - text = first_name + " " + last_name + " worked on " + str(result) + " series" - - terminal_size = shutil.get_terminal_size() - columns = terminal_size.columns - terminal = Display(width=columns) - - terminal.display(text) - terminal.display("---") - terminal.display(attribution) - - -if __name__ == "__main__": - main() diff --git a/sources/marvel/marvel_06.py b/sources/marvel/marvel_06.py deleted file mode 100644 index a4ab442..0000000 --- a/sources/marvel/marvel_06.py +++ /dev/null @@ -1,134 +0,0 @@ -# WARNING: Don't read this unless you want to get spoiled! -import abc -import hashlib -import requests -import shutil -import time -import textwrap -import sys - - -class Authorization: - def __init__(self, filename): - with open(filename, "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(): - base_url = "http://gateway.marvel.com/v1/public" - - def __init__(self, auth): - self.auth = auth - - def make_request(self, query): - params = self.auth.generate_params() - params.update(query.params()) - url = Client.base_url + query.path - response = requests.get(url, params=params) - status_code = response.status_code - if status_code != 200: - sys.exit("got status: " + str(status_code)) - body = response.json() - result = query.extract(body) - return (query.to_text(result), body["attributionText"]) - - -class Query(metaclass=abc.ABCMeta): - @abc.abstractmethod - def params(self): - pass - - @abc.abstractmethod - def path(self): - pass - - @abc.abstractmethod - def extract(self, body): - pass - - def to_text(self, result): - return result - - -class CharacterDescription(Query): - path = "/characters" - - def __init__(self, name): - self.name = name - - def params(self): - return { "name": self.name } - - def extract(self, body): - return body["data"]["results"][0]["description"] - - -class CreatorNumberOfSeries(Query): - path = "/creators" - - def __init__(self, first_name, last_name): - self.first_name = first_name - self.last_name = last_name - - def params(self): - return { "firstName": self.first_name, "lastName": self.last_name } - - def extract(self, body): - return body["data"]["results"][0]["series"]["available"] - - def to_text(self, result): - return f"{self.first_name} {self.last_name} worked on {result} series" - - -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(): - - query_type = sys.argv[1] - if query_type == "character-description": - name = sys.argv[2] - query = CharacterDescription(name) - elif query_type == "creator-number-of-series": - first_name = sys.argv[2] - last_name = sys.argv[3] - query = CreatorNumberOfSeries(first_name, last_name) - - auth = Authorization("api-keys.txt") - client = Client(auth) - text, attribution = client.make_request(query) - - terminal_size = shutil.get_terminal_size() - columns = terminal_size.columns - terminal = Display(width=columns) - - terminal.display(text) - terminal.display("---") - terminal.display(attribution) - - -if __name__ == "__main__": - main()