Genel Bakış
Yeni JavaScript API v2, jeneratörlerin yerine async/await kullanımına geçerek çalışmayı basitleştirmeyi amaçlamaktadır. Ayrıca bu API'de önceki sürümün bazı kısıtlamaları giderilmiş, TypeScript desteği eklenmiş ve performans artırılmıştır. Tüm yeni veri kazıyıcılar oluşturulurken bu JavaScript API'sinin kullanılmasını öneriyoruz.
JavaScript API v2 kullanmak için veri kazıyıcı sınıfınızı temel BaseParser sınıfından miras almanız yeterlidir. Bir veri kazıyıcı sınıfının yapısını örnek üzerinden inceleyelim:
- TypeScript
- JavaScript
import { BaseParser } from 'a-parser-types';
export class JS_v2_example extends BaseParser {
static defaultConf: typeof BaseParser.defaultConf = {
version: '0.0.1',
results: {
flat: [
['title', 'Title'],
['h1', 'H1 Header']
],
arrays: {
h2: ['H2 Headers List', [
['header', 'Header'],
]],
}
},
max_size: 2 * 1024 * 1024,
parsecodes: {
200: 1,
},
results_format: "Title: $title\nH1: $h1\nH2 headers:\n$h2.format('$header\\n')\n",
limitH2Tags: 3,
};
static editableConf: typeof BaseParser.editableConf = [
['limitH2Tags', ['textfield', 'Limit H2 tags']],
];
async parse(set, results) {
const { success, data, headers } = await this.request('GET', set.query);
if (success && typeof data == 'string') {
let matches;
if (matches = data.match(/<title[^>]*>(.*?)<\/title>/))
results.title = matches[1];
if (matches = data.match(/<h1[^>]*>(.*?)<\/h1>/))
results.h1 = matches[1];
if (results.h2) {
let count = 0;
const re = /<h2[^>]*>(.*?)<\/h2>/g;
while(matches = re.exec(data)) {
results.h2.push(matches[1]);
if (++count == this.conf.limitH2Tags)
break;
}
}
}
return results;
}
}
const { BaseParser } = require("a-parser-types");
class JS_v2_example_js extends BaseParser {
static defaultConf = {
version: '0.0.1',
results: {
flat: [
['title', 'Title'],
['h1', 'H1 Header']
],
arrays: {
h2: ['H2 Headers List', [
['header', 'Header'],
]],
}
},
max_size: 2 * 1024 * 1024,
parsecodes: {
200: 1,
},
results_format: "Title: $title\nH1: $h1\nH2 headers:\n$h2.format('$header\\n')\n",
limitH2Tags: 3,
};
static editableConf = [
['limitH2Tags', ['textfield', 'Limit H2 tags']],
];
async parse(set, results) {
const { success, data, headers } = await this.request('GET', set.query);
if (success && typeof data == 'string') {
let matches;
if (matches = data.match(/<title[^>]*>(.*?)<\/title>/))
results.title = matches[1];
if (matches = data.match(/<h1[^>]*>(.*?)<\/h1>/))
results.h1 = matches[1];
if (results.h2) {
let count = 0;
const re = /<h2[^>]*>(.*?)<\/h2>/g;
while(matches = re.exec(data)) {
results.h2.push(matches[1]);
if (++count == this.conf.limitH2Tags)
break;
}
}
}
return results;
}
}
TODO: (next) ## Kalıtım
Faydalı bağlantılar
🔗 Dosyayı diske kaydetme örneği
Dosyaların doğrudan diske nasıl kaydedileceğini gösteren örnek
🔗 Oturumlarla (sessions) çalışma örneği
JavaScript veri kazıyıcılarda oturum işlevselliğinin kullanımı
🔗 Verilerin oturuma kaydedilmesi örneği
Oturumda rastgele verilerin saklanabilme özelliğinin gösterimi
🔗 results.addElement() kullanımı
results.addElement() kullanarak veri dizisi doldurma örneği ve normal .push() yönteminden farkının gösterimi