Open Caillibot opened 6 years ago
premiers pas
def content(url_manifest):
r = requests.get(url_manifest)
data = r.json()
simplified = []
for item in data["metadata"]:
try:
identifier = item["label"]
simplified.append(identifier)
except (IndexError, KeyError) as e:
# no description or scope and content found... skipping...
pass
# fetch the next page of data...
if data.get("links") and data["links"].get("next"):
simplified += content(data["links"]["next"])
return simplified
content("http://gallica.bnf.fr/iiif/ark:/12148/btv1b8453687c/manifest.json")```
Affichage des métadonnées avec requests.get
import requests
#affichage de l'ensemble des métadonnées du manifeste
req = requests.get("http://gallica.bnf.fr/iiif/ark:/12148/btv1b8453687c/manifest.json")
for resultat in req.json()["metadata"]:
print("{label}" " : ""{valeur}".format(
label=resultat["label"],
valeur=resultat["value"],
))```
Code A TESTER pour compléter l'affichage des métadonnées par celui de l'image depuis un manifeste GALLICA : def commentaire(comment_id): import requests
# On a bien sûr aussi modifié le template pour refléter le changement
unique_commentaire = Comment.query.get(comment_id)
utilisateur=User.query.get(unique_commentaire.comment_user_id)
r = requests.get(unique_commentaire.comment_lien)
data = r.json()
simplified = []
image_url = data["thumbnail"]["@id"]
return render_template('pages/comment.html', nom='Imaginatiiif',
commentaire=unique_commentaire,
user=utilisateur,
data=data.get('thumbnail'))
for item in data["metadata"]:
try:
identifier = item["label"]
simplified.append(identifier)
except:
error = 'Pas pu récupérer les données'
data = {}
return render_template('pages/comment.html', nom='Imaginatiiif',
commentaire=unique_commentaire,
user=utilisateur,
data=data.get('metadata'))
#return render_template("pages/comment.html",
#nom="Imaginatiiif",
#commentaire=unique_commentaire,
#user=utilisateur)
Code permettant de récupérer le titre et les images HD d'un manifeste GALLICA ou Harvard Art Museum (à rajouter au code / Metadata):
import requests
req = requests.get("http://gallica.bnf.fr/iiif/ark:/12148/btv1b8453687c/manifest.json")
manifeste = req.json()
print("titre :", req.json()["label"])
for item in manifeste["sequences"][0]["canvases"]:
url_image = item["images"][0]["resource"]["@id"]
print(url_image)
Code permettant de faire afficher une (et seulement 1 pour le moment ?!) des images (dont l'url est issue de la requête ci-dessus) d'un manifeste de type Gallica ou Harvard Art Museum dans un terminal : voir comment intégrer (le cas échéant) dans notre site :
import requests
req = requests.get("http://gallica.bnf.fr/iiif/ark:/12148/btv1b8453687c/manifest.json")
manifeste = req.json()
print("titre :", req.json()["label"])
for item in manifeste["sequences"][0]["canvases"]:
url_image = item["images"][0]["resource"]["@id"]
print(url_image)
import urllib.request
from tkinter import *
from PIL import Image, ImageTk
# Notre fenêtre principale
w = Tk()
w.title("tkv : visionneuse d'images") # Un titre
w.configure(background='#000000') # Fond noir
# Un conteneur dans la fenêtre
mainframe = Frame(w)
mainframe.pack(fill=BOTH,expand=True, padx=15, pady=15)
# Téléchargement de l'image
url=url_image
img_path="/tmp/image.jpg"
urllib.request.urlretrieve(url, img_path)
# Ouverture de l'image
image = Image.open(img_path)
# Dimensions de l'écran :
gap = 100 # marge par rapport aux bords de l'écran
screen_width = w.winfo_screenwidth() - gap
screen_height = w.winfo_screenheight() - gap
if image.width > screen_width :
image = image.resize((screen_width, int(image.height * screen_width / image.width)), Image.ANTIALIAS)
if image.height > screen_height :
image = image.resize((int(image.width * screen_height / image.height), screen_height), Image.ANTIALIAS)
# Chargement de l'image en mémoire
img = ImageTk.PhotoImage(image)
# Insertion de l'image dans le conteneur.
img_widget = Label(mainframe, image=img)
img_widget.pack()
# Démarrage du programme
w.mainloop()
J'ai l'immense fierté de vous annoncer que grâce aux conseils avisés d'Alexandre j'ai réussi à afficher les différentes images l'une au-dessus de l'autre (avec 300px de large). Je pense qu'il ne reste plus qu'à faire des colonnes pour afficher le commentaire et les métadonnées les uns à côté des autres.
Voici le code que j'ai utilisé :
juste sous {% block corps %}
{% if img %}
{% for lien in img %}
<div>
<img src={{lien}}
href={{lien}}
alt="Image à laquelle est lié le commentaire."
width="300"/>
</div>
{% endfor %}
{% endif %}
def commentaire(comment_id):
import requests
# On a bien sûr aussi modifié le template pour refléter le changement
unique_commentaire = Comment.query.get(comment_id)
utilisateur=User.query.get(unique_commentaire.comment_user_id)
r = requests.get(unique_commentaire.comment_lien)
data = r.json()
simplified = []
image = []
for item in data["metadata"]:
try:
identifier = item["label"]
simplified.append(identifier)
except:
error = 'Pas pu récupérer les données'
data = {}
for item in data["sequences"][0]["canvases"]:
try:
url_image = item["images"][0]["resource"]["@id"]
image.append(url_image)
except:
error = "Pas pu récupérer d'image"
data = {}
print(image)
return render_template('pages/comment.html', nom='Imaginatiiif',
commentaire=unique_commentaire,
user=utilisateur,
data=data.get('metadata'),
img = image)
cf PR #23
@Caillibot, est-ce que tu veux quand même creuser la popup ou on ferme l'issue ?
Code permettant d'obtenir un affichage des métadonnées de ce type (à adapter pour insertion dans le code de l'application si vous convient : ?): Repository : Bibliothèque nationale de France Provider : Bibliothèque nationale de France Disseminator : Gallica Source Images : http://gallica.bnf.fr/ark:/12148/btv1b8453687c Metadata Source : http://oai.bnf.fr/oai2/OAIHandler?verb=GetRecord&metadataPrefix=oai_dc&identifier=oai:bnf.fr:gallica/ark:/12148/btv1b8453687c Shelfmark : Bibliothèque nationale de France, département Société de Géographie, SG PORTRAIT-2244 Title : [J.W. Powell] / Bradley & Rulofson Date : 1876 Language : anglais Format : ('1 phot.', 'image/jpeg', 'Nombre total de vues : 2') Creator : Bradley & Rulofson (San Francisco, Calif.). Photographe Relation : Notice du catalogue : http://catalogue.bnf.fr/ark:/12148/cb405875184 Type : ('image', 'photographie')
import requests
req = requests.get("http://gallica.bnf.fr/iiif/ark:/12148/btv1b8453687c/manifest.json") manifeste = req.json() simplified = []
for item in manifeste["metadata"]: titre_metaD = item["label"] metaD = item["value"] simplified.append(metaD)
if titre_metaD == "Language":
resultat = item["value"][1]["@value"]
print("Language :", resultat)
elif titre_metaD == "Format":
resultat = item["value"][0]["@value"], item["value"][1]["@value"], item["value"][2]["@value"]
print("Format :", resultat)
elif titre_metaD == "Type":
resultat = item["value"][1]["@value"], item["value"][3]["@value"]
print("Type :", resultat)
else :
print(titre_metaD, ":", metaD)
Début de requête, pour remonter les items de la liste Json d'un manifeste Harvard ART Museum : ex : import requests
req = requests.get("https://iiif.harvardartmuseums.org/manifests/object/336788") print(req) print(req.status_code) print(req.headers) print(req.encoding)
print("@context :",req.json()["@context"]) print("@id :",req.json()["@id"]) print("@type :", req.json()["@type"]) print("titre :", req.json()["label"])
print("Métadonnées", req.json()["metadata"][0]["label"], ":", req.json()["metadata"][0]["value"]) print("Métadonnées", req.json()["metadata"][1]["label"], ":", req.json()["metadata"][1]["value"]) print("Métadonnées", req.json()["metadata"][2]["label"], ":", req.json()["metadata"][2]["value"]) print("Métadonnées", req.json()["metadata"][3]["label"], ":", req.json()["metadata"][3]["value"]) print("Métadonnées", req.json()["metadata"][4]["label"], ":", req.json()["metadata"][4]["value"]) print("Métadonnées", req.json()["metadata"][5]["label"], ":", req.json()["metadata"][5]["value"]) print("Métadonnées", req.json()["metadata"][6]["label"], ":", req.json()["metadata"][6]["value"]) print("Métadonnées", req.json()["metadata"][7]["label"], ":", req.json()["metadata"][7]["value"]) print("Métadonnées", req.json()["metadata"][8]["label"], ":", req.json()["metadata"][8]["value"]) print("Rendering@id :", req.json()["rendering"]["@id"]) print("Rendering_format :", req.json()["rendering"]["format"]) print("Renderinglabel :", req.json()["rendering"]["label"]) print("Sequences@id : ", req.json()["sequences"][0]["@id"]) print("Sequences@type :", req.json()["sequences"][0]["@type"]) print("canvases@id :", req.json()["sequences"][0]["canvases"][0]["@id"]) print("canvases_@type :", req.json()["sequences"][0]["canvases"][0]["@type"]) print("canvases_height :", req.json()["sequences"][0]["canvases"][0]["height"]) print("canvases_images0@id :", req.json()["sequences"][0]["canvases"][0]["images"][0]["@id"]) print("canvases_images0@type :", req.json()["sequences"][0]["canvases"][0]["images"][0]["@type"]) print("canvases_images_0_motivation :", req.json()["sequences"][0]["canvases"][0]["images"][0]["motivation"]) print("canvases_images_0_on :", req.json()["sequences"][0]["canvases"][0]["images"][0]["on"]) print("canvases_images_0ressource@id :", req.json()["sequences"][0]["canvases"][0]["images"][0]["resource"]["@id"]) print("canvases_images_0ressource@type :", req.json()["sequences"][0]["canvases"][0]["images"][0]["resource"]["@type"]) print("canvases_images_0_ressource_format :", req.json()["sequences"][0]["canvases"][0]["images"][0]["resource"]["format"]) print("canvases_images_0_ressource_height :", req.json()["sequences"][0]["canvases"][0]["images"][0]["resource"]["height"]) print("canvases_images_0_ressourceservice@context :", req.json()["sequences"][0]["canvases"][0]["images"][0]["resource"]["service"]["@context"]) print("canvases_images_0_ressourceservice@id :", req.json()["sequences"][0]["canvases"][0]["images"][0]["resource"]["service"]["@id"]) print("canvases_images_0_ressource_service_profile :", req.json()["sequences"][0]["canvases"][0]["images"][0]["resource"]["service"]["profile"]) print("canvases_images_0_ressource_width :", req.json()["sequences"][0]["canvases"][0]["images"][0]["resource"]["width"]) print("canvases_label :", req.json()["sequences"][0]["canvases"][0]["label"]) print("canvases_width :", req.json()["sequences"][0]["canvases"][0]["width"]) print("viewingHint :", req.json()["sequences"][0]["viewingHint"]) print("appartenance :", req.json()["within"])
=> A FAIRE :