客服当前在线[219]

发 送

您的需求跟我们说说
我们会非常尽力满足您

稍后再说 现在说说

在线咨询

Online Consulting

1

服务热线

13305370505

专业企业网站系统 后台功能强大,前台模板丰富

可根据客户不同的需要,进行个性化开发设计

曲径辟幽,asp公众号平台系统获取粉丝列表并入库,对比数据库会员更新会员是否已关注或取关公众号
更新时间:2023/8/6 13:29:08 点击:

伪程序员的福音,对公众号官方接口一知半解,加上对后台处理文档也写不好,百度又搜不到能用的资源,就独辟蹊径曲线救国,用纯asp写了下面的代码。

我们公众号网站平台是asp+access写的,先简单介绍下结构,数据库存放会员的表名叫member,关键字段有wx_openid[存放openid],wx_gzh_off[存放是否关注状态],本次新增了一个字段tongbu,这个用法下面有解释。

第一步,获取粉丝列表

我的办法比较简单粗暴,直接访问接口并通过asp语音获取到源代码,官方接口为:【https://api.weixin.qq.com/cgi-bin/user/get?access_token="&weixin_Access_token&"&next_openid=】,只需要access_token这个值,怎么获取我就不介绍了,官方和百度都有教程,提醒一下这个access_token有效期是7200秒(两小时),所以我这里是调用了数据库(我这个平台设置为需要时就请求一次并存放在数据库)。next_openid如果你的粉丝低于1万就不用填,高于一万就填上后再执行一次。

访问接口后,获取到的网页源码是这样的:

{"total":5693,"count":5693,"data":{"openid":["oVfr41baSm9YtXKQwGyxUtovH6Bs","oVfr41c5ciKQ-5rhIgYd347jdhfo","中间的省略","oVfr41UTDuPi_BedF2ZATg9n3LPA"]},"next_openid":"oVfr41UTDuPi_BedF2ZATg9n3LPA"}

total的值是粉丝总数,count是本次拉取数量,openid就是我们需要的粉丝数据了,我首先把它保存为txt文件【我知道用js读取后处理更方便,无奈水平有限,所以曲线救国】。

第二步,读取txt文件,并提取出需要的粉丝总数和openid数组,下面代码中我都做了注释,实现方法参考注释就行。

第三步,循环数组,并分别查询数据库对比已有会员的openid,如果已经存在的,就修改一次关注状态为1,并在上面提到的tongbu字段里写入一段字码,用于标注本次已经处理过这个会员,如果数据库不存在这个openid,就新建一条,并写入openid、关注状态和标识码。到此,就等于获取到官方的粉丝数据都已经入库并做了标识,那么在字段tongbu里面没有写入标识码的,就都是没有关注或者取关的会员了,我们只需要执行一次标识码不符的会员全部把关注状态设为0。

以上是逻辑,下面贴出代码,供跟我差不多水平的参考使用,如果您水平比较高,希望不要耻笑并给予更好的解决代码,不胜感激!

<%

url="https://api.weixin.qq.com/cgi-bin/user/get?access_token="&weixin_Access_token&"&next_openid=" 

suijima = Clng(DateDiff("s","1970-1-1 00:00:00",Now))

Function getHtml(url) '以HTML格式备份粉丝列表

Set xh = CreateObject("Microsoft.XMLHTTP")

xh.Open "GET",url,0

xh.Send()

Set MyStream=CreateObject("Adodb.Stream") 

MyStream.Type = 2

MyStream.Open 

MyStream.WriteText xh.responseText

MyStream.Position = 0

getHtml=MyStream.ReadText

MyStream.Close

End Function

Function tongbu(openid) '执行同步数据库

set rs=server.CreateObject("adodb.recordset")

sql="SELECT * FROM member where wx_openid='"&openid&"'"

rs.open sql,conn,1,3

if not rs.eof then

rs("wx_gzh_off") = 1

rs("home_tj") = suijima

else

rs.addnew

rs("wx_openid") = MyArray(I)

rs("wx_name") = "同步粉丝"

rs("wx_gzh_off") = 1

rs("home_tj") = suijima

end if

rs.update

rs.close

set rs=nothing

End Function

%>

<%

if request("action")="" then

%>


当前粉丝:<%=conn.execute( select="" from="" member="" where="" wx_gzh_off="1")(0)"> 人 

这里做个表单,提交到save,我贴不出来,总是被执行


<%

elseif request("action")="save" then

'=============第一步 先讲公众平台官网获取到的粉丝列表写到txt文==================

Set Fso = Server.CreateObject("Scripting.FileSystemObject")

Set Fout = Fso.CreateTextFile(Server.Mappath("fensi.txt")) '保存的TXT文件名

Fout.Write getHtml(url) '写入获取到的指定url网页的源文件

Fout.Close

Set Fout = Nothing

Set Fso = Nothing

'=============写txt文件结束=================================================

'=============读txt文件开始=================================================

set fs=server.createobject("scripting.filesystemobject")

filetxt=server.mappath("fensi.txt")

set txt=fs.opentextfile(filetxt,1,true)

if not txt.atendofstream then

line=txt.ReadAll

if Instr(line, "err")>0 then

response.write"

"


response.end

else

openid = Replace(line,chr(34),"")'将双引号去除,方面后面处理

openid=split(openid,"{openid:[")(1)'截取openid部分

openid=split(openid,"]},next_openid")(0)'截取openid部分,就得到了openid列表

line=split(line,":")(1)'截取第一个冒号后面的代码,这是为了获取粉丝数量

line=split(line,",")(0)'粉丝数量


'response.write "共计:"&line & " 名粉丝
"

MyArray = Split(openid,",")'分割粉丝列表数组

For I = Lbound(MyArray) to Ubound(MyArray)'开始逐个执行

tongbu(MyArray(I))'执行类,把每一个获取到的openid都分别拿到数据库对比一下,同步数据库粉丝

Next

Conn.ExeCute("update [member] set wx_gzh_off=0 where home_tj is null or home_tj<>"&suijima)'将同步后官方没有的openid全部设为未关注

end if

end if

response.write"

"


end if

%>



相关标签:
    相关信息
    相关产品
    在线客服

    热线电话

    13305370505

    微信客服
    微信二维码
    线