slavetto / anki-cards-web-browser

Vad är detta?

Detta dokument förklarar hur bearbetningen av apkg-arkiven ska fungera.

Strukturen för .apkg-filer

Anki .apkg-filerna är bara zip-arkiv som innehåller följande filer:

  • collection.anki2:
  • Filer som heter 1,2,3,4…: Bilderna som korten använder
  • media: En json-fil som innehåller mappningar mellan bilderna och deras ursprungliga namn (t.ex. fil 1 heter i själva verket latex-96c15f8a1af25e7a2eec64f7c6fedafe12363352.png i korten).

Strukturen för collection.anki2

Detta är den faktiska databasen som innehåller alla anteckningar och annan användbar information som vi kommer att använda för att generera tittaren. Det finns en mycket detaljerad guide om vad exakt databasen innehåller.I det här dokumentet kommer vi bara att beskriva vad vi behöver hämta från databasen för att generera tittaren.

Hämtning av anteckningar

Anteckningarna lagras i tabellen notes. De kolumner som vi behöver från den tabellen är:

  • id: Anteckningens unika identifierare
  • mid: ID för kortmodellen (beskrivs senare hur man får fram det)
  • tags: De taggar som är kopplade till anteckningen
  • fld: Fälten för anteckningen. Detta måste matas in i kortmodellen för att generera korten.Det innehåller alla fält, separerade med tecknet 0x1f (31). Ordningen på fälten är exakt den som presenteras i notisens modell.

Hämta kortmodeller

För att kunna generera korten från notiserna måste vi hämta kortmodellen. Modellen talar om hur många kort som måste genereras från en enda anteckning, vilken HTML som omger anteckningen och hur fälten i notes.fld måste presenteras.

Modellen finns i kolumnen models i tabellen col. Observera att tabellen col alltid endast innehåller enregistrering. Modellen lagras i ett JSON-format; detta är ett exempel på hur en modells JSON med två modeller ser ut:

{ "1471435193999": { "vers": , "name": "Istruzioni Assembly", "tags": , "did": 1493040141981, "usn": 625, "req": ], ] ], "flds": , "sticky": false, "rtl": false, "ord": 0, "font": "Arial", "size": 20 }, { "name": "Descrizione", "media": , "sticky": false, "rtl": false, "ord": 1, "font": "Arial", "size": 20 }, { "name": "Architettura", "media": , "sticky": true, "rtl": false, "ord": 2, "font": "Arial", "size": 20 } ], "sortf": 0, "tmpls": , "mod": 1493150692, "latexPost": "\end{document}", "type": 0, "id": "1471435193999", "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n", "latexPre": "\documentclass{article}\n\special{papersize=3in,5in}\n\usepackage{inputenc}\n\usepackage{amssymb,amsmath}\n\pagestyle{empty}\n\setlength{\parindent}{0in}\n\begin{document}\n" }, "1471435194000": { "vers": , "name": "Base (default)", "tags": , "did": 1492955368330, "usn": 668, "req": ] ], "flds": , "sticky": false, "rtl": false, "ord": 0, "font": "Arial", "size": 20 }, { "name": "Retro", "media": , "sticky": false, "rtl": false, "ord": 1, "font": "Arial", "size": 20 } ], "sortf": 0, "tmpls": , "mod": 1494091839, "latexPost": "\end{document}", "type": 0, "id": 1471435194000, "css": ".card {\n font-family: Arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\nimg {\n vertical-align: middle;\n padding-bottom: 7px;\n padding-right: 6px;\n padding-left: 6px\n}", "latexPre": "\documentclass{article}\n\special{papersize=3in,5in}\n\usepackage{inputenc}\n\usepackage{amssymb,amsmath}\n\pagestyle{empty}\n\setlength{\parindent}{0in}\n\begin{document}\n" }}

I samma URL som nämndes tidigarefinns en mycket bra beskrivning av vad varje fält i modellen gör. Här beskrivs endast de som vi behöver för att skapa kortbläddraren.

