RuiJi.Net 管理员 UI – 函数类型

地址函数 URLFUNCTION

URLFUNCTION被用来处理Url地址,您可以这样在Url地址中使用函数

http://xxx.xxx.com.cn/roll.php?do=query&callback=jsonp1475197217819&_={# ticks() #}&date={# now("yyyy-MM-dd") #}&size=20&page={# page(1,2) #}

在地址中使用函数,函数必须在{# #}中

ticks是一个生成时间戳的函数,now函数根据传入的格式按当前日期生成日期参数,page用来生成翻页,运行这个函数,您可能得到如下链接地址

http://xxx.xxx.com.cn/roll.php?do=query&callback=jsonp1475197217819&_=1475197217&date=20180708&size=20&page=1
http://xxx.xxx.com.cn/roll.php?do=query&callback=jsonp1475197217819&_=1475197217&date=20180708&size=20&page=2

page 函数的定义如下

for (int i = {0}; i <= {1}; i++){{results.Add(i);}}

results是函数的输出结果,它是一个数组,您可以让您的函数返回多个数值,当地址具有多个函数时,RuiJi.Net 会按顺序计算它们的结果,每组结果或作为下一组函数计算的输入,假设您在地址中使用了两个地址函数,并且它们每个函数都返回两组结果,那么最终计算出的地址 为2*2=4个

RuiJi.Net 内置了几个函数, 源码如下

ticks

results.Add(DateTime.Now.Ticks);

示例: ticks() 用途: 生成随机数

page

for (int i = {0}; i <= {1}; i++){{results.Add(i);}}

示例: page(1,10) 用途: 生成1到10页的地址

limit

for (int i = {0}; i <= {1}; i++){{results.Add((i-1)*{2});}}

示例: limt(1,10,20) 用途: 生成1到10页的地址,每页跨度20

now

results.Add(DateTime.Now.ToString("{0}"));

示例: now(“yyyy-MM-dd”) 用途: 根据传入的格式按格式化当前日期

选择器函数 SELECTORPROCESSOR

函数选择器被用来在使用RuiJi.Net提供的标准选择器后,仍然不能满足抽取要求的场合,例如:我们经常在抓取日期的时候,取回的结果可能是时间戳或非完整的日期,也有可能遇到返回的是几分钟前或几天前,返回的结果并不是我们预期的结果,这时候可以使用SELECTORPROCESSOR来处理这样的结果。

例如我们可以定义一个函数 名称为abc,内容如下

if (content.EndsWith("小时前"))
{{
	var hour = Convert.ToInt32(Regex.Match(content, @"[\d]*").Value);
	results.Add(DateTime.Now.AddHours(-hour));
}}

if (content.EndsWith("天前"))
{{
	var hour = Convert.ToInt32(Regex.Match(content, @"[\d]*").Value);
	results.Add(DateTime.Now.AddDays(-hour));
}}

if (content.EndsWith("AddMinutes"))
{{
	var hour = Convert.ToInt32(Regex.Match(content, @"[\d]*").Value);
	results.Add(DateTime.Now.AddDays(-hour));
}}

该代码是用C#实现的,如果您仅使用RuiJi.Net.Core的核心类库, 您需要将此代码以 函数名.pro 的形式存储于执行目录的funcs文件夹,如果您使用RuiJi.Net整个项目的进行管理的话,您还可以管理界面对函数选择器进行管理

代码里面出现的content是当前的函数选择器上一个选择器的处理结果,通过自定义函数选择器,您可以根据您的抽取需求,对不精确的数据进行更精确的清洗。

您可以在RuiJi表达式中,这样使用

[block]
#BlockName
css #topsOfRecommend:ohtml

[tile]
#titlename
css .box-aw

	[meta]
	......

	#postdate
	css .blog-footer-box > span:eq(2):text
	proc abc

我们在将来也会增加使用js实现的函数选择器

猜你喜欢

转载自blog.csdn.net/weixin_42581666/article/details/106169199