shenjian对象是一个全局对象,主要提供一些与网多云平台相关的函数。
readSource
function readSource(sourceId, query, fetchType, size) |
@param整数sourceId数据源ID
@paramStringqueryGraphQL的query查询语句,参考query语法说明
@param枚举fetchType读取数据的方式,默认值FetchType.ITERATOR。可选值如下:FetchType.ITERATOR- 以迭代器的方式获取数据;FetchType.ONE- 仅获取一条数据;FetchType.MANY- 获取多条数据,参数size指定要获取的条数;FetchType.ALL- 获取所有数据,最多获取1000条,超过1000条请选择使用迭代器方式获取。
@param整数size获取数据条数,配合FetchType.MANY使用。
@returnfetchType为FetchType.ITERATOR时,返回一个数据迭代器对象source,该对象提供next和nextBatch方法来遍历数据;fetchType为FetchType.ONE时,返回获取的单条数据;fetchType为FetchType.MANY时,返回指定条数的数据;fetchType为FetchType.ALL时,返回全部数据,最多返回1000条。
该函数提供读取网多云平台上数据源的能力,通过返回的迭代器对象source来遍历数据。内部实现是封装了GraphQL。
source.next
function next() |
@returnJS对象读取到的下一条数据。没有下一条数据时,返回undefined作为结束的判断;异常(如超时)时,返回null,一般需要重试。
source.nextBatch
function nextBatch(size) |
@paramIntegersize批量获取数据的条数
@returnJS对象数组读取到的数据数组。没有下一条数据时,返回undefined作为结束的判断;异常(如超时)时,返回null,一般需要重试。
注意:
此函数虽然提供了size参数,但是实际返回的数据条数仍然受套餐限制,频率不限,条数限制参考GraphQL调用限制
示例代码片段:(在initCrawl中读取数据源的数据并生成scanUrl)var sourceId = 14566;//此ID需要修改为您自己的数据源ID
//GraphQL查询语句,查询"city"值为"北京"的所有数据的"shop_id"字段
var query = 'source(city:{eq:"北京"}){data{shop_id}}';
var src = shenjian.readSource(sourceId, query);
configs.initCrawl = function(site) {
if (src) {
// 调用"src"的"nextBatch"函数
// 得到包含10条"shop_id"的JS对象数组
// "shops"的值是:
// [{"shop_id":"10041553"},{"shop_id":"10036329"}]
var shops = src.nextBatch(10);
for (var s in shops) {
var shopId = shops[s].shop_id;
var scanUrl = "https://shop-"+shopId+".example.com/";
site.addScanUrl(scanUrl);
}
}
};
示例代码片段:(判断数据源中是否存在满足条件的数据)var shop = shenjian.readSource(14566,
'source(city:{eq:"北京"}){data{shop_id,shop_name}}',
FetchType.ONE);
if (shop) {
//存在
} else {
//不存在
}