情人节,教你用Python定时给小姐姐微信发送专属问候!

给大家分享一招

『每天早上用Python给TA的微信发送问候』

大致效果如下,只要程序写好了每天早上就会自动给小姐姐发送一条问候消息👇图片

思路分析

看上去有点复杂,又要发送天气又要判断路况,但只要将思路分析清楚就能轻松搞定,本项目大致分为三块,核心部分就是爬虫与推送消息

  • 爬取相关信息(日期、时间、路况)

  • 构建内容并推送消息至微信

  • 每天定时执行

下面我们来逐个击破。

爬取相关信息

第一步我们需要先把后面要用到的相关信息爬取并存储,还是先导入相关库

import requests
import re
from bs4 import BeautifulSoup
import time
import datetime
import random
import pandas as pd
from urllib import request, parse
import warnings
warnings.filterwarnings("ignore")

1、日期和天气

首先是日期和天气,那妹子所在的城市你肯定需要知道,之后随便找一个天气预报网站,此处以天气网为例图片

我们需要把图中红框部分提取,这里没什么难点,使用requests即可,因为页面很简单图片

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:810735403

甚至也不需要设置什么反爬措施,毕竟每天就请求一次,完整代码如下

r = requests.get('https://www.tianqi.com/hangzhou/')
soup = BeautifulSoup(r.text)

date = soup.find_all('dd',class_ = 'week')[0].text.strip()
date = re.sub(u'\u3000', ",", date)
time_now = time.strftime("%H:%M:%S", time.localtime()) 
weather =soup.select('dd > span')[0].text
air = soup.select('dd > h5')[0].text

time1 = datetime.datetime.strptime(time_now,"%H:%M:%S")
time2 = datetime.datetime.strptime('9:30:00',"%H:%M:%S")
time3 = round((time2 - time1).total_seconds() / 60)

requests.get请求,bs4解析并保存数据,最后用datetime模块去计算时间差即可。现在每天日期和天气数据就到手了!

2、交通信息

这一步需要完成的就是计算小姐姐家庭地址到公司的交通耗时、路况等信息,所以至少你要知道妹子家住哪里,公司又位于何处。

之后要做的是将地址转换为经纬度,方便代码去识别

完成这一个需求可以使用爬取相关在线的经纬度转换网站来实现,也可以使用一些专业的API比如百度、高德等,这里我们使用百度地图开放平台

使用API并不是直接就能调用,首先需要去申请一个AK,打开百度地图开放平台

http://lbsyun.baidu.com/

登陆之后依次点击控制台创建应用选择服务端,按照指示创建一个地图可视化应用,以申请到AK就算搞定。图片

之后启动Jupyter Notebook,只要不到十行代码就能将地址转成经纬度,直接看代码,没有什么特别需要解释的,利用地址和AK构造查询URL,之后使用requests请求并取出经纬度,代码拿走就能用👇

import pandas as pd
import requests

AK = "替换为你申请的AK" 

def get_position(name,AK):
    url = f'http://api.map.baidu.com/geocoding/v3/?address={name}&output=json&ak={AK}'
    res = requests.get(url)
    val = res.json()
    retval = {'地址':name,'经度':val['result']['location']['lng'],'纬度':val['result']['location']['lat'],'地区标签':val['result']['level'],'是否精确查找':val['result']['precise']}
    longitude = retval['经度']
    latitude = retval['纬度']

    return(longitude,latitude)

我们来测试一下图片

可以看到,现在给它一个地址,就能返回经纬度,再返回地图验证一下经纬度,没有问题图片

搞定了经纬度之后,一些交通信息、路况都可以通过百度地图API来得到,官方文档中也提供了详细的使用方法与demo

图片

比如驾车路线与路况,只需要通过起止位置经纬度与你刚刚申请的AK就可以轻松返回,代码如下,拿走就用

#驾车
data = requests.get('http://api.map.baidu.com/directionlite/v1/driving?origin=40.01116,116.339303&destination=39.936404,116.452562&ak=你的AK')
data = data.content.decode('unicode_escape')
data = json.loads(data)

distance = data['result']['routes'][0]['distance']/1000 #驾车距离
time_cost = round(data['result']['routes'][0]['duration']/60) #驾车耗时

lukuang = data['result']['routes'][0]['traffic_condition']
lukuang = '畅通' if lukuang == 1 else '缓行' if lukuang == 2 else '拥堵' if lukuang == 3 else '严重拥堵' #路况

图片

类似公交地铁路线可以同样使用上方代码搞定,至于附近推荐上车点也是有API

#上车点
data2 = requests.get('http://api.map.baidu.com/parking/search?location=120.11614538041329,30.294761455511946&coordtype=bd09ll&ak=你的AK')
num = len(json.loads(json.loads(json.dumps(data2.text, ensure_ascii=False)))['recommendStops'])
data2 =json.loads(json.loads(json.dumps(data2.text, ensure_ascii=False)))['recommendStops']
shangche = []
for i in range(num):
    shangche.append(data2[i]['name'])
    
shangche = '、'.join(shangche)

图片

