最近找到一个公众号(WxPusher消息推送平台),提供了api接口和开发文档,可以借助python程序实现每日的消息推送,通过发送post请求,用户只需要扫描二维码就能实现推送的功能,并且支持群发。详细如下:
这里将每日的天气和一些文案信息爬取出来整合成字符串作为信息加入到待推送的信息中。
1、将要爬取的天气等信息整理成字符并封装成函数作为返回值返回,方便后面调用。
# 获取信息
def get_info():
url1 = '' # 要爬取的天气预报网站(此处抹去)
url2 = '' # 文案网站(此处抹去)
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) '
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'}
response2 = requests.get(url2, headers=header) # 发送网络请求
response2.encoding = 'utf-8' # 编码
html2 = etree.HTML(response2.text) # 解析html字符串
global number
div_all2s = html2.xpath('.//div[@class="mbox fl"]//div[@class="content"]/p[{page}]//text()'.format(page=number))
div_all2 = processing(div_all2s)
copywritting = div_all2
response1 = requests.get(url1,headers=header) # 发送网络请求
response1.encoding = 'utf-8' # 编码
html1 = etree.HTML(response1.text) # 解析html字符串
div_all1 = html1.xpath('//dl[@class="weather_info"]')
for div in div_all1:
names = div.xpath('.//a/@title')
name = processing(names)
areas = div.xpath('.//dd[@class="name"]//h1/text()')
area = processing(areas)
name = '今日' + name
times=div.xpath('.//dd[@class="week"]/text()')
time=processing(times)
brief_times = time.split('日')[0]
brief_time = processing(brief_times)
Ts = div.xpath('.//dd[@class="weather"]//span//text()')
T = processing(Ts)
humid_1 = processing(div.xpath('.//dd[@class="shidu"]/b[1]//text()'))
humid_2 = processing(div.xpath('.//dd[@class="shidu"]/b[2]//text()'))
humid_3 = processing(div.xpath('.//dd[@class="shidu"]/b[3]//text()'))
humid = humid_1 + '\n' + humid_2 + '\n' + humid_3
air_qualitys = div.xpath('.//dd[@class="kongqi"]/h5/text()')
air_quality = processing(air_qualitys)
pms = div.xpath('.//dd[@class="kongqi"]/h6/text()')
pm = processing(pms)
suns = div.xpath('.//dd[@class="kongqi"]/span/text()')
sun = processing(suns)
cartoon = """
へ /|
/\7 ∠_/
/ │ / /
│ Z _,< / /`ヽ
│ ヽ / 〉
Y ` / /
イ● 、 ● ⊂⊃〈 /
() へ | \〈
>ー 、_ ィ │ //
/ へ / ノ<| \\
ヽ_ノ (_/ │//
7 |/
>―r ̄ ̄`ー―_6"""
weather_condition = (name + ': \n' +
'时间: ' + time + '\n\n' + '温度: ' + T + '\n\n' + humid + '\n' + air_quality + '\n'
+ pm + '\n' + sun + '\n\n' + cartoon)
global summary
summary = brief_time + '日' + area + ':' + '\n\n' + ' ! ' + T + ' !' + '\n\n' + sun + '\n\n' + copywritting
return (weather_condition)
2、发送post请求,将要推送的信息传递出去。
url='http://wxpusher.zjiecode.com/api/send/message'
headers = {"content-type":"application/json"}
dat={
"appToken":"AT_7zKfBalcmZEPARaha0guEr5crjsrVOZh",
"content":get_info(), # 调用函数,获取推送的内容
"summary":summary,#消息摘要,显示在微信聊天页面或者模版消息卡片上,限制长度100,可以不传,不传默认截取content前面的内容。
"contentType":1,#内容类型 1表示文字 2表示html(只发送body标签内部的数据即可,不包括body标签) 3表示markdown
"topicIds":[
7826 #发送目标的topicId,是一个数组!!!,也就是群发,使用uids单发的时候, 可以不传。
],
"uids":[#'UID_GOgrMd1Ad1FEEpRdbY41jl9PGY1x','UID_hBw1gAtLkne1INAQjyy2qS9iyO8o'
],
"url":"https://www.csdn.net/", #原文链接,可选参数
#"verifyPay": false #是否验证订阅时间,true表示只推送给付费订阅用户,false表示推送的时候,不验证付费,不验证用户订阅到期时间,用户订阅过期了,也能收到。
}
#post请求,发送的数据必须放在字典中,通过data参数传递出去
resp=requests.post(url,json=dat,headers=headers)
3、实现效果:
这里附上WxPusher的官方开发文档,上面有详细操作,有兴趣的小伙伴可以尝试,创作不易,希望大家多多支持。
WxPusher 开发文档:https://wxpusher.zjiecode.com/docs/#/