Diğer Veri Kazıyıcılara Sorgular
await this.parser.request(parser, preset, overrideParams, query)
await this.parser.request(parser, preset, overrideParams, query)
Başka bir veri kazıyıcıdan (yerleşik veya başka bir JS veri kazıyıcı) sonuçların alınması, argüman olarak şunlar belirtilir:
parser- veri kazıyıcı adı (SE::Google, JS::Custom::Example)preset- çağrılan veri kazıyıcının ayar presetioverrideParams- çağrılan veri kazıyıcının ayarlarını geçersiz kılmak için hashquery- sorgu
preset parametresi ile belirtilen çağrılan veri kazıyıcının presetini kısmen yoksayar. Özellikle useproxy, proxyChecker, proxybannedcleanup ayarları, await this.parser.request çağrısını yapan veri kazıyıcıdan alınır.
overrideParams içinde çağrılan veri kazıyıcının parametreleri geçersiz kılınabilir, ayrıca şu bayraklar mevcuttur:
overrideParams.resultArraysWithObjects
resultArraysWithObjects: 0 - çağrılan veri kazıyıcının sonuç dizilerinin hangi biçimde döndürüleceğini belirler:
- eğer etkinse (1) - nesne dizileri döndürülür
[{link: 'link1', anchor: 'anchor1'}, {link: 'link2', anchor: 'anchor2'}, ...] - eğer devre dışıysa (0) - standart değer dizileri döndürülür
['link1', 'anchor1', 'link2', 'anchor2', ...]
Örnek:
import { BaseParser } from 'a-parser-types';
class JS_DocExample extends BaseParser {
static defaultConf: typeof BaseParser.defaultConf = {
results_format: "$links.format('$link\n')",
results: {
arrays: {
links: ['Links', [
['link', 'link']
]]
}
}
}
async parse(set, results) {
let response = await this.parser.request('SE::Google', 'default', {
resultArraysWithObjects: 1,
pagecount: 1
}, set.query)
results.success = response.success;
if(response.success) {
response.serp.forEach(element => {
results.links.push(element.link);
});
}
return results;
}
}
Sonuç örneği:
https://www.speedtest.net/
https://www.investopedia.com/terms/t/t-test.asp
https://www.cdc.gov/coronavirus/2019-ncov/testing/diagnostic-testing.html
https://fast.com/
https://www.thinkwithgoogle.com/feature/testmysite/
https://projectstream.google.com/speedtest
https://www.nhs.uk/conditions/coronavirus-covid-19/testing/
https://www.fda.gov/consumers/consumer-updates/coronavirus-disease-2019-testing-basics
https://zoom.us/test
https://www.gov.uk/get-coronavirus-test
https://en.wikipedia.org/wiki/Test_(assessment)
...
overrideParams.needData
needData: 1 - yanıtta data/pages[] bilgisinin iletilip iletilmeyeceğini (1 veya 0) belirler, optimizasyon için kullanılabilir
overrideParams.needResults
needResults: [ ... ] - döndürülmesi gereken sonuçların listesi.
Örnek:
let response = await this.parser.request('SE::Bing', 'default', {
needResults: [
'totalcount'
]
}, set.query)
Sonuç:
{"success":1,"info":{"success":1,"retries":0},"totalcount":"2130000000"}
API::Server::Redis için de benzer şekilde çalışıroverrideParams.skipProxySettingsInheritance
skipProxySettingsInheritance: 0 - bu seçenek, çağrılan veri kazıyıcı için useproxy parametresinin devralınmasını devre dışı bırakmaya olanak tanır
Paket modunu destekleyen veri kazıyıcılara yapılan sorgular
Ayrıca paket modunda çalışan veri kazıyıcılara erişim de desteklenmektedir. Bunun için query kısmında ['key1', 'key2', ...] şeklinde bir sorgu dizisi iletilmelidir.
Çağrılan veri kazıyıcı tarafından işleme sonucu bulkResults dizisinde yer alacaktır, aşağıda böyle bir dizi örneği verilmiştir:
{
"bulkResults": [
{
"success": 1,
"someArrayResult": [...],
"someFlatResult": '...',
"query": "key1",
"data": "..."
},
{
"success": 1,
"someArrayResult": [...],
"someFlatResult": '...',
"query": "key2",
"data": "..."
},
{
"success": 1,
"someArrayResult": [...],
"someFlatResult": '...',
"query": "key3",
"data": "..."
}
],
"success": 1,
"info": {
"success": 1,
"retries": 1
}
}
Paket modunda başka bir veri kazıyıcıya erişim örneği
import { BaseParser } from 'a-parser-types';
export class JS_Example_BulkQueries extends BaseParser {
static defaultConf: typeof BaseParser.defaultConf = {
version: '1.0.0',
results: {
flat: [
['views', 'Views count per month']
]
},
results_format: "$query: $views\\n",
SE_Yandex_Direct_Frequency_preset: 'default',
bulkQueries: 10 // "paket" içindeki sorgu sayısını belirliyoruz
};
static editableConf: typeof BaseParser.editableConf = [
['SE_Yandex_Direct_Frequency_preset', ['combobox', 'SE::Yandex::Direct::Frequency preset']]
];
async parse(set, results) {
const { success, bulkResults } = await this.parser.request(
'SE::Yandex::Direct::Frequency',
this.conf.SE_Yandex_Direct_Frequency_preset,
{ useAccounts: 1 },
set.bulkQueries.map((el) => el.query) // set.bulkQueries nesne dizisini [query1, query2, ... query10] biçimindeki bir diziye dönüştürüyoruz[query1, query2, ... query10]
);
if(success) {
// results.bulkResults içindeki sonuçları dolduruyoruz
for(let query_number = 0; query_number < set.bulkQueries.length; query_number++) {
results.bulkResults[query_number].views = bulkResults[query_number].views;
results.bulkResults[query_number].success = bulkResults[query_number].success;
}
}
return results;
}
}