zoukankan      html  css  js  c++  java
  • Python 天气预报+微信

    """
    Description:
    需要提供以下三个信息,在申请到的微信企业号当中可以找到
    agentid
    corpid
    corpsecret
    Author:Nod
    Date:18-06-13
    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)
  • 相关阅读:
    【52】目标检测之检测算法
    【51】目标检测之特征点检测
    6-----Scrapy框架中Item Pipeline用法
    5-----Scrapy框架中Spiders用法
    4-----Scrapy框架中选择器的用法
    3-----Scrapy框架的命令行详解
    1-----Scrapy框架整体的一个了解
    Python入妖5-----正则的基本使用
    win安装wordcloud报错解决方案
    在新项目下使用rbc权限
  • 原文地址:https://www.cnblogs.com/nodchen/p/9180703.html
Copyright © 2011-2022 走看看