调用微信公众号接口给女票每天打卡

2023-05-16

文章目录

  • 前言
  • 一、微信公众号接口
  • 二、使用步骤


前言

最近网上很火的给女朋友做公众号推送,作者 小红书 @猪咪不是猪 且做作者 大方的共享成品 源码 +教学 +自动版本

起初,人们认为这仅仅只是个简单且幼稚,只为图一乐的微信消息模板。
后来,什么云服务器,php,html,个人主页,点滴相册,企业微信,各种各样的花式模板,易语言都来了,属实是杀鸡用牛刀。

我就不用云服务器了(没钱),准备参考python版本的,使用公司服务器做每天的定时发送。相比自己个人IP或者云服务器,需要解决两个问题:1. 公司服务器对微信的服务器有封锁,正常情况下是访问不了微信公众号接口的 2. 找了很久的方法,通过转发是可以绕开的,当然这仅仅针对微信公众号接口。修改代码,request/get/post需要走本地的127.0.0.1:10809(懂的都懂)。


一、微信公众号接口

先下载个参考代码
https://gitee.com/lifeixue/weather-push-python?_from=gitee_search

公众号推送早安问候以及天气预报, 程序员必备撩妹工具,微信自动发送问候语以及天气预报,每天早中晚定时骚扰
在这里插入图片描述

  1. 微信公众平台接口测试账号申请:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
    在这里插入图片描述

  2. 申请登录之后
    在这里插入图片描述

  3. 在 config.txt 里面填写配置项信息
    在这里插入图片描述

  4. 模板示例如下
    {{date.DATA}}
    地区:{{region.DATA}}
    天气:{{weather.DATA}}
    气温:{{temp.DATA}}
    风向:{{wind_dir.DATA}}
    今天是我们相恋的第{{love_day.DATA}}天
    {{birthday1.DATA}}
    {{birthday2.DATA}}
    {{note_en.DATA}}
    {{note_ch.DATA}}

在这里插入图片描述

  1. 关于和风天气
    和风天气开放平台(注册登录):https://dev.qweather.com/
    控制台创建应用(获取Key):https://console.qweather.com/#/apps?lang=zh
    注意:在 config.txt 中的 weather_key 填写获取到的 Key
    img5

二、使用步骤

如果你是自己的电脑,申请注册之后基本就可以直接食用了,但如果你的电脑和我的一样,没办法直接访问上述接口的网站,可以试着和我一样,搭个127.0.0.1:10809(懂的都懂),将http和https通过本地转发
在这里插入图片描述
原本的代码用的是get和post,不知道怎么添加127.0.0.1:10809(懂的都懂),改成了request,json的load方式也改了一下

def get_access_token():
    # appId
    app_id = config["app_id"]
    # appSecret
    app_secret = config["app_secret"]
    post_url = ("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}".format(app_id, app_secret))
    proxies = {
        'https': 'https://127.0.0.1:10809',
        'http': 'http://127.0.0.1:10809'
    }
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
    }
    opener = request.build_opener(request.ProxyHandler(proxies))
    request.install_opener(opener)
    req = request.Request(post_url, headers=headers)
    response = request.urlopen(req)
    access_token =json.loads(response.read().decode())["access_token"]
    # try:
    #     access_token = get(post_url, proxies=proxies, headers=headers, verify=False).json()['access_token']
    # except KeyError:
    #     print("获取access_token失败,请检查app_id和app_secret是否正确")
    #     os.system("pause")
    #     sys.exit(1)
    # print(access_token)
    return access_token

使用request的,urlopen打开中文的url会报错’ascii’ codec can’t encode characters in position 29-31: ordinal not in range(128),修改如下:

def get_weather(region):
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
    }
    key = config["weather_key"]
    # urlopen打开带有中文的url:parse.quote(region)
    region_url = "https://geoapi.qweather.com/v2/city/lookup?location={}&key={}".format(parse.quote(region), key)
    proxies = {
        'https': 'https://127.0.0.1:10809',
        'http': 'http://127.0.0.1:10809'
    }
    opener = request.build_opener(request.ProxyHandler(proxies))
    request.install_opener(opener)
    req = request.Request(region_url, headers=headers)
    response = request.urlopen(req)
    html = response.read()
    buff = BytesIO(html) 
    location_id =json.loads(gzip.GzipFile(fileobj=buff).read().decode())["location"][0]["id"]

