CPC.PY
✅ Fait quoi ?
- Récupère les métadonnées de chaque jeu de la collection softwarelibrary_cpc
- Télécharge :
- le ou les fichiers du jeu (
.dsk,.zip, etc.) - la capture d’écran principale (screenshot, cover, etc.)
- le ou les fichiers du jeu (
- Enregistre tout dans un fichier CSV
cpc_software_metadata.csv:- identifiant, titre, description, date, créateur, sujets, URL
- chemins locaux des fichiers et de l’image
📁 Arborescence produite :
📂 cpc_games/ ← Fichiers .dsk, .zip…
📂 screenshots/ ← Captures d’écran (cover, title, etc.)
📄 cpc_software_metadata.csv ← CSV avec métadonnées + chemins locaux
durée du telechargement : 6H

cpc.py
import os
import csv
from internetarchive import search_items, get_item
collection = "softwarelibrary_cpc"
download_dir = "cpc_games"
screenshot_dir = "screenshots"
output_csv = "cpc_software_metadata.csv"
os.makedirs(download_dir, exist_ok=True)
os.makedirs(screenshot_dir, exist_ok=True)
fields = [
"identifier", "title", "description", "date", "creator",
"subject", "url", "local_files", "screenshot_file"
]
allowed_extensions = ['.dsk', '.zip', '.tap', '.tzx', '.img', '.bin']
image_extensions = ['.png', '.jpg', '.jpeg']
with open(output_csv, mode="w", newline="", encoding="utf-8") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fields)
writer.writeheader()
results = search_items(f'collection:{collection}')
for result in results:
identifier = result.get("identifier", "")
print(f"📥 Traitement de : {identifier}")
item = get_item(identifier)
meta = item.metadata
item_files = item.files
filtered_files = [
f["name"] for f in item_files
if any(f["name"].endswith(ext) for ext in allowed_extensions)
]
downloaded_paths = []
if filtered_files:
try:
# Les fichiers seront dans un sous-dossier du nom de l'identifiant
item.download(
destdir=download_dir,
files=filtered_files,
verbose=False
)
downloaded_paths = [
os.path.join(download_dir, identifier, f) for f in filtered_files
]
except Exception as e:
print(f" ❌ Erreur téléchargement fichiers : {e}")
continue
screenshot_path = ""
for file in item_files:
name = file["name"].lower()
if any(name.endswith(ext) for ext in image_extensions) and (
"screenshot" in name or "title" in name or "cover" in name or "thumb" in name
):
try:
# Téléchargement de l'image dans sous-dossier du jeu
item.get_file(file["name"]).download(
destdir=os.path.join(screenshot_dir, identifier),
verbose=False
)
screenshot_path = os.path.join(screenshot_dir, identifier, file["name"])
print(f" 🖼️ Screenshot téléchargée : {file['name']}")
break
except Exception as e:
print(f" ⚠️ Erreur screenshot : {e}")
break
writer.writerow({
"identifier": identifier,
"title": meta.get("title", ""),
"description": meta.get("description", ""),
"date": meta.get("date", ""),
"creator": meta.get("creator", ""),
"subject": "; ".join(meta.get("subject", [])) if isinstance(meta.get("subject"), list) else meta.get("subject", ""),
"url": f"https://archive.org/details/{identifier}",
"local_files": "; ".join(downloaded_paths),
"screenshot_file": screenshot_path
})
print(f"\n✅ Terminé. Jeux dans '{download_dir}', captures dans '{screenshot_dir}', CSV : '{output_csv}'")
Arnold