微信公共号回复关键词的无限扩展机制

url:链接地址

note_desc:描述

基本原理:为关键字配置回调地址,关键字与参数用空格分隔,第一个空格后边的均为参数,公众号在接收到用户文本消息后,分析关键字与参数,并依据配置将其发送请求给回调地址,获得返回的处置结果。

kevintian126@126.com

返回结果为JSON形式,需要需要有err_code与err_msg属性,其中err_code为状况码,状况码为200时,表示成功,其它表示失败。err_msg表示消息描述。如:

{ "err_code":101, "err_msg":"操作失败!" }

1接口约定

邮箱

3招募关键字

处置步骤达成,打造一个%20WebApi,代码如是说。

public%20JObject%20Index([FromBody]%20JObject%20body) { %20string%20keyword%20=%20body.Value<string>("keyword"); %20string%20parameter%20=%20body.Value<string>("parameter"); %20string%20user%20=%20body.Value<string>("user"); %20JObject%20result%20=%20new%20JObject(); %20if%20(!"提取".Equals(keyword)) %20{ %20result["err_code"]%20=%20101; %20result["err_msg"]%20=%20"关键字未找到"; %20return%20result; %20} %20////%20处置过程%20 %20var%20content%20=%20parameter; %20var%20regUrl%20=%20@"^((ht)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-.,@?^=%&:\/~+#]*[\w\-@?^=%&\/~+#])?$"; %20 %20//%20(1)%20为网址吗 %20if%20(Regex.IsMatch(content,%20regUrl)) %20{ %20try %20{ %20content%20=%20GetUrlContent(content); %20} %20catch%20(Exception%20ue) %20{ %20result["err_code"]%20=%20101; %20result["err_msg"]%20=%20"站点没办法连接!"; %20return%20result; %20} %20} %20 %20//依据正则表达式提取 %20Dictionary<string,%20List<string>>%20typeMatches%20=%20new%20Dictionary<string,%20List<string>>(); %20foreach%20(var%20kv%20in%20RegexDict) %20{ %20List<string>%20list%20=%20new%20List<string>(); %20var%20mc%20=%20Regex.Matches(content,%20kv.Value,%20RegexOptions.IgnoreCase); %20foreach%20(Match%20c%20in%20mc) %20{ %20list.Add(c.Value); %20} %20if%20(list.Count%20>%200) %20{ %20typeMatches.Add(kv.Key,%20list); %20} %20} %20//拼成字符串 %20StringBuilder%20sb%20=%20new%20StringBuilder(1024); %20foreach%20(var%20kv%20in%20typeMatches) %20{ %20sb.Append(kv.Key%20+%20"\n"%20+%20String.Join("\n",%20kv.Value)%20+%20"\n");%20 %20} %20//长度<1020%20文本消息 %20if%20(sb.Length%20<%201020) %20{ %20result["err_code"]%20=%20200; %20result["err_msg"]%20=%20"success"; %20result["key_type"]%20=%20"文字"; %20result["data"]%20=%20sb.Length%20==%200%20?%20"无匹配内容!"%20:%20sb.ToString(); %20return%20result; %20} %20//长度较大,返回工具链接 %20JObject%20link%20=%20new%20JObject(); %20link["title"]%20=%20"提取内容中的格式化数据信息"; %20link["icon"]%20=%20"http://www.timeddd.com/Content/images/logo_bar.png"; link["note_desc"]="指定链接地址或文本内容,从中提取一些常格式数据,如邮箱、手机号、链接、身份证号等信息!"; link["url"]="http://www.timeddd.com/Tool/Fetch"; JArraylinks=newJArray(); links.Add(link); result["err_code"]=200; result["err_msg"]="success"; result["key_type"]="链接"; result["data"]=links; returnresult; }

当key_type为“链接”的时候,data为链接信息的数组,只不过现在只支持一个链接。

melodylu@buynow.com

手机号

1.4链接种类示例

{ "err_code":101, "err_msg":"操作失败!", "key_type":"链接", "data":[ { "title":"一个数学公式", "icon":"http://****/formula.png", "note_desc":"一个神寄的数学公式", "url":"http://****" } ] }

2.2.1%20筹备好匹配的正则表达式

private%20static%20Dictionary<string,%20string>%20_RegexDict; public%20static%20Dictionary<string,%20string>%20RegexDict { %20get %20{ %20if%20(_RegexDict%20==%20null) %20{ %20_RegexDict%20=%20new%20Dictionary<string,%20string>(); %20//%20_RegexDict.Add("链接",%20@"((ht)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-.,@?^=%&:\/~+#]*[\w\-@?^=%&\/~+#])?");%20 %20_RegexDict.Add("邮箱",%20@"[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+"); %20_RegexDict.Add("手机号",%20@"(((13[0-9]{1})|(14[0-9]{1})|(15[0-9]{1})|(17[0-9]{1})|(18[0-9]{1})|(19[0-9]{1}))+\d{8})"); %20_RegexDict.Add("身份证号",%20@"[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]"); %20_RegexDict.Add("IPv4地址",%20@"(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])"); %20} %20return%20_RegexDict; %20} }

chingpeplo@sina.com

本文主要介绍接口的概念,并提供一个具体的接口达成。

在公众号的开发中,自动回复关键字主要可回复的内容为文本消息、图文消息。为了让关键字支持“带参数”和无限扩展,本文引入一个对接关键字的接口规范,使得关键字可以携参数一块交由第三方处置,并返回用户文本消息或图文消息。

回复:

tony@erene.com.com

1136667341@qq.com

meiyuan@0757info.com

xxxxxx@163.com

meiya@cn-meiya.com

wq901200@hotmail.com

功能描述:从文本中提取出邮箱、手机号、身份证号、IPv4地址。假如参数只是一个url,则进行提取的文本为请求该url所得的内容。

wq901200@hotmail.com

在公众号“时间维度”中,回复关键字提取,空格带上内容,如下:

2关键字接口示例

1.1传入参数

链接的属性包括:

icon:图标

邮箱

以下为一个完整的接口达成示例。

1136667341@qq.com

melodylu@buynow.com

kevintian126@126.com

chingpeplo@sina.com

123321@126.com

引言

提取各种格式的邮箱入下所示:kevintian126@126.com,1136667341@qq.com3.meiya@cn-meiya.com4.wq901200@hotmail.com5.meiyahr@163.com6.meiyuan@0757info.com7.chingpeplo@sina.com8.tony@erene.com.com9.melodylu@buynow.com

给定一个关键字,一个接收关键字及参数的URL地址,按约定的格式返回JSON,就大概成为“时间维度”公众号里的实用工具供大伙用。如感兴趣欢迎在“时间维度”留言。

2.1功能需要描述

身份证号

参数:一段文本或只是一个url

meiyahr@163.com

会得到以下结果:

用key_type属性表示,可取值“文字”或"链接"。

1.2返回格式

18300405945

meiyuan@0757info.com

15758523729

关键字:提取

2.2达成过程

tony@erene.com.com

title:标题

meiya@cn-meiya.com

一个工具办法,请求%20url%20获得内容。

public%20static%20string%20GetUrlContent(string%20url) { %20System.Net.WebClient%20webClientObj%20=%20new%20System.Net.WebClient(); %20webClientObj.Encoding%20=%20Encoding.UTF8; %20string%20respInfo%20=%20webClientObj.DownloadString(url); %20return%20respInfo; }

18101710555

1.3文字种类示例

{ "err_code":101, "err_msg":"操作失败!", "key_type":"文字", "data":"回复的内容" }

提取https://www.nhxz.com/doc/181017fc325d4b598aaede18.html

meiyahr@163.com

3成效

会得到:

2.2.2%20处置过程

步骤:是不是仅为url->是则请求url得到内容->依据正则表达式提取匹配数据->依据长度返回文本消息或是返回一个可操作界面的链接。

当成功时,支持返回“文字”与“链接”两类型型的消息。

560087183004059455

当key_type为“文字”的时候,data为相应的文本内容。

作为Request.Body请求体POST给回调地址。

{ "keyword":"Keyword", "parameter":"Parametersstring", "user":"useropenid" }
上一篇:Nginx启用Gzip/全站CDN加速 下一篇:没有了