· 7 years ago · Oct 18, 2018, 03:44 PM
1const db = 'results/test2.sqlite';
2
3class Parser {
4 constructor() {
5 this.defaultConf = {
6 version: '0.1.189',
7 results: {
8 flat: [
9 ['bookname', 'Book Name'],
10 ['author', 'Book Author'],
11 ['image', 'Book Image'],
12 ['description', 'Book Description'],
13 ['isbn', 'Book Isbn'],
14 ['genre', 'Book Genre'],
15 ['url', 'Book Url'],
16
17 ],
18 arrays: {
19 serp: ['Top1 list', [[ 'snippet', 'Snippet' ]]],
20 }
21 },
22 results_format: "$bookname : $serp.format('$snippet\\n')",
23 SE_DuckDuckGo_preset: 'default',
24 };
25
26 }
27 /*ЕÑли в бд нет таблиц, то Ñоздаем их, также еÑли в таблице currencies нет запиÑей то добавлÑем их*/
28 init() {
29
30 tools.sqlite.run(db, `CREATE TABLE IF NOT EXISTS books(
31 id INTEGER PRIMARY KEY AUTOINCREMENT,
32 book TEXT,
33 author TEXT,
34 image TEXT,
35 description TEXT,
36 date TEXT,
37 isbn TEXT,
38 genre TEXT,
39 url TEXT,
40 snippets TEXT,
41 titles TEXT
42 )`);
43
44 }
45//
46 *parse(set, results) {
47 let response = yield this.request('GET', set.query, {}, {
48 check_content: ['<\/html>'],
49 decode: 'auto-html',
50 headers: {'user-agent': 'Google bot'}
51
52 });
53 this.logger.put("Содержимое урла: " + set.query);
54 if(response.success) {
55 let bookname = response.data.match(/<h1 class="book-header.*">(.+?)<\/h1>/);
56 let author = response.data.match(/<span class="book-header-2-subtitle-author" .*>(.+?)<\/span>/);
57 let image = response.data.match(/<img class="img-shadow".*src="(.+?)" \/>/);
58 let description = response.data.match(/<div class="acortar">(.+?)<\/div>/);
59 let date = response.data.match(/<li><span class="light">Año edición:<\/span>(.+?)<\/li>/);
60 let isbn = response.data.match(/<span class="light">ISBN:<\/span>(.+?)<\/li>/);
61 let genre = response.data.match(/matericosHijoBreadcrumb0">(.+?)<p/);
62 let url = set.query.match(/casadellibro.com\/(.+?)\//);
63
64
65
66 // this.logger.put("Содержимое тега h1: " + title[1]);
67 results.bookname = bookname[1].toLowerCase();;
68 results.author = author[1];
69 results.image = image[1];
70 results.description = description[1];
71 results.date = date[1];
72 results.isbn = isbn[1];
73 results.genre = genre[1];
74 results.url = url[1];
75 }
76
77 let result = yield this.parser.request('SE::DuckDuckGo', this.conf.SE_DuckDuckGo_preset, { //Указываем преÑет
78 pagecount: 1, //задаем через override одну Ñтраницу
79 }, results.bookname);
80 let str = "";
81 let str2 = "";
82
83 if(result.info.success) {
84 this.logger.put("Длина маÑÑива: " + result.serp.length);
85
86 for(let i = 0 ; i < result.serp.length ; i +=1){
87 this.logger.put("ЗапиÑаны Ñтроки " + result.serp[i] + result.serp[i+1] + result.serp[i+2]);
88 results.serp.push(result.serp[i]);
89
90 str = str + "\n" + result.serp[i+1] ;
91 str = str.replace(/^\n/, '');
92
93 str2 = str2 + "\n" + result.serp[i+2] ;
94 str2 = str2.replace(/^\n/, '');
95 }
96 this.logger.put("ЗапиÑаны Ñтроки " + str + str2);
97
98 results.success = result.info.success;
99 }
100 tools.sqlite.run(db,'INSERT into books(book,author,image,description,date,isbn,genre,url,snippets,titles) VALUES(?,?,?,?,?,?,?,?,?,?)',results.bookname, results.author, results.image, results.description, results.date, results.isbn, results.genre, results.url, str ,str2)
101 return results;
102 }
103
104}