shenjian对象是一个全局对象,主要提供一些与网多云平台相关的函数。
readSource
function readSource(sourceId, query, fetchType, size) |
@param
整数
sourceId
数据源ID
@param
String
query
GraphQL的query查询语句,参考query语法说明
@param
枚举
fetchType
读取数据的方式,默认值FetchType.ITERATOR
。可选值如下:FetchType.ITERATOR
- 以迭代器的方式获取数据;FetchType.ONE
- 仅获取一条数据;FetchType.MANY
- 获取多条数据,参数size
指定要获取的条数;FetchType.ALL
- 获取所有数据,最多获取1000条,超过1000条请选择使用迭代器方式获取。
@param
整数
size
获取数据条数,配合FetchType.MANY
使用。
@return
fetchType为FetchType.ITERATOR
时,返回一个数据迭代器对象source,该对象提供next
和nextBatch
方法来遍历数据;fetchType为FetchType.ONE
时,返回获取的单条数据;fetchType为FetchType.MANY
时,返回指定条数的数据;fetchType为FetchType.ALL
时,返回全部数据,最多返回1000条。
该函数提供读取网多云平台上数据源的能力,通过返回的迭代器对象source
来遍历数据。内部实现是封装了GraphQL。
source.next
function next() |
@return
JS对象
读取到的下一条数据。没有下一条数据时,返回undefined
作为结束的判断;异常(如超时)时,返回null
,一般需要重试。
source.nextBatch
function nextBatch(size) |
@param
Integer
size
批量获取数据的条数
@return
JS对象数组
读取到的数据数组。没有下一条数据时,返回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 {
//不存在
}