You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.8 KiB
Python

import requests, json, ipaddress, random
from flask import request
def get_headers():
ip = []
for i in range(0, 4):
ip.append(random.randint(0, 254))
random_ip = ''
for i in range(0, 3):
random_ip += str(ip[i]) + '.'
random_ip += str(ip[3])
headers = {"X-Forwarded-For": random_ip}
return headers
class Livre:
def __init__(self, title, author, publish, isbn, img_url):
self.title = title
self.author = author
self.publish = publish
self.isbn = isbn
self.img_url = img_url
def get_books():
livres = []
headers = get_headers()
# La condition if permet de n'afficher du contenue de l'API que lorsqu'il y a une requête qui est effectué.
if request.method == "POST":
choix = request.form["choix"]
# Concaténations a l'url de l'API du choix de l'utilisateur reçu via request.form et on choisi les informations que nous souhaitons récuperer.
url = "https://openlibrary.org/search.json?q=" + choix + "&fields=title,author_name,first_publish_year,isbn"
response = requests.get(url, headers)
# Transformation des données reçu de l'API en objet JSON pour les avoir sous forme clé/valeur.
datas = json.loads(response.text)
for e in datas["docs"]:
# A l'aide du constructeur de la classe Livre on affine les données reçu et on concaténe isbn a l'url images.
livre = Livre(e["title"], e["author_name"][0], e["first_publish_year"], e["isbn"][0], "https://covers.openlibrary.org/b/isbn/" + e["isbn"][0] + "-L.jpg")
# Informations ajouté au dictionnaire livres definit plus haut.
livres.append(livre)
else:
print("Pas de requête effectué")
livres.append("No datas")
return livres