他のスクレイパーへのリクエスト
await this.parser.request(parser, preset, overrideParams, query)
await this.parser.request(parser, preset, overrideParams, query)
他のスクレイパー(組み込みまたは別のJSスクレイパー)から結果を取得します。引数として以下を指定します:
parser- スクレイパー名 (SE::Google, JS::Custom::Example)preset- 呼び出されるスクレイパーの設定プリセットoverrideParams- 呼び出されるスクレイパーの設定をオーバーライドするハッシュquery- クエリ
preset パラメータで指定された、呼び出されるスクレイパーのプリセットを部分的に無視します。具体的には、useproxy、proxyChecker、proxybannedcleanup の設定は、await this.parser.request を呼び出す側のスクレイパーから取得されます。
overrideParams では、呼び出されるスクレイパーのパラメータを上書きできます。また、以下のフラグも利用可能です:
overrideParams.resultArraysWithObjects
resultArraysWithObjects: 0 - 呼び出されるスクレイパーの結果配列をどのような形式で返すかを定義します:
- 有効(1)の場合 - オブジェクトの配列が返されます
[{link: 'link1', anchor: 'anchor1'}, {link: 'link2', anchor: 'anchor2'}, ...] - 無効(0)の場合 - 標準的な値の配列が返されます
['link1', 'anchor1', 'link2', 'anchor2', ...]
例:
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;
}
}
結果の例:
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 - レスポンスに data/pages[] を含めるか(1)、含めないか(0)を定義します。最適化に使用できます。
overrideParams.needResults
needResults: [ ... ] - 返す必要がある結果のリストです。
例:
let response = await this.parser.request('SE::Bing', 'default', {
needResults: [
'totalcount'
]
}, set.query)
結果:
{"success":1,"info":{"success":1,"retries":0},"totalcount":"2130000000"}
ヒント
API::Server::Redis でも同様に動作しますoverrideParams.skipProxySettingsInheritance
skipProxySettingsInheritance: 0 - このオプションを使用すると、呼び出されるスクレイパーに対する useproxy パラメータの継承を無効にできます。
パケットモードをサポートするスクレイパーへのリクエスト
パケットモードで動作するスクレイパーへの呼び出しもサポートされています。これを行うには、query に ['key1', 'key2', ...] のようなクエリの配列を渡す必要があります。
呼び出されたスクレイパーによる処理結果は bulkResults 配列に含まれます。以下はそのような配列の例です:
{
"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
}
}
パケットモードでの他のスクレイパーへの呼び出し例
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 // パケット内のクエリ数を設定
};
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 を [query1, query2, ... query10] 形式の配列に変換[query1, query2, ... query10]
);
if(success) {
// 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;
}
}