Förfrågningar till andra scrapers
await this.parser.request(parser, preset, overrideParams, query)
await this.parser.request(parser, preset, overrideParams, query)
Hämta resultat från en annan scraper (inbyggd eller en annan JS-scraper), som argument anges
parser- namnet på scrapern (SE::Google, JS::Custom::Example)preset- inställningsmall för den anropade scrapernoverrideParams- hash med åsidosättningar av inställningar för den anropade scrapernquery- fråga
Ignorerar delvis inställningsmallen för den anropade scrapern som anges med parametern preset. Specifikt hämtas inställningarna useproxy, proxyChecker, proxybannedcleanup från den scraper som anropar await this.parser.request.
I overrideParams kan man åsidosätta parametrar för den anropade scrapern, även följande flaggor är tillgängliga:
overrideParams.resultArraysWithObjects
resultArraysWithObjects: 0 - definierar i vilket format den anropade scraperns resultatmatriser ska returneras:
- om aktiverad (1) - matriser med objekt returneras
[{link: 'link1', anchor: 'anchor1'}, {link: 'link2', anchor: 'anchor2'}, ...] - om inaktiverad (0) - standardmatriser med värden returneras
['link1', 'anchor1', 'link2', 'anchor2', ...]
Exempel:
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;
}
}
Exempel på resultat:
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 - definierar om data/pages[] ska skickas (1) eller inte (0) i svaret, kan användas för optimering
overrideParams.needResults
needResults: [ ... ] - lista över resultat som behöver returneras.
Exempel:
let response = await this.parser.request('SE::Bing', 'default', {
needResults: [
'totalcount'
]
}, set.query)
Resultat:
{"success":1,"info":{"success":1,"retries":0},"totalcount":"2130000000"}
Fungerar på samma sätt för
API::Server::Redis
overrideParams.skipProxySettingsInheritance
skipProxySettingsInheritance: 0 - detta alternativ gör det möjligt att inaktivera arv av parametern useproxy för den anropade scrapern
Förfrågningar till scrapers som stöder paketläge
Det finns även stöd för att anropa scrapers som arbetar i paketläge. För att göra detta måste en matris med frågor av typen ['key1', 'key2', ...] skickas i query.
Resultatet av bearbetningen från den anropade scrapern kommer att finnas i matrisen bulkResults, nedan visas ett exempel på en sådan matris:
{
"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
}
}
Exempel på anrop till en annan scraper i paketläge
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 // ställer in antalet frågor i "paketet"
};
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) // omvandlar matrisen med objekt set.bulkQueries till en matris av typen [query1, query2, ... query10]
);
if(success) {
// fyller i resultaten i results.bulkResults
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;
}
}