前面无论是天气的接口,还是微信公众号获取access_token的,直接在传参的时候加上proxy就能用了,但是在最后一步,调用微信公众号post模板的data时,上面的写法一直不起作用,最后用下面这种写法才成功了:1.can’t concat bytes to str 通过bytes(json.dumps(datas)将数据先转一下格式,然后request_obj.set_proxy(‘127.0.0.1:10809’,‘https’)设置daili:

    url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={}".format(access_token)
    header_selfdefine={
     'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0',
     'Accept': '*/*',
     'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
     'Accept-Encoding': 'gzip, deflate',
    }
    request_obj=request.Request(url=url,data=bytes(json.dumps(datas), encoding="utf-8"),headers=header_selfdefine)
    # POST必须要这样才能设置proxy
    request_obj.set_proxy('127.0.0.1:10809','https')
    response_obj=request.urlopen(request_obj)
    response = json.loads(response_obj.read().decode('utf-8'))

最后就是优化自己的模板和config格式了,参考原本的格式修改即可,增加时间控制的函数,让程序在每天特定的时间执行,

def main():
    LOVE_FLAG = False
    old_today = datetime.date(int(strftime('%Y',time.localtime(time.time()))),int(strftime('%m',time.localtime(time.time()))),int(strftime('%d',time.localtime(time.time()))))
    while(True):
        # 计算几天的年月日,然后换算成周几,其中周六是5,周日是6,周一是0
        new_today = datetime.date(int(strftime('%Y',time.localtime(time.time()))),int(strftime('%m',time.localtime(time.time()))),int(strftime('%d',time.localtime(time.time()))))
        if(old_today != new_today):
            # 如果是新的一天,更新flag
            LOVE_FLAG = False
            old_today = new_today
            
        if(LOVE_FLAG==False):
            if(strftime('%H:%M',time.localtime(time.time())) == "22:00"):
                LOVE_FLAG = True
                # 打卡
                LOVE()
            else:
                # 半分钟判断一次
                time.sleep(30)
        else:
            # 十二个小时判断一次
            time.sleep(60*60*12)

最后的最后,使用pyinstaller打包成一个exe文件,运行起来即可。

py -3.10 -m PyInstaller -F -w main.py 
# -3.10为指定版本
# -F 打包成一个exe文件,而不是文件夹
# -w 程序执行过程中不显示控制台窗口
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调用微信公众号接口给女票每天打卡 的相关文章

  • 2.rabbitmq概述和helloworld

    rabbitmq概述 rabbitmq中的几个概念 BROKER 接收和分发消息的应用 xff0c RabbitMQ Server 就是 Message Broker Virtual Host 出于多租户和安全因素设计的 xff0c 把 A
  • 3.rabbitmq轮询和不公平分发

    rabbitmq轮询和不公平分发 rabbitmq轮询分发 rabbitmq默认是使用轮询来分发消息的 测试代码如下所示 生产者代码 span class token comment 生产者 task rabbitmq 轮询演示 span
  • 4.rabbitmq消息应答

    rabbitmq消息应答 概述 消息应答就是消费者在收到消息的时候 xff0c 在它接收到消息并处理完毕之后 xff0c 告诉rabbitmq它已经处理完了 xff0c rabbitmq可以删除这个消息了 消息应答的方式 channel b
  • 5.rabbitmq持久化

    rabbitmq持久化 队列的持久化 队列的持久化需要我们在声明的时候指定其持久化 使用durable 61 true来持久化队列 span class token comment 队列的持久化 span span class token
  • 关于双控阵列的实现原理的讨论

    xfeff xfeff http bbs chinaunix net forum viewthread tid 4140392 html 对于一个支持FC SAN的双控存储阵列 xff0c 对外号称active active xff0c 实
  • 6.rabbitmq中exchange的几种形式

    rabbitmq中exchange的几种形式 RabbitMQ 消息传递模型的核心思想是 生产者生产的消息从不会直接发送到队列 实际上 xff0c 通常生产 者甚至都不知道这些消息传递传递到了哪些队列中 相反 xff0c 生产者只能将消息发
  • 7.rabbitmq死信和死信队列

    rabbitmq死信和死信队列 概述 先从概念解释上搞清楚这个定义 xff0c 死信 xff0c 顾名思义就是无法被消费的消息 xff0c 字面意思可以这样理 解 xff0c 一般来说 xff0c producer 将消息投递到 broke
  • 8.rabbitmq发布确认

    rabbitmq发布确认 生产者将信道设置成 confirm 模式 xff0c 一旦信道进入 confirm 模式 xff0c 所有在该信道上面发布的 消息都将会被指派一个唯一的 ID 从 1 开始 xff0c 一旦消息被投递到所有匹配的队
  • 9.延迟队列

    延迟队列 延迟队列的概念 延时队列 队列内部是有序的 xff0c 最重要的特性就体现在它的延时属性上 xff0c 延时队列中的元素是希望 在指定时间到了以后或之前取出和处理 xff0c 简单来说 xff0c 延时队列就是用来存放需要在指定时
  • 10.回退消息

    rabbitmq回退消息 mandatory参数 在仅开启了生产者确认机制的情况下 xff0c 交换机接收到消息后 xff0c 会直接给消息生产者发送确认消息 xff0c 如果发现该消息不可路由 xff0c 那么消息会被直接丢弃 xff0c
  • 11.备份交换机

    备份交换机 概念 当交换机收到一条不可路由消息时 xff0c 将会把这条消息转发到备份交换机中 xff0c 由备份交换机来进行转发和处理 xff0c 通常备份交换机的类型为fanout xff0c 这样就能把所有消息都投递到与其绑定的队列中
  • 12.优先级队列和惰性队列

    优先级队列 如何添加优先级 选择Maximum priority xff0c 指定优先级的数值 xff0c 设定范围为0 255 xff0c 如果值为10 xff0c 那么就是0 10 xff0c 最大不能超过255 代码形式 span c
  • 13.rabbitmq集群搭建

    rabbitmq集群搭建和镜像队列 集群搭建 准备三台服务器 172 16 140 133 Jan172 16 140 132 Feb172 16 140 133 Mar 修改3台机器的hosts文件 span class token fu
  • 14.haproxy+keepalived负载均衡和高可用

    haproxy 43 keepalived负载均衡和高可用 概述 多个rabbitmq服务形成集群 xff0c 由haproxy来做负载均衡 xff0c haproxy会暴露出来一个端口 xff0c 客户端可以通过haproxy所在的服务器
  • 15.federation

    federation和shovel federation exchange 问题的由来 xff1a 城市A有rabbitmqA xff0c 城市B有rabbitmqB xff0c 当城市B的应用要发消息到exchangeA的时候 xff0c
  • vue瀑布流插件vue-waterfall-easy 2.x

    不知道大家都是怎么用瀑布流的 xff0c 一开始尝试用flex布局失败 xff0c 后面找到了这个组件 xff0c 还是挺好用的 xff0c 记录一下 首先是用npm安装npm install vue waterfall easy save
  • 1.JUL

    JUL JUL全称Java util Logging是java原生的日志框架 xff0c 使用时不需要另外引用第三方类库 xff0c 相对其他日志框架使用方便 xff0c 学习简单 xff0c 能够在小型应用中灵活使用 架构介绍 Logge
  • Log4j2

    Log4j2 目前市面上最主流的日志门面就是SLF4J xff0c 虽然Log4j2也是日志门面 xff0c 因为它的日志实现功能非常强 大 xff0c 性能优越 所以大家一般还是将Log4j2看作是日志的实现 xff0c Slf4j 43
  • LOG4J

    LOG4J Log4j是Apache下的一款开源的日志框架 xff0c 通过在项目中使用 Log4J xff0c 我们可以控制日志信息输出到控 制台 文件 甚至是数据库中 我们可以控制每一条日志的输出格式 xff0c 通过定义日志的输出级别

随机推荐

  • Slf4j(门面)

    Slf4j 简单日志门面 Simple Logging Facade For Java SLF4J主要是为了给Java日志访问提供一套标准 规范 的API框架 xff0c 其主要意义在于提供接口 xff0c 具体的实现可以交由其他日志框架
  • Logback

    Logback Logback是由log4j创始人设计的另一个开源日志组件 xff0c 性能比log4j要好 官方网站 https logback qos ch index html Logback主要分为三个模块 logback core
  • 嵌入式-C语言常见面试/笔试题

    1 关键字类型题 常见的关键字有 sizeof static const volatile 1 sizeof xff1a 通常与strlen做比较不同 例1 xff1a char str 61 Hello char p 61 str int
  • node.js的http模块输出request参数

    xff08 只作为本人自己记录所用 xff0c 参考需谨慎 xff09 ServerResponse 服务响应 domain null 域名 events finish Function resOnFinish 项目 eventsCount
  • ATI F/T Gamma sensor( 力和力矩传感器 ) 开箱测评 + 使用说明

    型号和序列号等参数如下 xff1a Description Six Axis Force Torque Sensor Manufacturer ATI Industrial Automation Serial Number FT29352
  • 阿克曼转向原理解析

    汽车的转向过程就是阿克曼转向 其也是移动机器人的一种运动模式之一 阿克曼基本原理 xff1a 汽车在行驶过程中 xff08 直线和转弯时候 xff09 xff0c 每个车轮的运动估计必须符合他的自然运动轨迹 xff0c 从而保证轮胎与地面始
  • 通过ROS控制真实机械臂(18) --- 构建 octocmap 用于碰撞检测和避障

    师兄和同门在做SLAM的时候 xff0c 经常会用到的 octomap xff0c 也就是八叉树地图 octomap相比于点云地图来说大大减小了地图的存储空间 既然octomap可以用于导航和避障 xff0c 那么自然也可以导入moveit
  • 【实用版】卡尔曼滤波及其扩展方法的区别与定位系统中的应用

    卡尔曼滤波及其扩展方法的区别与定位系统中的应用 卡尔曼滤波卡尔曼滤波的扩展EKFSPKFEnKF 定位系统中的应用 源自于学校课题 xff0c 主要用卡尔曼滤波KF及其扩展方法 xff08 包括扩展卡尔曼滤波EKF Sigma点卡尔曼滤波S
  • CP2102 USB to UART Bridge Controller 驱动安装(windows or Ubuntu)

    CP2102是一款USB转TTL电平的USB转串口芯片 xff0c 使用时发现诸多小网站上的驱动不是病毒就是安装后无效 xff0c 经同事推荐去官网下载后成功连接 官网地址 xff1a https www silabs com produc
  • 解决罗技GHUB 安装 一直初始化 下载不了问题

    罗技的GHUB在安装时一直处于初始化状态 xff0c 可以通过修改时间解决 原地址 罗技 GHub 解决初始化无法安装教程 侵删
  • 基于Cartographer的建图与导航

    一 RoboSense 16线雷达驱动安装 2 二 Cartographer的安装 2 三 配置文件结构说明 4 四 配置文件详解 4 2D lua文件的配置 5 2D launch文件的配置 6 2D pure location lua文
  • Ubuntu18.04安装autoware.ai

    前言 Autoware AI是世界上第一个用于自动驾驶技术的 All in One 开源软件 xff0c 关于它的介绍就不再赘述了 xff0c 感兴趣的可以去看一下知乎文章 xff0c 这里主要说明一下autoware ai的安装配置 之前
  • Baxter工作站建立及简单使用

    1 硬件 1个 Baxter Research Robot1台PC机或笔记本 xff0c 安装好Ubuntu系统 xff08 推荐Ubuntu16 04安装ROS kinetic xff09 1个无线路由器 xff08 千兆网口 xff09
  • selenium网页自动登录、打卡(二)

    文章目录 前言一 Python 43 Selenium二 通信环境 xff08 服务器 客户端 xff09 1 selenium借助cookie网页登录csdn2 私信发送消息流程3 将新增的逻辑融入原本的程序 前言 前面做了一个自动打卡的
  • 解决浏览器“由你的组织管理”或“由贵单位管理”

    寒假在家使用自己电脑时 xff0c 浏览器出现意外关闭 xff0c 一次以为没什么 xff0c 这两天出现好几次 xff0c 时不时地来一下 xff0c 太搞心态了 xff0c 必须给他解决了 一番检查后 xff0c 是浏览器自动安装了一款
  • Ubuntu18.04屏幕分辨率问题

    Ubuntu18 04屏幕分辨率问题 起因 本来昨天还好好的 xff0c 过了一夜 xff0c 就变了 xff0c 像极了咳咳 自行脑补 redwallbot 2小车上固定的屏幕 xff0c 屏幕分辨率本来应该是1920x1080的 xff
  • 使用frp实现内网穿透

    使用frp实现内网穿透 引言 一打五师兄走之前留了一块树莓派给我 xff0c 暑假闲来无事拿出来玩玩 如果每次都连接显示屏和键盘使用有点麻烦而且低级 正常笔记本和树莓派都连着实验室的WIFI xff0c 网段一样 xff0c 是可以ssh远
  • ffmpeg+nginx-rtmp转发视频流

    nginx与nginx rtmp module安装 画了好几天图 xff0c 实在有些乏力 xff0c 找点有意思的事情做做 觉得视频流传输挺有意思 xff0c B站找了些视频 xff0c 但感觉有些大同小异 xff0c 讲得不是很清楚 F
  • 2013 google校园招聘笔试题

    2013 google校园招聘笔试题 回忆版 xff0c 难免有错误 xff0c 欢迎指正 同时欢迎大家在评论中讨论答案 1 单项选择题 1 1如果把传输速率定义为单位时间内传送的信息量 xff08 以字节计算 xff09 多少 关于一下几
  • 调用微信公众号接口给女票每天打卡

    文章目录 前言一 微信公众号接口二 使用步骤 前言 最近网上很火的给女朋友做公众号推送 xff0c 作者 小红书 64 猪咪不是猪 且做作者 大方的共享成品 源码 43 教学 43 自动版本 起初 xff0c 人们认为这仅仅只是个简单且幼稚