shenjian对象

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,该对象提供nextnextBatch方法来遍历数据;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+".taobao.com/";
site.addScanUrl(scanUrl);
}
}
};

示例代码片段:(判断数据源中是否存在满足条件的数据)

var shop = shenjian.readSource(14566,
'source(city:{eq:"北京"}){data{shop_id,shop_name}}',
FetchType.ONE);
if (shop) {
//存在
} else {
//不存在
}