// This program looks up words fromm Wiktionary, and creates Anki flashcards // from them. package main import ( "log" "net/http" "os" "time" _ "github.com/mattn/go-sqlite3" ) const ( rawDictionary = "/home/david/work/french-wiktionary-flashcards/raw-wiktextract-data.jsonl" dictionary = "/home/david/work/french-wiktionary-flashcards/raw-wiktextract-data.sqlite3" apiURL = "http://localhost:8765" deckName = "Français" modelName = "Basic-830ae" ) type addNote struct { Action string `json:"action"` Version int `json:"version"` Params addNoteParams `json:"params"` } type addNoteParams struct { Note note `json:"note"` } type note struct { DeckName string `json:"deckName"` ModelName string `json:"modelName"` // Fields will not be trivial to generalize Fields fields `json:"fields"` Options options `json:"options"` } type fields struct { Front string `json:"Front"` Back string `json:"Back"` } type options struct { AllowDuplicate bool `json:"allowDuplicate"` DuplicateScope string `json:"duplicateScope"` } func main() { db, err := setupDatabase() if err != nil { log.Fatalf("setting up database: %s", err) } defer db.Close() // We're going to start this app very simply! The first iteration will take // a word as its first command-line argument. We will search for the word in // the dictionary and create a new Anki card using the first exact match. // // In the future, we may make it easy for the user to edit cards (flag?), // and possibly implement a TUI to choose definitions more interactively as // well (e.g. search with partial matches). // // I would also like to make more things less hard-coded. if len(os.Args) < 2 { log.Fatalf("no word was provided") } word := os.Args[1] var definition string row := db.QueryRow(`select definition from words where word = ? limit 1`, word) err = row.Scan(&definition) if err != nil { log.Fatalf("looking up '%s': %s", word, err) } c := http.DefaultClient c.Timeout = 5 * time.Second if err := addCard(c, word, definition); err != nil { log.Fatalf("creating card: %s", err) } }