自动采集推送( 先创建一个函数,用来维护接收该消息的好友名单)

优采云 发布时间: 2022-03-25 12:15

  自动采集推送(

先创建一个函数,用来维护接收该消息的好友名单)

  from wxpy import * #该库主要是用来模拟与对接微信操作的

import requests

from datetime import datetime

import time

import schedule

from apscheduler.schedulers.blocking import BlockingScheduler #定时框架

  先引入需要的库,如果不存在请先用pip安装

  pip install schedule

  接下来,登录微信

  bot = Bot(cache_path=True)

  cache_path = True 表示开启缓存,这样可以避免在缓存生效的情况下每次启动程序都被微信扫码。

  然后我们写一个变量来存储图灵机器人的key,后面会用到(去图灵申请免费机器人)

  tuling = Tuling(api_key="图灵机器人的key")

  接下来是主要内容,这里我们会向微信好友发送天气提醒,所以先创建一个函数来维护收到消息的好友列表

  """推送名单维护"""

def weather_friend(): #定义一个名为weather_friend的函数

# 天气推送名单

my_friends = [] # 创建一个空列表,用来存放好友名单

my_friends.append(bot.friends().search(u'单伊夏')[0]) # 搜索指定好友并添加至列表

my_friends.append(bot.friends().search(u'')[0])

my_friends.append(bot.friends().search(u'佐之格⊙魅殇')[0])

return my_friends

  在此处搜索指定好友时,可以根据好友的微信名进行搜索。如果你有喜欢改昵称的朋友,我们也可以用备注名搜索,句子都是一样的。

  现在我们有了发送列表,我们应该准备要发送的内容:

  def Weather(location): # 定义一个发送天气的函数,并需要接收一个参数(该参数是好友在微信中设置的地点)

#准备url地址

path ='http://api.map.baidu.com/telematics/v3/weather?location=%s&output=json&ak=TueGDhCvwI6fOrQnLM0qmXxY9N0OkOiQ&callback=?'

url = path % location

response = requests.get(url) # 对该地址和参数进行get请求

result = response.json() # 将返回的结果转成json串

  # 为了防止因好友未设置地点而导致程序报错,所以需要对返回的error参数进行判断

if int(result['error']) != 0: # 当error为0时,搜索是正常的,一旦不等于0,表示存在错误

location = '北京' # 此时将地址设为一个默认地址 如北京

url = path % location # 拼接新的url

response = requests.get(url) # 在对新的url进行get请求

result = response.json()

  # 下面就是对正确请求到数据后的结果进行处理了

# 问候语

greetings = (' 早上好!这是今天的天气预报!……\n机器人:你的小野猫\n')

try: # 此处增加异常处理是因为当好友设置的地区为国外的时候,error返回值不会报错,但不会有results

# 取出天气结果

results = result['results']

except:

return "啊哦,我迷路了,找不到地点!" # 当没有该地区的结果时,函数直接返回字符串,此时函数结束

  # 当正常取出结果后,继续进行下列操作

# 取出数据字典第一天数据

data1 = results[0]

# 取出城市

city = data1['currentCity']

str1 = ' 你的城市: %s\n' % city

# 取出pm2.5值

pm25 = data1['pm25']

str2 = ' PM值: %s\n' % pm25

# 评估空气质量

pollution = calculate(pm25) # 此时调用calculate函数进行计算,所以该函数要写在此函数之前

str3 = ' 污染指数: %s\n' % pollution

result1 = results[0]

weather_data = result1['weather_data']

data = weather_data[0]

temperature_now = data['date']

str4 = ' 当前温度: %s\n' % temperature_now

wind = data['wind']

str5 = ' 风向 : %s\n' % wind

weather = data['weather']

str6 = ' 天气 : %s\n' % weather

str7 = ' 温度 : %s\n' % data['temperature']

try: # 此处异常操作是因为有时候返回结果里面不存在下方内容

message = data1['index']

str8 = ' 穿衣 : %s\n' % message[0]['des']

str9 = ' 我很贴心: %s\n' % message[2]['des']

str10 = ' 运动 : %s\n' % message[3]['des']

str11 = ' 紫外线 : %s\n' % message[4]['des']

str = greetings + str1 + str2 + str3 + str4 + str5 + str6 + str7 + str8 + str9 + str10 + str11

except:

str = greetings + str1 + str2 + str3 + str4 + str5 + str6 + str7

return str

  我从网上找到了这段代码。由于源码中存在一些问题,很容易报错,所以在一些地方增加了异常处理。

  添加函数计算 pm2.5

  # 计算pm2.5的程度

def calculate(pm):

if pm == '':

pm25 = -1

else:

pm25 = int(pm)

# 通过pm2.5的值大小判断污染指数

if 0 = 250:

pollution = '严重污染'

else:

pollution = '希望你健在'

return pollution

  接下来我们创建一个发送函数

  # 1- 天气推送

def send_weather():

my_friends = weather_friend()

# 发送给好友

for friend in my_friends:

friend.send(Weather(friend.city)) # friend.city 可获取到好友在微信上设置的地点

# 给文件传输助手发送消息

bot.file_helper.send('天气推送完毕')

  最后,我们创建一个定时器,当时间到了,我们调用发送函数

  """推送时间维护"""

print('star')

sched = BlockingScheduler()

sched.add_job(send_weather, 'cron', month='1-12', day='1-31', hour=7, minute=0) # 表示每天的7点发送

sched.start()

  因此,结束了

  梳理一下整体思路:定时器,时间一到就调用send函数,send函数调用friend函数获取位置,传给weather函数,weather函数处理返回发送的内容,最后发给相关的朋友

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线