Initial commit
This commit is contained in:
88
Crowdanki/crowdanki.py
Normal file
88
Crowdanki/crowdanki.py
Normal file
@@ -0,0 +1,88 @@
|
||||
import json
|
||||
import hashlib
|
||||
|
||||
path="Schwedisch_Goetheverlag"
|
||||
|
||||
base91chars = (
|
||||
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
|
||||
'0123456789!#$%&()*+,-./:;<=>?@[]^_`{|}~'
|
||||
)
|
||||
|
||||
def anki_guid(text: str) -> str:
|
||||
# SHA1-Hash des Front-Felds berechnen
|
||||
h = hashlib.sha1(text.encode('utf-8')).digest()
|
||||
x = int.from_bytes(h[:8], 'little') # Anki nimmt die ersten 8 Bytes, little-endian
|
||||
|
||||
# Kodierung in Base91-Zeichenkette (10 Zeichen)
|
||||
chars = []
|
||||
for _ in range(10):
|
||||
chars.append(base91chars[x % len(base91chars)])
|
||||
x //= len(base91chars)
|
||||
|
||||
return ''.join(chars)
|
||||
|
||||
with open(path+'/deck.json', 'r', encoding='utf-8') as f:
|
||||
data = json.load(f)
|
||||
|
||||
|
||||
original_notes = data['notes']
|
||||
new_notes = []
|
||||
existing_signatures = set()
|
||||
existing__notemodels = []
|
||||
for i in data['note_models']:
|
||||
existing__notemodels.append(i['crowdanki_uuid'])
|
||||
|
||||
for note in original_notes:
|
||||
fields = note['fields']
|
||||
note_model_uuid = note['note_model_uuid']
|
||||
if len(fields) < 3:
|
||||
continue
|
||||
|
||||
original_front = fields[0] # "ich"
|
||||
original_back = fields[1] # "jag"
|
||||
original_back_audio = fields[2] # "[sound:Jag-4718d0.mp3]"
|
||||
original_front_uuid = note_model_uuid
|
||||
new_uuid = None
|
||||
new_note = None
|
||||
|
||||
if original_front_uuid == existing__notemodels[0]:
|
||||
# Original:
|
||||
# Deutsch (Front)
|
||||
# Sverige (Back)
|
||||
# Audio (Backaudio)
|
||||
# Neu:
|
||||
# Sverige (Front)
|
||||
# Audio (Frontaudio)
|
||||
# Deutsch (Back)
|
||||
|
||||
new_note = {
|
||||
"__type__": "Note",
|
||||
"fields": [
|
||||
original_back,
|
||||
original_back_audio,
|
||||
original_front
|
||||
],
|
||||
"guid": f"{anki_guid(original_back)}",
|
||||
"note_model_uuid": existing__notemodels[1],
|
||||
"tags": []
|
||||
}
|
||||
new_notes.append(new_note)
|
||||
|
||||
# new_note = {
|
||||
# "__type__": "Note",
|
||||
# "fields": [
|
||||
# original_front,
|
||||
# original_front_audio,
|
||||
# original_back
|
||||
# ],
|
||||
# "guid": f"{anki_guid(original_front)}",
|
||||
# "note_model_uuid": note_model_uuid[1]
|
||||
# }
|
||||
# new_notes.append(new_note)
|
||||
# print(new_note
|
||||
|
||||
|
||||
data['notes'].extend(new_notes)
|
||||
|
||||
with open(path+'/crowdanki_export_dupliziert.json', 'w', encoding='utf-8') as f:
|
||||
json.dump(data, f, ensure_ascii=False, indent=2)
|
||||
Reference in New Issue
Block a user