Browse Source

Remove old marvel versions

master
Dimitri Merejkowsky 5 years ago
parent
commit
7b224a412a
5 changed files with 0 additions and 467 deletions
  1. +0
    -61
      sources/marvel/marvel_01.py
  2. +0
    -84
      sources/marvel/marvel_02.py
  3. +0
    -80
      sources/marvel/marvel_03.py
  4. +0
    -108
      sources/marvel/marvel_04.py
  5. +0
    -134
      sources/marvel/marvel_06.py

+ 0
- 61
sources/marvel/marvel_01.py View File

@@ -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()

+ 0
- 84
sources/marvel/marvel_02.py View File

@@ -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()

+ 0
- 80
sources/marvel/marvel_03.py View File

@@ -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()

+ 0
- 108
sources/marvel/marvel_04.py View File

@@ -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()

+ 0
- 134
sources/marvel/marvel_06.py View File

@@ -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()