Python 天气预报+微信

"""
Description:
需要提供以下三个信息,在申请到的微信企业号当中可以找到
agentid
corpid
corpsecret
Author:Nod
Date:18-04-10
Record:  v1   1 先爬取当前天气   调用微信企业号进行发送
v2 :
import urllib
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url='http://www.weather.com.cn/weather/101191101.shtml', headers=headers)
resp=urllib.request.urlopen(req).read()
应对爬虫处理方案:HTTP Error 403: Forbidden
#---------------------------------v1-----------------------------------#
"""

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
import urllib.request
import json
import urllib
#--------------------------------
# 获取企业微信token
#--------------------------------

def get_token(url, corpid, corpsecret):
    token_url = '%s/cgi-bin/gettoken?corpid=%s&corpsecret=%s' % (url, corpid, corpsecret)
    token = json.loads(urllib.request.urlopen(token_url).read().decode())['access_token']
    return token

#--------------------------------
# 构建告警信息json
#--------------------------------
def messages(msg):
    values = {
        "touser": '@all',
        "msgtype": 'text',
        "agentid": 1000002, #修改为对应应用的agentid
        "text": {'content': msg},
        "safe": 0
        }
    msges=(bytes(json.dumps(values), 'utf-8'))
    return msges

#--------------------------------
# 发送告警信息
#--------------------------------
def send_message(url,token, data):
        send_url = '%s/cgi-bin/message/send?access_token=%s' % (url,token)
        respone=urllib.request.urlopen(urllib.request.Request(url=send_url, data=data)).read()
        x = json.loads(respone.decode())['errcode']
        # print(x)
        if x == 0:
            print ('Succesfully')
        else:
            print ('Failed')

##############函数结束########################

corpid = 'ww7dd0074bd8b006f9'
corpsecret = '8gPCvguwomL0WMej8fcghxQgOY-y0LlGQsAicaDHvA8'
url = 'https://qyapi.weixin.qq.com'

#调取天气部分
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url='http://www.weather.com.cn/weather/101191101.shtml', headers=headers)
resp=urllib.request.urlopen(req).read()
soup=BeautifulSoup(resp,'html.parser')
tagToday=soup.find('p',class_="tem")  #第一个包含class="tem"的p标签即为存放今天天气数据的标签
try:
    temperatureHigh=tagToday.span.string  #有时候这个最高温度是不显示的,此时利用第二天的最高温度代替。
except AttributeError as e:
    temperatureHigh=tagToday.find_next('p',class_="tem").span.string  #获取第二天的最高温度代替

temperatureLow=tagToday.i.string  #获取最低温度
weather=soup.find('p',class_="wea").string #获取天气

# print('最低温度:' + temperatureLow)
# print('最高温度:' + temperatureHigh)
# print('天气:' + weather)

msg='常州天气汇总:'+'最低温度:' + temperatureLow+' 最高温度:' + temperatureHigh+' 天气:' + weather

#调取天气结束

#函数调用
test_token=get_token(url, corpid, corpsecret)
msg_data= messages(msg)
send_message(url,test_token, msg_data)

 urllib.request.urlopen() 方法经常会被用来打开一个网页的源代码,然后会去分析这个页面源代码,但是对于有的网站使用这种方法时会抛出"HTTP Error 403: Forbidden"异常

因而对程式进行了更新

对比老版本:

下面运行目前会有报错

"""
Description:
需要提供以下三个信息,在申请到的微信企业号当中可以找到
agentid
corpid
corpsecret
Author:Nod
Date:18-04-10
Record:  v1   1 先爬取当前天气   调用微信企业号进行发送
#---------------------------------v1-----------------------------------#
"""

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
import urllib.request
import json

#--------------------------------
# 获取企业微信token
#--------------------------------

def get_token(url, corpid, corpsecret):
    token_url = '%s/cgi-bin/gettoken?corpid=%s&corpsecret=%s' % (url, corpid, corpsecret)
    token = json.loads(urllib.request.urlopen(token_url).read().decode())['access_token']
    return token

#--------------------------------
# 构建告警信息json
#--------------------------------
def messages(msg):
    values = {
        "touser": '@all',
        "msgtype": 'text',
        "agentid": 1000002, #修改为对应应用的agentid
        "text": {'content': msg},
        "safe": 0
        }
    msges=(bytes(json.dumps(values), 'utf-8'))
    return msges

#--------------------------------
# 发送告警信息
#--------------------------------
def send_message(url,token, data):
        send_url = '%s/cgi-bin/message/send?access_token=%s' % (url,token)
        respone=urllib.request.urlopen(urllib.request.Request(url=send_url, data=data)).read()
        x = json.loads(respone.decode())['errcode']
        # print(x)
        if x == 0:
            print ('Succesfully')
        else:
            print ('Failed')

##############函数结束########################

corpid = 'ww7dd0074bd8b006f9'
corpsecret = '8gPCvguwomL0WMej8fcghxQgOY-y0LlGQsAicaDHvA8'
url = 'https://qyapi.weixin.qq.com'

#调取天气部分

resp=urlopen('http://www.weather.com.cn/weather/101191101.shtml')
soup=BeautifulSoup(resp,'html.parser')
tagToday=soup.find('p',class_="tem")  #第一个包含class="tem"的p标签即为存放今天天气数据的标签
try:
    temperatureHigh=tagToday.span.string  #有时候这个最高温度是不显示的,此时利用第二天的最高温度代替。
except AttributeError as e:
    temperatureHigh=tagToday.find_next('p',class_="tem").span.string  #获取第二天的最高温度代替

temperatureLow=tagToday.i.string  #获取最低温度
weather=soup.find('p',class_="wea").string #获取天气

# print('最低温度:' + temperatureLow)
# print('最高温度:' + temperatureHigh)
# print('天气:' + weather)

msg='常州天气汇总:'+'最低温度:' + temperatureLow+' 最高温度:' + temperatureHigh+' 天气:' + weather

#调取天气结束

#函数调用
test_token=get_token(url, corpid, corpsecret)
msg_data= messages(msg)
send_message(url,test_token, msg_data)

猜你喜欢

转载自www.cnblogs.com/nodchen/p/9180703.html