当然还有更多的查询API你可以再百度开放平台官网根据文档去使用,此处就不再一一介绍,如果你乐意的话,完全可以将这部分处理的更完善,让妹子感受到你的贴心

推送消息至微信

在搞定了相关字段之后,我们先把这些信息组合成一个字符串,方便后面发送,没啥难度,使用f-string即可

text = f"""

哈喽,冰冰,早上好!

今天是{date}。

现在已经{time_now}啦,距离上班还有{time3}分钟。

外面的天气情况不是很好,{weather},{air},记得带伞哦~

根据现在的路况,路况{lukuang},总共{distance}千米,打车去公司需要{time_cost}分钟,坐公交地铁的话需要{time_cost1}分钟。

如果需要打车去公司的话,最近的上车点为{shangche}。

加油,打工人,再上一天班就放假咯!

"""

图片

接下来就是将这段字符串推送到微信,理论上直接用你的微信发过去是最理想的。

但是由于itchat等第三方接口目前都不能很好的使用,并且还有封号的风险,所以我们只能借助一些其他工具,这里我选择的是喵提醒图片

其实本质上就是你将信息发送至喵提醒,喵提醒再通过它的公众号推送给指定的人。当然还有短信提醒,语音电话提醒和 APP 提醒,这些你可以自己研究。

不过使用喵提醒涉及到一个很重要的字段 ID,也就是喵码,获取教程参考官方文档,傻瓜式操作即可,一分钟就能学会,地址如下

https://mp.weixin.qq.com/s?__biz=MzIxNjQ1NzU2Mw==&mid=100000042&idx=6&sn=c9656c8b242972f62fe5840ddf7487db&scene=19#wechat_redirect

简单来说,不论你是忽悠她操作还是自己偷偷操作,你需要让小姐姐的微信关注喵提醒,再创建一个提醒并拿到对应的ID,这一步很重要,重要到我没法教,相信你一定有办法

之后就可以通过这个ID给小姐姐发消息,并且官方已经给出了发送提醒的 API,所以很容易构建发送的代码如下,拿走就能用

from urllib import request, parse
import json

class Message(object):
    def __init__(self,text):
        self.text = text
    def push(self):
        # 重要,在id中填写自己绑定的id
        page = request.urlopen("http://miaotixing.com/trigger?" + parse.urlencode({"id": "xxxxxx", "text": self.text, "type": "json"}))
        result = page.read()
        jsonObj = json.loads(result)
        if (jsonObj["code"] == 0):
            print("\nReminder message was sent successfully")
        else:
            print("\nReminder message failed to be sent,wrong code:" + str(jsonObj["code"]) + ",describe:" + jsonObj["msg"])

text = 'xxx'
message = Message(text)
message.push() # 完成推送

可以看到,代码很简单,你在使用时,只需要替换上面的ID为小姐姐的ID,之后替换text为我们刚刚写好的内容,运行代码后就推送到了微信上。

定时执行

最后我们需要让程序每天指定时间运行,这一步可有可无,你可以使用一些定时工具或者Linux下命令搞定,实在不行每天早上起床手动发送,会显得更有诚意。

我这里用到了Python中的定时指令 schedule库,先看代码

import schedule 
import time

def job(): 
    print("I'm working...")

schedule.every(10).minutes.do(job) 
schedule.every().hour.do(job) 
schedule.every().day.at("10:30").do(job) 
schedule.every(5).to(10).minutes.do(job) 
schedule.every().monday.do(job) 
schedule.every().wednesday.at("13:15").do(job) 
schedule.every().minute.at(":17").do(job)

while True: 
    schedule.run_pending() 
    time.sleep(1)

可以看到schedule 库里的方法都非常通俗易懂,整个定时框架就是建立死循环并检测时间,在 schedule 预设的要求中运行 job() 函数。如本文的需求,用定时框架可以写作:

import schedule 
import time

def job(): 
    pass

schedule.every().day.at("8:00").do(job) 

while True: 
    schedule.run_pending() 
    time.sleep(600)

只需要把上面的job方法里面的内容替换成我们在第一步爬取与构造发送文字的全部内容,并执行代码,程序就会在每天指定的时间发送一条问候至小姐姐的微信啦~图片


最后总结一下,其实整个过程看似复杂,但是代码部分并不难,都是十分基础的爬虫代码与解析,要我来说,最难的还是如何让妹子乖乖的把它的喵ID发给你

当然,我只是简单的想了一下,你可以根据我的代码进行修改,来发送任意你想要的内容,最好能加点属于你们俩之间的悄悄话图片

进一步,如果你尝试创建提醒,你会发现还有共享提醒功能

图片

打开这个按钮,你就拥有群发功能,可以让更多的小姐姐收到你用心“写下的问候”,当然一定要注意每个人的称呼不要搞错了,万一把冰冰的发给幂幂,那麻烦就大了[逃~]

在这里还是要推荐下我自己建的Python开发交流学习(qq)群:810735403,群里都是学Python开发的,如果你正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和高级开发教程,欢迎进阶中和想深入Python的小伙伴!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值