-
Notifications
You must be signed in to change notification settings - Fork 1
/
createCards.js
108 lines (84 loc) · 2.69 KB
/
createCards.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// reads from "word-sentences" rmq and creates anki card for each pair of words
const request = require('request');
const queueName = 'word-sentences';
const ConsumerClass = require('./class/Consumer');
const consumer = new ConsumerClass(queueName);
const { promisify } = require('util');
const numPrefetch = 1;
let channel;
// constants which will be put into config / env variables or something later
const ankiConnectConfig = {
deckName: 'Spanish Words #1',
modelName: 'Basic (and reversed card) - spanish',
url: 'http://localhost:8765',
};
const spanishDictConfig = {
key: '494e1f0d93abd4cffaa8d5781d05dd9c',
urlPrefix: 'https://audio1.spanishdict.com/audio',
// lang can be 'es' for spain pronunciation, or 'latam' or latin america pronunciation
lang: 'es',
};
const requestPromise = promisify(request).defaults({
json: true,
});
(async () => {
channel = await consumer.initChannel(numPrefetch);
console.log('finished init consumer channel.');
channel.consume(queueName, handleMessage);
})();
async function handleMessage (message) {
console.log('message received');
try {
const messageBody = JSON.parse(message.content.toString()).message;
const ankiBody = createAnkiBody(messageBody);
console.log(ankiBody);
const requestOptions = { json: true, uri: ankiConnectConfig.url, body: ankiBody };
const resp = await requestPromise(requestOptions);
console.log('created card for', messageBody.spanish);
channel.ack(message);
}
catch (err) {
console.log('ERROR', err);
}
}
function createAnkiBody (message) {
const { english, spanish, spanishPronunciationWord, sentences } = message;
const { key, lang } = spanishDictConfig;
const spanishDictAudioUrl = `${spanishDictConfig.urlPrefix}?lang=${lang}&text=${encodeURI(spanishPronunciationWord)}&key=${key}`;
// replaces words of spanish word with underscore ("el nino" => "el_nino")
const audioFileName = `${spanishPronunciationWord.replace(/\ /g, '_')}.mp3`;
function createSentenceFields (sents) {
const fields = {};
sents.forEach((sentence, index) => {
fields[`spanishSentence${index + 1}`] = sentence.spanishSentence;
fields[`englishSentence${index + 1}`] = sentence.englishSentence;
});
return fields;
}
const sentenceFields = createSentenceFields(sentences);
const ankiConnectBody = {
action: 'addNote',
version: 6,
params: {
note: {
deckName: ankiConnectConfig.deckName,
modelName: ankiConnectConfig.modelName,
fields: {
Front: spanish,
Back: english,
...sentenceFields,
},
options: {
allowDuplicate: false,
},
tags: [],
audio: {
url: spanishDictAudioUrl,
filename: audioFileName,
fields: ['Front'],
},
},
},
};
return ankiConnectBody;
}