I objektets rot finns en "1471435193999"-nyckel. Den nyckeln är id för den modellen.Detta nämns i kolumnen mid i tabellen notes.

Inom det objektet finns en array med nyckeln "flds". Denna array innehåller de fält som korten anger när de skapar anteckningar. Vanligtvis finns det bara fälten ”Front” och ”Rear”, men beroende på modellen är det möjligt att ha fler olika fält. Som tidigare nämnts lagrar noterna denna information i kolumnen notes.fld; fälten i kolumnen är i samma ordning som fältdefinitionerna i denna matris.

Objektet "tmpls" innehåller mallar för noterna och ger information om kortets HTML-struktur. Modeller som definierar flera mallar genererar flera kort, ett för varje mall. Detta objekt har två viktiga fält:

  • "qfmt": HTML för kortets framsida
  • "afmt": HTML för kortets baksida
  • "ord": Mallens position i arrayen "tmpls". Detta används av tabellen cards för att identifiera den mall som genererade kortet.

Dessa fält kan innehålla {{placeholders}} som måste ersättas med värdena för de fält som korten lagrar i notes.fld. Sambandet mellan fältposition och fältnamn är detsamma som för objekten i "flds". Observera att "afmt" kan innehålla en särskild platshållare som kallas {{FrontSide}}; detta är bara ett praktiskt sätt att visa kortets innehåll utan att behöva kopiera & klistra in innehållet i "qfmt" när man skapar kortmodeller.

Det sista fältet av vårt intresse är "css"; det innehåller den CSS-kod som måste tillämpas på kortet.

Hämtning av däckinformation

Informationen om de däck som finns i arkivet lagras i col.decks-kolumnen iJSON-format. Här är ett exempel på JSON:

{ "1": { "desc": "", "name": "Predefinito", "extendRev": 50, "usn": 0, "collapsed": false, "newToday": , "timeToday": , "dyn": 0, "extendNew": 10, "conf": 1, "revToday": , "lrnToday": , "id": 1, "mod": 1494099120 }, "1493040141981": { "extendRev": 50, "collapsed": false, "newToday": , "timeToday": , "dyn": 0, "extendNew": 10, "conf": 1, "revToday": , "lrnToday": , "id": 1493040141981, "mod": 1494073733, "name": "Universit\u00e0 - Calcolatori::Assembly", "usn": 661, "browserCollapsed": true, "mid": 1471435194000, "desc": "" }, "1492955368330": { "extendRev": 50, "collapsed": false, "newToday": , "timeToday": , "dyn": 0, "extendNew": 10, "conf": 1, "revToday": , "lrnToday": , "id": 1492955368330, "mod": 1494095504, "name": "Universit\u00e0 - Calcolatori", "usn": 671, "browserCollapsed": true, "mid": 1471435194000, "desc": "" }}

Vissa fält som bör noteras:

  • id: Unikt id för spelet. Id används i tabellen cards, i kolumnen did för att specificera associationerna mellan kort och däck (förklaras senare). Observera att standardleken alltid har id 1.
  • name: Spelets namn. Om det finns underordnade däck kommer namnet att vara i formatet ”Parent deck name::Child deck name”

Hämtning av kort

Informationen om kort lagras i tabellen cards. De kolumner som vi behöver från den tabellen är:

  • id: unik identifierare för kortet
  • nid: id för den anteckning som genererade det här kortet
  • did: id-identifierare för det kortspel där det här kortet finns
  • ord: positionen för mallen för modellen; den matchar mallens ord fält.

Strukturen för mediefilen

media är en JSON-fil som associerar bildernas kodnamn med deras ursprungliga namn. Observera att alla kortfält kan innehålla bilder, men bilderna är länkade med sitt fullständiga namn.Under skapandet av .apkg-filen komprimerar Anki bildernas namn (i själva verket döps de bara om med progressiva nummer), men korten fortsätter att hänvisa till det ursprungliga namnet. Syftet med media-filen är att göra det möjligt för oss att översätta numeriska namn i bildernas originalnamn.

Strukturen i media är ganska enkel:

Lämna en kommentar