-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.js
More file actions
129 lines (101 loc) · 3.7 KB
/
Copy pathmain.js
File metadata and controls
129 lines (101 loc) · 3.7 KB
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
const stringify = require("csv-stringify");
const rp = require("request-promise-native"),
fs = require('fs'),
_ = require('lodash'),
{ convertArrayToCSV } = require('convert-array-to-csv'),
QURAN_URL = 'https://api.quran.com/api/v4/verses/by_page/',
QURAN_TOTAL_PAGES = 604,
AUDIO_BASE_URL = "https://audio.qurancdn.com/",
CSV_HEADER = ["'Page Number'", "'Arabic Word'", "'English Word'", "'URL to Arabic Audio'", "'Verse'"],
JSON_PATH = "pages/json/",
CSV_PATH = "pages/csv/"
let options = {
method: 'GET',
url: QURAN_URL,
qs:
{
per_page: '1000',
page: '1',
word_fields: 'text_uthmani',
words: 'true',
fields: 'text_uthmani',
language: 'en'
},
body: '{}'
};
let missingPages = [485]
//getPages()
function getPages() {
let pagePromises = [];
for (let pageNo = 1; pageNo <= QURAN_TOTAL_PAGES; pageNo++) {
//missingPages.forEach(pageNo=> {
options.url = QURAN_URL + pageNo
let getPage = rp(null, options, (error, response, body) => {
try {
if (error) throw new Error(error);
body = JSON.parse(body)
fs.writeFileSync(JSON_PATH + pageNo, JSON.stringify(body, null, 2))
} catch (err) {
console.error(err)
}
});
pagePromises.push(getPage);
}
//);
Promise.all(pagePromises)
}
//verifyFiles()
function verifyFiles() {
for (let i = 0; i < 605; i++) {
const path = JSON_PATH + i
try {
if (!fs.existsSync(path)) {
console.log(i)
}
} catch (err) {
console.error(err)
}
}
}
iteratePages()
async function iteratePages() {
let pages = [], pagePromises = [];
pages = await fs.promises.readdir(JSON_PATH, (err, files) => { return files })
//let flag = false
pages.forEach(async function (page) {
let csv = []
//Trigger to stop after 1 file
//if (page == "100") flag =true; if(flag) return function(){};
let rawdata = fs.readFileSync(JSON_PATH + page);
let pageJson = JSON.parse(rawdata), juz, hizb, rub, first=true;
let uniqueWords = []
_.each(pageJson.verses, (verse) => {
if(first)
juz = verse.juz_number; hizb = verse.hizb_number; rub = verse.rub_number;first=false;
_.each(verse.words, (word) => {
if(uniqueWords.includes(word.text_uthmani))
return;
uniqueWords.push(word.text_uthmani)
word.audio_url && csv.push( //words without audio are signs for end of ayahs
["'" + page + "'", "'" + word.text_uthmani + "'", "'" + word.translation.text + "'",
"'" + AUDIO_BASE_URL + word.audio_url + "'", "'" + verse.text_uthmani + "'"]);
})
})
let data = convertArrayToCSV(csv, { header: CSV_HEADER, separator: ',' })
await fs.promises.writeFile(CSV_PATH +"Page_"+ page +"_Juz_"+ juz +"_Hizb_"+ hizb +"_Rub_"+ rub + ".csv", data)
});
}
/*
Iterate through the pages and make json files
take a json file and change to csv
add header to csv //use createRow(default) and add to wordArray
initialize base url for audio and array
get page from file name
iterate through verses
iterate through words
if FIRST
wordArray =+ ["Page Number", "Arabic Word", "English Word", "URL to Arabic Audio","Verse"] //move to top
wordArray =+ [nameofFile,word.text_uthmani, word.translation.text, audioBaseUrl + word.audio_url, verse];
write wordArray to new file 'page_##.csv'
**please verify that the csv file works
*/