import json import os def convert_to_iiif_v2(json_data): # Verifica se il file JSON è conforme a IIIF v3.0 if "@context" not in json_data or json_data["@context"] != "http://iiif.io/api/presentation/3/context.json": print("Il file JSON fornito non è conforme a IIIF v3.0.") return None # Creazione di un nuovo oggetto IIIF v2.0 iiif_v2_data = { "@context": "http://iiif.io/api/presentation/2/context.json", "@id": json_data["id"].replace("manifest","manifest2"), "@type": "sc:Manifest", "label": json_data.get("label", "")['it'][0], "sequences": [ { "@id": json_data["id"] + "/sequence/s0", "@type": "sc:Sequence", "canvases": [] } ] } # Conversione delle pagine for canvas in json_data.get("items", []): canvas_id = canvas["id"] canvas_label = canvas.get("label", "") iiif_v2_canvas = { "@id": canvas_id.split('/info.json')[0], "@type": "sc:Canvas", "label": canvas_label['it'][0], "width": canvas["width"], "height": canvas["height"], "images": [ { "@id": canvas_id.split('info.json')[0] + "full/max/0/default.jpg", "@type": "oa:Annotation", "motivation": "sc:painting", "resource": { "@id": canvas_id.split('info.json')[0] + "full/max/0/default.jpg", "@type": "dctypes:Image", "format": "image/jpeg", "service": { "@id": canvas_id.split('/info.json')[0].replace("8183/iiif/3/","8183/iiif/2/"), "@context": "http://iiif.io/api/image/2/context.json", "profile": "http://iiif.io/api/image/2/level1.json" }, "height": canvas["height"], "width": canvas["width"] }, "on": canvas_id } ] } iiif_v2_data["sequences"][0]["canvases"].append(iiif_v2_canvas) return iiif_v2_data def process_directory(directory): for root, dirs, files in os.walk(directory): for file in files: if file == "manifest.json": manifest_path = os.path.join(root, file) output_path = os.path.join(root, "manifest2.json") # Carica il file JSON IIIF v3.0 with open(manifest_path, "r") as manifest_file: json_data = json.load(manifest_file) # Converte in IIIF v2.0 iiif_v2_data = convert_to_iiif_v2(json_data) if iiif_v2_data: # Salva il risultato nel nuovo file JSON IIIF v2.0 with open(output_path, "w") as output_file: json.dump(iiif_v2_data, output_file, indent=2) print(f"Conversione completata per {manifest_path}. Il file IIIF v2.0 è stato salvato in: {output_path}") def main(): current_directory = os.getcwd() for entry in os.listdir(current_directory): if os.path.isdir(entry): process_directory(entry) if __name__ == "__main__": main()