Benutzer:Patrick Oberdoerfer/ZUM-Apps und H5P/Flashcards schneller erstellen/: Unterschied zwischen den Versionen

Aus ZUM Projektwiki
(Inhalt eingefügt)
 
K (Der Seiteninhalt wurde durch einen anderen Text ersetzt: „== H5P Python-Kopierer (hier Flashcards) == Noch im Aufbau!!!“)
Markierungen: Ersetzt 2017-Quelltext-Bearbeitung
 
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''Anwendungsfall:''' Sie haben eine Zeichnung oder ein Bild und stellen dazu unterschiedliche Fragen.
== H5P Python-Kopierer (hier Flashcards) ==


'''Problem:''' Eine angelegte Karte kann nicht einfach dupliziert werden. Diese Funktion ist leider in diesem Inhaltstypen nicht verfügbar.
Noch im Aufbau!!!
 
'''Idee und Lösung:''' Mit einem Python-Skript eine Kartenvorlage beliebig oft kopieren lassen. Dabei werden auch die Metadaten und Quellen übernommen. So spart man sich viel Zeit bei der Erstellung von OER-Content.
 
Oder hier der Dialog mit ChatGPT
[[Datei:Screenshot Python GPT.png|alternativtext=Dialog mit Python GPT|links|gerahmt|Dialog mit Python GPT]]
 
 
'''Welche Software wird gebraucht?'''
 
Python und H5P-Editor
 
'''Anleitung:'''
 
 
'''Hier das Skript:'''<syntaxhighlight lang="python3">
import zipfile
import json
import os
import shutil
 
# Funktion zum Vervielfältigen der Flashcards
def duplicate_flashcards(content_data, num_duplicates=10):
    original_card = content_data['dialogs'][0]  # Originale Karte
    for i in range(num_duplicates):
        # Dupliziere die Karte
        new_card = original_card.copy()
        new_card['text'] = f'<p style="text-align: center;"><strong>Bauteile {i+2}</strong></p>\n'
        new_card['answer'] = f'<p style="text-align: center;">Vertikalrahmen {i+2}</p>\n'
        content_data['dialogs'].append(new_card)
    return content_data
 
# Pfade zur Original-H5P-Datei und zum Extraktionsort
h5p_file_path = 'interactive-content-35394.h5p'
extract_path = 'h5p_extract/'
 
# Extrahiere die H5P-Datei
with zipfile.ZipFile(h5p_file_path, 'r') as zip_ref:
    zip_ref.extractall(extract_path)
 
# Pfad zur content.json und Bilderordner
content_json_path = os.path.join(extract_path, 'content', 'content.json')
with open(content_json_path, 'r', encoding='utf-8') as json_file:
    content_data = json.load(json_file)
 
# Flashcards vervielfältigen (z.B. 10 mal)
updated_content_data = duplicate_flashcards(content_data, num_duplicates=10)
 
# Speichere die aktualisierte content.json
with open(content_json_path, 'w', encoding='utf-8') as json_file:
    json.dump(updated_content_data, json_file, ensure_ascii=False, indent=4)
 
# Nur die erlaubten Dateien (JSON, Bilder) in die neue H5P-Datei packen
def zipdir(path, ziph):
    # Gehe durch alle Dateien und füge nur zulässige Dateitypen hinzu
    allowed_extensions = ['.json', '.png', '.jpg', '.jpeg', '.gif', '.bmp', '.tif', '.tiff', '.svg',
                          '.eot', '.ttf', '.woff', '.woff2', '.otf', '.webm', '.mp4', '.ogg', '.mp3',
                          '.m4a', '.txt', '.pdf', '.rtf', '.doc', '.docx', '.xls', '.xlsx', '.ppt',
                          '.pptx', '.odt', '.ods', '.odp', '.xml', '.csv', '.diff', '.patch', '.swf',
                          '.md', '.textile', '.wav', '.gltf', '.glb']
   
    for root, dirs, files in os.walk(path):
        for file in files:
            if any(file.endswith(ext) for ext in allowed_extensions):
                file_path = os.path.join(root, file)
                ziph.write(file_path, os.path.relpath(file_path, path))
 
# ZIP die erlaubten Dateien in eine neue H5P-Datei
output_h5p_file = 'duplicated_flashcards_fixed.h5p'
with zipfile.ZipFile(output_h5p_file, 'w') as zipf:
    zipdir(extract_path, zipf)
 
print(f'H5P-Datei erstellt: {output_h5p_file}')
 
</syntaxhighlight>
 
 
Bei der Erstellung kamen zum Einsatz:
 
Python GPT via ChatGPT
 
Python 3.13 (64-bit)
 
H5P-Editor

Aktuelle Version vom 7. November 2024, 07:20 Uhr

H5P Python-Kopierer (hier Flashcards)

Noch im Aufbau!!!