实战 您所在的位置:网站首页 python抓取新闻每日推送微信内容怎么设置 实战

实战

#实战| 来源: 网络整理| 查看: 265

抖音上看到女友分享的别人家程序员男友写的一个定时微信公众号推送消息的小功能,自己尝试写了一下,供大家参考。

先上效果图:

首先分析需求、效果图,完成功能需要:

微信公众平台(注册一个测试账号)接入微信公众平台——对话服务——发送消息——模板消息(业务通知)接口完成第二步接口需获取access_token及接收方id(获取用户列表)制定模板内容(当前时间、爬取天气状况、计算纪念日、计算生日、情话)拼接模板内容windows制定计划任务实现每日问候!

附代码: 

# -*- encoding:utf-8 -*- import random import requests import json import datetime import calendar import time from bs4 import BeautifulSoup from zhdate import ZhDate import emoji import urllib.request import urllib.parse class SendMessage(): def __init__(self): rq = self.get_rq() tq = self.get_tq() jnr = self.get_jnr() sr = self.get_sr() body =rq+"\n"+tq+"\n"+jnr+"\n"+sr; self.dataJson ={"first":"哈喽,宝贝!", "body":body+" ", "remark":self.get_qh()[random.randint(0, len(self.get_qh())-2)]+" " } self.appID = '' self.appsecret = '' self.template_id = ''//模板id self.access_token = self.get_access_token() self.opend_ids = self.get_openid() def get_qh(self): qhStr=""; file_object1 = open("D:\workspaces\python/venv\qh.txt", 'r',encoding="utf-8") try: while True: line = file_object1.readline() if line: qhStr+=line.rstrip()+"#" else: break finally: file_object1.close() return qhStr.split("#") def get_rq(self): sysdate = datetime.date.today() # 只获取日期 now_time = datetime.datetime.now() # 获取日期加时间 week_day = sysdate.isoweekday() # 获取周几 week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天'] return '现在是' + str(now_time)[0:16] + ',' + week[week_day - 1]+"。" def get_tq(self): url = 'http://www.weather.com.cn/weather/101010300.shtml' sysdate = datetime.date.today() r = requests.get(url, timeout=30) # 用requests抓取网页信息 r.raise_for_status() # 可以让程序产生异常时停止程序 r.encoding = r.apparent_encoding # 编码格式 html = r.text final_list = [] soup = BeautifulSoup(html, 'html.parser') # 用BeautifulSoup库解析网页 #soup里有对当前天气的建议 body = soup.body # 从soup里截取body的一部分 data = body.find('div', {'id': '7d'}) ul = data.find('ul') lis = ul.find_all('li') for day in lis: temp_list = [] date = day.find('h1').string # 找到日期 if date.string.split('日')[0] == str(sysdate.day): temp_list = [] date = day.find('h1').string # 找到日期 temp_list.append(date) info = day.find_all('p') # 找到所有的p标签 temp_list.append(info[0].string) if info[1].find('span') is None: # 找到p标签中的第二个值'span'标签——最高温度 temperature_highest = ' ' # 用一个判断是否有最高温度 else: temperature_highest = info[1].find('span').string temperature_highest = temperature_highest.replace('℃', ' ') if info[1].find('i') is None: # 找到p标签中的第二个值'i'标签——最高温度 temperature_lowest = ' ' # 用一个判断是否有最低温度 else: temperature_lowest = info[1].find('i').string temperature_lowest = temperature_lowest.replace('℃', ' ') temp_list.append(temperature_highest) # 将最高气温添加到temp_list中 temp_list.append(temperature_lowest) # 将最低气温添加到temp_list中 final_list.append(temp_list) # 将temp_list列表添加到final_list列表中 return '天气情况是' + final_list[0][1] + ',温度是' + final_list[0][3].strip() + '~' + \ final_list[0][2].strip() + '摄氏度。' def get_sr(self): today = datetime.datetime.now() data_str = today.strftime('%Y-%m-%d') oneDay = ZhDate(today.year, 9, 6).to_datetime() difference = oneDay.toordinal() - today.toordinal() if difference >0 : return ("距离我滴宝生日,还有 %d 天。" % (difference)) elif difference==0: return ('生日快乐!!🍓我滴宝🍓') else: return ('还要很久才过生日,别琢磨啦!') def get_jnr(self): today = datetime.datetime.now() data_str = today.strftime('%Y-%m-%d') oneDay = ZhDate(2020, 12, 29).to_datetime() d = today.toordinal()-oneDay.toordinal() return ("\t我们已经相爱 %d 天。\n\t%d 年 %d 个月 %d 天。\n\t%d 个月 %d 天。\n\t%d 周 %d 天。" % (d,d // 365, (d % 365) // 30, (d % 365) % 30, d // 30, d % 30, d // 7, d % 7)) def get_access_token(self): """ 获取微信公众号的access_token值 """ url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}'.\ format(self.appID, self.appsecret) headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36' } response = requests.get(url, headers=headers).json() access_token = response.get('access_token') return access_token def get_openid(self): """ 获取所有粉丝的openid """ next_openid = '' url_openid = 'https://api.weixin.qq.com/cgi-bin/user/get?access_token=%s&next_openid=%s' % (self.access_token, next_openid) ans = requests.get(url_openid) open_ids = json.loads(ans.content)['data']['openid'] return open_ids def sendmsg(self): """ 给所有粉丝发送文本消息 """ url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={}".format(self.access_token) if self.opend_ids != '': for open_id in self.opend_ids: body = { "touser": open_id, "template_id": self.template_id, "url": "https://www.baidu.com/", "topcolor": "#FF0000", "data": { "first": { "value": self.dataJson.get("first"), "color": "#FF99CC" }, "body": { "value": self.dataJson.get("body"), "color": "#000000" }, "remark": { "value": self.dataJson.get("remark"), "color": "#66CCFF" } } } data = bytes(json.dumps(body, ensure_ascii=False).encode('utf-8')) response = requests.post(url, data=data) # 这里可根据回执code进行判定是否发送成功(也可以根据code根据错误信息) result = response.json() print(result) else: print("当前没有用户关注该公众号!") if __name__ == "__main__": sends = SendMessage() sends.sendmsg()

写在最后:

情话爬取研究了一下午,卡在百度验证上,索性摘抄了几十个。。。

代码都是百度上拼的,侵权请联系。

新手小白,大佬轻喷。😂



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有