zoukankan      html  css  js  c++  java
  • python定时给指定微信女朋友发送天气预报和每日一句自动聊天抢红包抢票

    python-定时给指定微信女朋友发送天气预报和每日一句自动聊天抢红包抢票

    2019年05月04日 16:46:41 Harrison.H 阅读数 460

    wxpy: 用 Python 玩微信

    Python定时自动给微信好友发送天气预报

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals
    from wxpy import *
    import requests
    from datetime import datetime
    import time
    from apscheduler.schedulers.blocking import BlockingScheduler  # 定时框架
    from urllib.request import urlopen
    from bs4 import BeautifulSoup
    
    bot = Bot(cache_path=True)  # 登陆微信
    tuling = Tuling(api_key='4a0488cdce684468b95591a641f0971d')  # 机器人api
    
    # 单个好友
    # friend = bot.friends().search('harrison')[0]#好友的微信昵称,或者你存取的备注
    #location = friend.city
    # print(friend)
    # print(friend.city)
    
    
    # 好友列表
    friendlist = [ensure_one(bot.search(remark_name='father')),
                  bot.friends().search(remark_name='d')[0],
                  bot.friends().search(remark_name='申')[:],
                  bot.friends().search(remark_name='harrison')[0]
                  ]
    print(friendlist)
    
    
    def get_weather(location):
        # 准备url地址,得出location的结果
        path = 'http://api.map.baidu.com/telematics/v3/weather?location=%s&output=json&ak=TueGDhCvwI6fOrQnLM0qmXxY9N0OkOiQ&callback=?'
        url = path % location
        response = requests.get(url)
        result = response.json()
        str1 = '    你的城市: %s\n' % location
    
        # 如果城市错误就按照成都的结果
        if result['error'] != 0:
            str1 = '    你的地区%s获取失败,请修改资料。默认参数:深圳\n' % location
            location = '深圳'
            url = path % location
            response = requests.get(url)
            result = response.json()
    
        str0 = ('    这是明天的天气预报!来自贴心的Harrison\n')
        results = result['results']
        # 取出数据字典
        data1 = results[0]
        # 取出pm2.5值
        pm25 = data1['pm25']
        str2 = '    PM2.5 : %s  ' % pm25
        # 将字符串转换为整数 否则无法比较大小
        pm25 = int(pm25)
        if pm25 == '':
            pm25 = 0
        # 通过pm2.5的值大小判断污染指数
        if 0 <= pm25 < 35:
            pollution = '优'
        elif 35 <= pm25 < 75:
            pollution = '良'
        elif 75 <= pm25 < 115:
            pollution = '轻度污染'
        elif 115 <= pm25 < 150:
            pollution = '中度污染'
        elif 150 <= pm25 < 250:
            pollution = '重度污染'
        elif pm25 >= 250:
            pollution = '严重污染'
        str3 = '    空气指数: %s\n' % pollution
        result1 = results[0]
        weather_data = result1['weather_data']
        data = weather_data[1]
        datetime = data['date']
        temperature = data['temperature']
        str4 = '    明天温度: %s%s\n' % (datetime, temperature)
        wind = data['wind']
        str5 = '    风向 : %s\n' % wind
        weather = data['weather']
        str6 = '    天气 : %s\n' % weather
     #  str7 ='    温度 : %s\n' % data['temperature']
        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']
        #str12="\n   请注意身体~\n"
        str = str0 + str1 + str2 + str3 + str4 + str5 + str6 + str8 + str11
        return str
    
    
    def get_iciba():
        url = "http://open.iciba.com/dsapi/"
        r = requests.get(url)
        content = r.json()['content']
        note = r.json()['note']
        str = '    每日一句:\n' + content + '\n' + note + '\n'
        return str
    
    # 发送函数
    
    
    def send_message():
        for i in range(len(friendlist)):
            friend = friendlist[i]
            location = friend.city
            print(i + 1, '/%s' % len(friendlist), ' 姓名:%s' %
                  friend, ' 地区:%s' % location)
            text = get_weather(friend.city) + get_iciba() + '    好梦~'
            friend.send(text)
            # 发送成功通知我
            bot.file_helper.send(friend)
            bot.file_helper.send('发送完毕')
        return
    
    # 执行程序时直接发送
    # send_message()
    
    # 定时器
    print('start')
    sched = BlockingScheduler()
    sched.add_job(send_message, 'cron', day_of_week='0-6',
                  hour=23, minute=00)  # 设定发送的时间
    sched.start()
    
    •  

    自动聊天抢红包抢票

    # -*- coding: utf-8 -*-
    '''
    这一次对上一个demo进行了扩充
    主要是添加了tuling机器人的自动回复以及让python进程保持且可以调试
    主要还是归功于wxpy的embed()函数。。。
    tulingKey需要自己申请
    很简单,上网站注册一下账号就ok了
    下面给出图灵网址:http://www.tuling123.com/
    
    然后就是wxpy的灵活使用,详情可以参照官网的API文档
    网址:http://wxpy.readthedocs.io/zh/latest/index.html
    
    然后接下来就是我写的一个小例子
    主要功能有
    1、单人聊天消息反馈(备注在代码里改,懒得写交互了,反正大家都懂得)
    2、单人聊天消息发送(根据输入的备注,这里写了简单的交互,没写exception处理)
    3、图灵自动聊天(可以通过关闭注册函数来关闭或者开启)
    
    注意此代码不可直接复制粘贴:
    1、需要自己申请tulingkey赋值
    2、需要指定进程保持时候和谁通信
    当然也可以自己做修改自由发挥!
    '''
    
    from __future__ import unicode_literals
    from wxpy import *
    import requests
    from threading import Timer
    from tkinter import *
    
    tulingKey = 'xxxxx'
    itchat = Bot(console_qr=2,cache_path="botoo.pkl")
    friend = itchat.friends().search(name = u'xxxx')
    tuling = Tuling(api_key=tulingKey)
    def getNews():
        url = "http://open.iciba.com/dsapi/"
        r = requests.get(url)
        content = r.json()['content']
        note = r.json()['note']
        return content, note
    #tuling自动回复的消息注册
    
    def reply(msg):
        return tuling.do_reply(msg)
    
    #接受到消息后的打印
    @itchat.register(msg_types=TEXT)
    def printMsg(msg):  
        print(msg)
        print('tuling自动回复消息---'+reply(msg))
    #发送每日一句消息函数
    def sendNews():
        try:
            #这里是备注print
    
    
            content = getNews()
    
            message1 = str(content[0])
            message2 = str(content[1])
            print('--------------今日内容:-------------\n'+message1+'\n'+message2+"\n---------------------------------")
            # message3 = "进行最后一项测试embed()"
            print('----当前friend对象为:'+str(friend))
    
            for index,item in enumerate(friend):
                rightMark = True
                while rightMark:
                    print("---------------将要发送给 "+str(item)+" ing,index="+str(index)+' 是否发送?')
                    order = input("-----------------请输入指令(1是2否3退出当前操作循环):")
                    order = int(order)
                    if(order == 1):
                        rightMark = False
                        item.send(message1)
                        item.send(message2)
                        print("----------消息发送成功----------------")
    
                    elif(order ==2):
                        rightMark = False
                        print("----------消息发送操作被忽略-----------")
                        continue
                    elif(order ==3):
                        rightMark = False
                        print("----------消息发送程序退出------------")
                        break
                    else:
                        print("-------指令错误,请重新输入!")           
        except:
            errorMessage = "BugBugBug!"
            for index,item in enumerate(friend):
                item.send(errorMessage)
    
    def sendMessage():
        name = input("请输入好友备注:")
        friend = itchat.friends().search(name = name)
        if(len(friend)>0):
            print("找寻到备注为"+name+"的好友\n"+str(friend)+"\n如果存在多个该备注好友,默认选择第一个人发送")
            sendMessageByFriend(friend[0])
        else:
            print("未找到备注为:"+name+"的好友!")
    
    def sendMessageByFriend(friend):
    
    
        rightMark = True
        while rightMark:
            mess = input("------请输入您要发的信息:")
            order = input("----------即将发送的信息为:"+mess+" 请选择是否发送 0是1否--------")
            order = int(order)
            if(order == 0):
                friend.send(mess)
                print("----------消息已成功发送(注意此处无catch)-------")
                rightMark = False
            elif(order ==1):
                print("----------消息未发送--------")
                rightMark = False
            else:
                print("---------指令错误,请重新输入!")
    
    
    
    
    if __name__ == "__main__":
        # sendNews()
        embed()
    
    •  

    每日一句

    # -*- coding: utf-8 -*-
    '''
    这是一个用来测试微信自动发送消息的demo
    参考了一篇博客
    博客地址:http://www.cnblogs.com/botoo/p/8622379.html
    恩,主要就是用到了一个微信库--wxpy
    安装很简单  pip install wxpy
    下面就开始吧
    主要就两个函数
    1、getNews();用以获取信息
    2、sendNews();用以发送信息
    
    我这里发送消息用的是for循环本意是群发,但是!但是!但是!程序发的太快会被微信禁掉,大概40个人左右就会被禁,以后可以试试sleep一下。
    
    另外vscode中自定义python编译器:
    Ctrl+shift+p, 选择 python: Select Interpreter
    '''
    
    
    from __future__ import unicode_literals
    from wxpy import *
    import requests
    from threading import Timer
    
    itchat = Bot(console_qr=2,cache_path="botoo.pkl")
    def getNews():
        url = "http://open.iciba.com/dsapi/"
        r = requests.get(url)
        content = r.json()['content']
        note = r.json()['note']
        return content, note
    
    def sendNews():
        try:
            #这里是备注
            friend = itchat.friends().search(name = u'xxx')
    
            content = getNews()
            print(content)
            message1 = str(content[0])
            message2 = str(content[1])
            message3 = "xxx"
            print(friend)
    
            for index,item in enumerate(friend):
    
    
                print("发送给 "+str(item)+" ing,index="+str(index))
                item.send(message1)
                item.send(message2)
                item.send(message3)
    
            t = Timer(86400,sendNews)
            t.start()
        except:
            errorMessage = "xxx"
            for index,item in enumerate(friend):
                item.send(errorMessage)
    
    
    if __name__ == "__main__":
        sendNews()
  • 相关阅读:
    day03 字符串
    day02 运算符和编码
    day01 初识Python
    windows 安装yaml支持和pytest支持等
    Python自动补全缩写意义
    关于python接口测试connect error
    关于Python的post请求报504错误
    python函数参数*args **kwargs
    利用Python语言Appium启动ios app
    shell 中| 用法
  • 原文地址:https://www.cnblogs.com/grj001/p/12224438.html
Copyright © 2011-2022 走看看