精华内容
下载资源
问答
  • 功能就是调数据并回复给用户,需要用户发送给公众号一个关键词,通过关键词自动回复消息。 这时就是查询微信公众平台文档了,地址如下: 文档 按照它的入门指南,我基本上了解了用户给公众号发送消息的一个机制,...
  • 功能就是调数据并回复给用户,需要用户发送给公众号一个关键词,通过关键词自动回复消息。这时就是查询微信公众平台文档了,地址如下: 文档按照它的入门指南,我基本上了解了用户给公众号发送消息的一个机制,并且...

    最近忙国赛的一个项目,我得做一个微信公众号。功能就是调数据并回复给用户,需要用户发送给公众号一个关键词,通过关键词自动回复消息。

    这时就是查询微信公众平台文档了,地址如下: 文档

    按照它的入门指南,我基本上了解了用户给公众号发送消息的一个机制,并且一旦给公众号发送消息,在开发者后台,会收到公众平台发送的一个xml,所以通过编写Python脚本进行xml的解析与自动发送功能。

    如果用户给公众号发送一段text消息,比如“hello”,那么后台就会收到一个xml为:

    1460541339

    ]>

    注意这里面有一些标记对于我们开发者来说是非常有用的:ToUserName,FromUserName,MsgType,Content

    所以我们只要知道了这些信息,我们就能做到自动回复的功能。

    我们发现这个MsgType 为 ‘text’。而微信中的MsgType有“text”(文本)、“image”(图像)、“voice”(语音)、“video”(视频)、“shortvideo”(短视频)、“location”(位置)、“link”(链接)、“event”(事件)

    首先我们写一个main.py文件

    main.py

    # -*- coding: utf-8 -*-

    # filename: main.py

    import web

    from handle import Handle

    urls = (

    '/wx', 'Handle',

    )

    if __name__ == '__main__':

    app = web.application(urls, globals())

    app.run()

    然后写一个receive.py,作为接受用户发送过来的数据,并解析xml,返回数据的脚本。

    receive.py

    import xml.etree.ElementTree as ET

    def parse_xml(web_data):

    if len(web_data) == 0:

    return None

    xmlData = ET.fromstring(web_data)

    msg_type = xmlData.find('MsgType').text

    if msg_type == 'text':

    #print('text')

    return TextMsg(xmlData)

    elif msg_type == 'image':

    return ImageMsg(xmlData)

    elif msg_type == 'location':

    #print('location')

    return LocationMsg(xmlData)

    elif msg_type == 'event':

    #print('event')

    return EventMsg(xmlData)

    class Event(object):

    def __init__(self, xmlData):

    self.ToUserName = xmlData.find('ToUserName').text

    self.FromUserName = xmlData.find('FromUserName').text

    self.CreateTime = xmlData.find('CreateTime').text

    self.MsgType = xmlData.find('MsgType').text

    self.Eventkey = xmlData.find('EventKey').text

    class Msg(object):

    def __init__(self, xmlData):

    self.ToUserName = xmlData.find('ToUserName').text

    展开全文
  • 豆瓣自动顶帖机器人JS脚本

    千次阅读 热门讨论 2020-06-12 17:32:46
    网上很多基于python的豆瓣自动顶帖程序,但我选择JS脚本的实现方式,主要考虑了以下几点: 开发效率、运营成本是首要的。短平快的产出,后续可以转交别人,不需要花费我时间维护; 不需要太快的顶帖速率,且顶帖太...

    前言

    网上很多基于python的豆瓣自动顶帖程序,但我选择JS脚本的实现方式,主要考虑了以下几点:

    1. 开发效率、运营成本是首要的。短平快的产出,后续可以转交别人,不需要花费我时间维护;
    2. 不需要太快的顶帖速率,且顶帖太快易被封。回复太快会被要求输入验证码,我相信即使填对验证码,次数多了,豆瓣也会限制或者封号,因此慢一点一定是最稳妥的方案;
    3. 不追求很高的智能程度。以小众圈为主的领域内容,通用的智能问答也不好使,需要专向项智能问答,业内几乎空白,因此用匹配关键词的方式实现一定程度的智能就足矣。

    没有找到称心的源码,遂自己撸。
    小白向:一台电脑+chrome内核浏览器+Tampermonkey,打开豆瓣小组,登录机器人账号,然后就不用管了。注意并没有做验证码识别,顶帖不要太快哦~

    安装

    1. 浏览器插件Tampermonkey

    是一款免费的浏览器扩展和最为流行的用户脚本管理器,它适用于 Chrome, Microsoft Edge, Safari, Opera Next, 和 Firefox。

    1. 添加2个新脚本

    中控台:替换掉以下的<豆瓣组ID>。打开豆瓣小组网页,插件生效,每5分钟刷新小组首页,每10秒钟顶一个回帖数小于5的帖子(数值可以自己调整)。为区分人工打开的帖子和插件打开的帖子,刻意在帖子链接最后加了?start=db,给机器人脚本识别。

    // ==UserScript==
    // @name         豆瓣顶帖中控台
    // @version      0.2
    // @author       mRobot
    // @match        https://www.douban.com/group/<豆瓣组ID>*
    // ==/UserScript==
    
    (function() {
        'use strict';
        var STR='db'; //一个暗号
        var RELOAD_TIME=5*60*1000;//每5分钟刷新
        var UP_TIME=10*1000;//每10秒打开一个帖子进行顶帖
        var CNT=5;//回帖数小于CNT则进行顶帖
        var eles=document.getElementsByClassName('olt')[0].children[0].children;
        var n=0;
        function openTopic(href){
            console.log('打开~~'+href);
            window.open(href, "_blank");
        }
        for(var i=1;i<eles.length;i=i+1){
            var tr=eles[i];
            var cntStr=tr.children[2].innerText;
            var cnt=parseInt(cntStr);
            if (isNaN(cnt) ||cnt<CNT ){
                console.log("回帖数:"+cntStr);
                var href=tr.children[0].children[0].href+"?start="+STR;
                console.log("地址:"+href);
                console.log(n*UP_TIME);
                setTimeout(openTopic,n*UP_TIME,href);
                n=n+1;
            }
        }
        setTimeout(function(){window.location.reload()},RELOAD_TIME);
    
    })();
    

    机器人:替换掉以下的<豆瓣组ID><机器人ID>(用作顶帖机器人的豆瓣账户ID),按照示例自行丰富机器人的语录dctlst。标题或正文含有关键词的,按dct的预设规则回帖,否则在lst随机一条,如果机器人已经顶帖过了,不再顶帖。5秒钟后自动关闭该帖子页面。

    例如:含有“北京”,则随机回"我爱北京天安门🥰",“皇城根下啊~🤣”,“得嘞您!“中任一;含有“首都”,则同“北京”;含有“吃瓜”,则回"吃吃吃,就你爱吃瓜!”;含有“瓜”,则回"瓜它包围着我(灬ꈍ ꈍ灬)”,注意如果关键词A包含了关键词B,关键词A要在关键词B前面;含有“天气”,则在lst中随机。

    // ==UserScript==
    // @name         豆瓣顶帖机器人
    // @version      0.3
    // @author       mRobot
    // @match        https://www.douban.com/group/topic/*
    // ==/UserScript==
    
    (function() {
        'use strict';
        var STR='db';                              //跟中控对应的暗号
        var GROUP_ID='<豆瓣小组ID>';                //小组ID
        var ROBOT_IDS=['<机器人ID1>','<机器人ID2>'];//机器人ID
        //关键词字典,多对多规则,注意严格按照格式填写
        var dct={
            "北京":["我爱北京天安门🥰","皇城根下啊~🤣","得嘞您!"],   //如果标题或正文有"北京",随机一条回复
            "首都":"北京",                                         //同"北京"
            "帝都":"北京",                                         //同"北京"
            "beijing":"北京",                                      //同"北京"
            "吃瓜":["吃吃吃,就你爱吃瓜!"],                 //如果标题或正文有"吃瓜",随机一条回复
            "瓜":["瓜它包围着我(灬ꈍ ꈍ灬)"],                 //如果标题或正文有"瓜",随机一条回复 
            "吃瓜":["是真的!"]                           //这条无作用,不会生效
        };
        //随机序列
        var lst=[" w(゚Д゚)w",
                 "一顿操作猛如虎,一看比分0比5",
                 " 我也不知道ヽ(✿゚▽゚)ノ",
                 " 奥利给 (๑•̀ㅂ•́)و✧",
                 "(○` 3′○)"];
        var ding=true;
        var group=document.getElementsByClassName('title')[0].children[0].href;
        if(!window.location.href.endsWith(STR)||!group.includes(GROUP_ID)){
            ding=false;
        }
        var persons=document.getElementsByClassName('bg-img-green');
        for(var i=0;i<persons.length;i=i+1){
            var p=persons[i];
            for(var j=0;j<ROBOT_IDS.length;j=j+1){
                if(p.firstElementChild.firstElementChild.href.includes(ROBOT_IDS[j])){
                    console.log('已经顶过了~');
                    ding=false;        //避免关不掉
                    window.close();    //如果机器人已经顶帖过了,不再顶帖
                }
            }
        }
        if(ding){
            var comment="";
            var title,content,text;
            if(document.getElementsByClassName('tablecc')[0]!=undefined){
                title=document.getElementsByClassName('tablecc')[0].innerText;//长标题
            }else{
                title=document.getElementsByClassName('article')[0].firstElementChild.innerText;//短标题
            }
            content=document.getElementsByClassName('topic-richtext')[0].innerText;//正文
            var isKeyword=false;
            text=title+content;
            //标题或正文含有关键词的,按预设规则回帖
            for(var key in dct){
                if(text.includes(key)){
                    isKeyword=true;
                    var val=dct[key];
                    if(typeof val=='string'){
                        val=dct[val];
                    }
                    num=Math.floor(Math.random()*val.length);
                    comment=val[num];
                    break;               //关键词字典,优先匹配第一条,因此“吃瓜”应在“瓜”之前,才能生效
                }
            }
            //否则,随机
            if(!isKeyword){
                num=Math.floor(Math.random()*lst.length);
                comment=lst[num];
            }
            var cmt=document.getElementById('last');
            var num=Math.floor(Math.random()*lst.length);
            cmt.innerText=comment;
            var sbm=document.getElementsByName('submit_btn')[0];
            sbm.click();
            console.log('发射~~~');
        }
        else{
            console.log('沉睡~~~');
        }
        setTimeout(function(){window.close();},5000);//5秒后关闭tab页
    })();
    
    1. 打开具体的豆瓣小组~ 机器人已经开始工作了

    2. 通过多用户或者隐私模式启动多个浏览器,可以启动多个机器人,或者玩自己的号

    3. 在Tampermonkey的管理面板中把中控台的关掉,可以停止自动顶帖功能
      在这里插入图片描述

    展开全文
  • 欢迎关注【花卷来了】公众号。如果喜欢本期节目请点赞、再看、分享给朋友吧~软件资源请回复文章底部今日关键词获取/排版:萌萌哒花卷
    b6e10c038e1789cf0c0a7bf05d9a9435.png

    欢迎关注【花卷来了】公众号。

    如果喜欢本期节目

    点赞、再看、分享给朋友吧~

    30d66d845349d6a9531b2ae71f0ac4ba.png软件资源请回复文章底部今日关键词获取

    /排版:萌萌哒花卷

    展开全文
  • 使用php脚本完成公众号自动恢复的功能。 在开发之前需要先申请公众号,个人只能申请订阅号。 申请完毕之后,需要启用服务器配置,不需要开启开发者设置的。是的这个功能只需要开启服务器配置,设置好回调地址,设置...

    今天我们再切换回php。使用php脚本完成公众号自动恢复的功能。

    在开发之前需要先申请公众号,个人只能申请订阅号。

    申请完毕之后,需要启用服务器配置,不需要开启开发者设置的。是的这个功能只需要开启服务器配置,设置好回调地址,设置好 TOKEN 我这里是 danny

    服务器配置提交的时候,需要把第六行放开(服务器配置提交校验),第7行屏蔽,因为服务器配置提交时会进行实时校验。提交成功后,就可以把第六行屏蔽,再把第7行放开(微信关键词回调相应函数)。

    别的也没什么。我只设置了 音乐类型和文本类型,其他类型都需要使用media_id,也就是说需要先将素材上传到公众号平台,再用他的id来进行响应,公众号后台也看不到media_id,就不做处理了。跑通就行。

    后面就是与网站相结合,将网站的流量导入到公众号,也就是在网站放出资源,但是需要关注公众号并回复关键字获取。

    代码如下:更换自己的token,放到自己的回调url里就能运行。

    <?php
    
    //define your token
    define("TOKEN", "danny");
    $wechatObj = new wechatCallbackapiTest();
    //$wechatObj->valid();//校验提交时使用
    $wechatObj->responseMsg();
    
    class wechatCallbackapiTest
    {
        public function valid()
    {
            $echoStr = $_GET["echostr"];
    
            //valid signature , option
            if($this->checkSignature()){ //验证成功后,返回$echoStr字符串给微信处理
                echo $echoStr; 
                exit;
            }
        }
    
        private function checkSignature()
    {
            // you must define TOKEN by yourself
            if (!defined("TOKEN")) {
                throw new Exception('TOKEN is not defined!');
            }
    
            $signature = $_GET["signature"];
            $timestamp = $_GET["timestamp"];
            $nonce = $_GET["nonce"];
    
            $token = TOKEN;
            $tmpArr = array($token, $timestamp, $nonce);
            // use SORT_STRING rule
            sort($tmpArr, SORT_STRING);
            $tmpStr = implode( $tmpArr );
            $tmpStr = sha1( $tmpStr );
    
            if( $tmpStr == $signature ){
                return true;
            }else{
                return false;
            }
        }
        public function responseMsg(){
    
            $postStr = file_get_contents("php://input", 'r');
            if (!empty($postStr)){
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $keyword = trim($postObj->Content);
                $time = time();
                $textTpl = "<xml>
                <ToUserName><![CDATA[%s]]></ToUserName>
                <FromUserName><![CDATA[%s]]></FromUserName>
                <CreateTime>%s</CreateTime>
                <MsgType><![CDATA[%s]]></MsgType>
                <Content><![CDATA[%s]]></Content>
                <FuncFlag>0<FuncFlag>
                </xml>";
                $msgType = "text";
                $contentStr = 'default';
          
                if($keyword == 1){
                    $contentStr = '数字1';
                    $msgType = "text";
                    $textTpl = $this->text($contentStr);
                }elseif($keyword == 2){
                    $contentStr = '数字2';
                    $msgType = "text";
                    $textTpl = $this->text($contentStr);
                }elseif($keyword == '4'){
                    $msgType = "music";
                    $textTpl = $this->music('http://task.db100.net/世间美好与你环环相扣.flac.mp3','title','description');
                }else{
                    $contentStr = 'else';
                    $msgType = "text";
                    $textTpl = $this->text($contentStr);
                }
                
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType);
                echo $resultStr;
            }else {
                echo '不是微信回调访问';
                exit;
            }
        }
        
        function music($url,$tetle,$des) {
            $MusicUrl=$url;
            $tetle=$tetle;
            $des=$des;
            $textTpl = " <xml>
                                <ToUserName><![CDATA[%s]]></ToUserName>
                                <FromUserName><![CDATA[%s]]></FromUserName>
                                <CreateTime>%s</CreateTime>
                                <MsgType><![CDATA[%s]]></MsgType>
                                 <Music>
                                 <Title><![CDATA[$tetle]]></Title>
                                 <Description><![CDATA[$des]]></Description>
                                 <MusicUrl><![CDATA[$MusicUrl]]></MusicUrl>
                                 <HQMusicUrl><![CDATA[$MusicUrl]]></HQMusicUrl>
                                 </Music>
                                 <FuncFlag>0</FuncFlag>
                                 </xml>";
    
            return $textTpl;
      }
      
      function text($content) {
            $textTpl = "<xml>
                <ToUserName><![CDATA[%s]]></ToUserName>
                <FromUserName><![CDATA[%s]]></FromUserName>
                <CreateTime>%s</CreateTime>
                <MsgType><![CDATA[%s]]></MsgType>
                <Content><![CDATA[$content]]></Content>
                <FuncFlag>0<FuncFlag>
                </xml>";
    
            return $textTpl;
      }
      //其他类型需要mediaid,暂不处理。
    
    }
    
    ?>
    

    文章编辑:标梵互动

    展开全文
  • 市面上的新媒体资料都是过去时了,只有最新的爆款文才是新媒体人的福音! 三分钟爬取全网10W+爆款文! 爬虫脚本无偿分享,拿来就能直接用,零基础也能...需要的看图,回复关键词自动化办公”即可领取。 ...
  • 点击上方蓝色“程序员一凡”,选择“设为星标”回复关键词”获取整理好的面试资料在我们读高中的时候, 是不是经常听老师说:学好数理化,走遍天下都不怕。作为软件测试这个行业,在当下,你学好自动化,你去哪...
  • 3.批量各种网站的页面评论回复 4.批量留言 5.网站账号批量注册 6.各种窗口程序的自动控制操作 7.刷网站流量和广告点击,投票刷票点击,百度seo关键词优化点击 8.批量的进行软件登陆和操作 9.邮件群发,QQ群发...
  • <br>三、多级转向采集  某些网站的文章页面使用了JS脚本多次转向网址或开新窗口,才能访问到正确文章,此功能可支持对此类网站的采集。 <br>四、其他细节调整  1、列表规则里的标题变量不再为必填,...
  • 9.支持批量上传图片,自定义参数,自动关键词,描述,tag标签等。 10.支持上传文件管理,支持冗余检测。 11.支持模板切换、管理,在线模板。 12.支持留言、管理员回复。 13.支持aspjpeg水印,支持png透明水印。 ...
  • 关注后回复: 新装系统、升级、目录等关键词,系统会自动回复相关帮助。 有问题请先查阅 FAQ常见问答 和 Wiki使用技巧 或使用搜索引擎。 如果这个项目对你有用,请: 挥动鼠标,右上角给个 Star ! 保留网站页脚的...
  • phpBB-WAP v4正式版

    2013-03-31 16:15:11
    * 删除了邮件发送失败提示,因为当执行失败提示会执行message_die()函数终止脚本,导致虚拟彩票无法运行! * 添加风格自动识别安装功能,类似于phpBB 3 应该只有这么多了。。。 在这里提前给大家拜个早年! 祝...
  • hustoj-master.zip

    2019-10-01 17:22:02
    常见问题自动应答微信公众号:hustoj 关注后回复: 新装系统、升级、目录等关键词,系统会自动回复相关帮助。 有问题请先查阅 FAQ常见问答 和 Wiki使用技巧 或使用搜索引擎。 安装完成,用admin作为用户名注册一个...
  • 6.自动生成缩略图、自定义图片或文字水印、上传图片时水印自动添加。 7.Banner可以根据设置不同样式,支持Flash轮播,动画等。 8.内置在线交流小窗口随屏滚动,方便企业和客户进行联系。 9.简介、新闻、产品、...
  • 18、关联链接,自由设置站内关联链接,自动给内容中的一些关键词加上链接,引导浏览者查看更多内容,提高网站黏度; 19、强大的会员互动功能 支持企业会员(制作中)和个人会员 支持会员注册、登录、退出、审核、...
  • 4、支持中繁体切换功能(采用Javascript脚本替换页面中繁体文字,不需要自行翻译); 5、支持不同语言采用不同域名访问; 6、前台页面有便于切换网站语言的文字链接或国旗图片链接功能; 7、网站后台管理支持多语言...
  • 18、关联链接,自由设置站内关联链接,自动给内容中的一些关键词加上链接,引导浏览者查看更多内容,提高网站黏度; 19、强大的会员互动功能 支持企业会员(制作中)和个人会员 支持会员注册、登录、退出、审核、...
  • javapms门户网站源码

    2014-08-07 17:24:08
    javascript脚本基于jquery和javascript标准编写,有效的解决了js跨浏览器的问题,系统可以在IE6、IE7、IE8、IE9、FireFox、Chrome、Opera、Safari浏览器下平稳运行。 1.5. 强大的中文采集与检索技术 系统支持强大的...
  • 文章管理系统

    2014-12-06 10:19:22
    3.[*修复]修复前台存在的xss跨站脚本攻击漏洞【感谢乌云[evil]发现】 4.[修复]修复内容页投票区域部分浏览器不会居中BUG 5.加强前台提交表单信息的安全过滤 6.修复几个细节BUG 2014年04月30日 V2.84更新包(推荐...
  • · html过滤 ,自动过滤javascript脚本,避免恶意代码; <br/>用户模块 (可以使用第三方的会员表、用户组表) ·支持会员注册、登录、退出、资料修改等基本功能; ·支持邮件验证、管理员审核...
  • 36、关联链接,自由设置站内关联链接,自动给内容中的一些关键词加上链接,引导浏览者查看更多内容,提高网站黏度; 37、数据库字段替换,可批量替换各个数据表中指定字段的内容,快速纠正错误。 38、强大的...
  • 国内用户: 在公众号 0加1 后台回复ChromeAppHeroes离线安装包 即可获取 项目新增CN服务器 本项目使用了大量Gif图片, 而且github在国内的访问速度非常不稳定,导致文章页面打开稍慢, 为了解决大陆用户访问项目速度慢...
  • ✅ RunAny:一劳永逸的快速启动软件,拥有三键启动、一键直达、批量搜索、全局热键、短语输出、热键映射、脚本插件等功能 - 更多介绍 2019年12月17号添加 suziwen - Github ✅ 小书匠:一款专注于写作的 ...
  •  GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收...
  • java 面试题 总结

    2009-09-16 08:45:34
     GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收...

空空如也

空空如也

1 2
收藏数 25
精华内容 10
关键字:

关键词自动回复脚本