程序员的浪漫:晨起给女友定时发送天气预报,睡前给女友定时讲故事

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

情侣之间除了平日一起探究有趣的事情,总是少不了就是 “日常早晚请安”

1、请安情景一
男: 今日阳光明媚,多云转晴,小懒猪快起床啦
女:早起啦,话说你是不是还在被窝里呢
男:嘿嘿

2、请安情景二
女:哎呀,挺晚了呢,早点休息吧,晚安
男:晚安
女:么么哒
一分钟后。。。
女:快说,你是不是还在扣手机呢
男:嘿嘿

另外你的小可爱有没有要求你每晚给她讲故事,无奈故事库那是相当匮乏!那可不可以让聊天更智能一些呢!于是懒惰的程序员学会了爬虫,嗯就是在网页上会爬的虫,下面介绍通过爬虫~实现定时的早晚安,告别手动,人工智能!

一、早安,天气预报

使用python的第三方模块itchat实现早安问候,itchat是个基于网页版微信的python微信API。功能目前做到基本可以满足正常的消息收发,信息的获取等等。itchat的详细介绍和使用可参加官网:itchat

话不多说直接给出程序源码,下面天气是从中国天气官网上获取的北京市海淀区的天气,如果是其他地区可更换网址,:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import itchat as ic
import time
import re

def getWeather():
    # 使用BeautifulSoup获取天气信息
    resp=urlopen('http://www.weather.com.cn/weather/101010200.shtml')
    soup=BeautifulSoup(resp,'html.parser')
    tagDate=soup.find('ul', class_="t clearfix")
    dates=tagDate.h1.string
    tagToday=soup.find('p', class_="tem")
    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
    tagWind=soup.find('p',class_="win")
    winL=tagWind.i.string
    content = '早上好,小宝!\n 今日分海淀区天气请注意查收:\n' + '今天是:' + dates + '\n' + '风级:' + winL + '\n' + '最低温度:' + temperatureLow + '\n' + \
               '最高温度:' + temperatureHigh + '\n' + '天气:' + weather + '\n'
    return content


def main():
    try:
        message = getWeather()
        print('成功获取天气信息')
    except:
        message = ""
        print("获取天气信息失败")
    # 参数hotReload=True实现保持微信网页版登陆状态,下次发送无需再次扫码
    ic.auto_login(hotReload=True)
    users = ic.search_friends(name = '手动打码')
    userName = users[0]['UserName']
    ret = ic.send(msg = message, toUserName = userName)
    if ret:
        print("成功发送")
    else:
        print("发送失败")
    time.sleep(60)
    ic.logout()


if __name__ == '__main__':
    main()

二、午安,每日一练

每天督促女友和自己学习也是十分重要的,下面便是通过python的wxpy模块实现给女友定时发送金山词霸每日一练的原文和翻译,wxpy模块的详细介绍和使用可参见官网:wxpy,代码呈上:

from __future__ import unicode_literals
from threading import Timer
from wxpy import *
import requests
import random

# 设置cache_path=True, 保持微信登陆状态
bot = Bot(cache_path=True)
# linux执行登陆请调用下面的这句
# bot = Bot(console_qr=2,cache_path="botoo.pkl")
def get_news():
    # 获取金山词霸的每日一句的英文和翻译
    url = "http://open.iciba.com/dsapi/"
    r = requests.get(url)
    content = r.json()['content']
    note = r.json()['note']
    return content, note
 
def main():
    try:
        contents = get_news()
        # 你朋友的微信名称,不是备注,也不是微信帐号
        my_friend = bot.friends().search('手动打码')[0]
        my_friend.send(contents[0])
        my_friend.send(contents[1])
        my_friend.send(u"小宝,每日一练开始了!")
        # 每86400秒(1天),发送1次
        t = Timer(86400, send_news)
        # 通过生成随机数,使得每次发送的时间不固定
        ran_int = random.randint(0,100)
        t = Timer(86400+ran_int,send_news)
        t.start()
    except:
        my_friend.send(u"今日消息发送失败了")
 
if __name__ == "__main__":
    main()

三、晚安,睡前讲故事

哈哈,睡前小故事不用愁,爬虫让睡前故事无穷无尽!上面两种方式都是微信定时发送,下面给出不同的方式,发送小故事到亲爱的邮箱,每日邮箱踩一踩:

import requests
from bs4 import BeautifulSoup
import smtplib
from email.mime.text import MIMEText
import random
import time

def parse_html(url, headers):
    try:
        r = requests.get(url, headers=headers, timeout=60)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        html_content = r.text
        return html_content
    except:
        return "爬取失败"


def parse_link(urllist, html):
    url_baisc = 'http://www.tom61.com/'
    soup = BeautifulSoup(html, 'html.parser')
    temp = soup.find('dl', attrs={'class': 'txt_box'})
    link_list = temp.find_all('a')
    for link in link_list:
        urllist.append(url_baisc + link.get('href'))


def sendemail(url, headers):
    # 发送方邮箱
    msg_from = '手动打码'
    # 填入发送方邮箱的授权码,不是密码,如使用网易邮箱,需要到网易邮箱里申请
    passwd = '手动打码'
    # 接收方邮箱
    receivers = ['手动打码']
    # 邮件主题
    subject = '小宝,今日份的睡前小故事,请查收'

    # 下面爬取主页面故事内容
    html_content = parse_html(url, headers)
    text = []
    soup = BeautifulSoup(html_content, 'html.parser')
    temp = soup.find('div', class_='t_news_txt')
    for one in temp.findAll('p'):
        text.append(one.text)
    content = "小宝,今晚开始讲故事喽:\n\n" + "\n".join(text)

    # 配置发送邮件信息
    msg = MIMEText(content)
    msg['Subject'] = subject
    msg['From'] = msg_from
    msg['To'] = ','.join(receivers)
    try:
        # 邮件服务器及端口号,不同邮箱会有不同
        s = smtplib.SMTP_SSL("smtp.163.com", 465)
        s.login(msg_from, passwd)
        s.sendmail(msg_from, msg['To'].split(','), msg.as_string())
        print("发送成功")
    except:
        print("发送失败")
    finally:
        s.quit()


def main():
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
        }
    # 设定时间,保证明天发送不同的故事
    initial_time = time.mktime(time.strptime('2019-03-19', "%Y-%m-%d"))
    today = time.strftime('%Y-%m-%d', time.localtime(time.time()))
    timeArray = time.strptime(today, "%Y-%m-%d")
    now_time = int(time.mktime(timeArray))
    html_idx = int((now_time - initial_time) // 86400)

    url_list = []
    url = 'http://www.tom61.com/s/aiqinggushi/'
    html_content = parse_html(url, headers)
    parse_link(url_list, html_content)
    print("爬取故事链接完成")
    if html_idx < len(url_list):
        sendemail(url_list[html_idx], headers)
    else:
        print('该页面故事网址以结束,请更换!')


if __name__ == '__main__':
    main()

四、crontab,定时任务

如何让程序定时爬起来呢,可以使用crontab命令,使用crontab可以在指定的时间执行脚本或者一系列Linux命令。例如系统管理员安排一个备份任务使其每天都运行,这样便可以实现每日定时的消息发送了。首先你需要在服务器上安装crontab,cron 是linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

/sbin/service crond start : 启动服务
/sbin/service crond stop : 关闭服务
/sbin/service crond restart : 重启服务
/sbin/service crond reload : 重新载入配置

crontab常用命令有:
crontab –e : 修改 crontab 文件. 如果文件不存在会自动创建。
crontab –l : 显示 crontab 文件。
crontab -r : 删除 crontab 文件。
crontab -ir : 删除 crontab 文件前提醒用户。

crontab文件中命令书写规则,下面给出crontab 文件的书写格式:

{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script} 
minute: 区间为 059 
hour: 区间为023 
day-of-month: 区间为031 
month: 区间为112. 11. 1212. 
Day-of-week: 区间为07. 周日可以是07.

Crontab 示例
1.12:01 a.m 运行,即每天凌晨过一分钟。这是一个恰当的进行备份的时间,因为此时系统负载不大。
1 0 * * * /root/bin/backup.sh

2. 每个工作日(Mon – Fri) 11:59 p.m 都进行备份作业。
59 11 * * 1,2,3,4,5 /root/bin/backup.sh
or
59 11 * * 1-5 /root/bin/backup.sh

3.5分钟运行一次命令
*/5 * * * * /root/bin/check-status.sh

4. 每个月的第一天 1:10 p.m 运行
10 13 1 * * /root/bin/full-backup.sh

5. 每个工作日 11 p.m 运行。
0 23 * * 1-5 /root/bin/incremental-backup.sh

懒惰的程序员快行动起来吧,附上不知在哪里看到的专属程序员的情诗一首,专心做程序员届的伪文青:

世界上最遥远的距离
不是生与死的距离
是你在if我在else
虽然时常一起出现
但永远不会结伴执行
感谢try-catch
让我有机会成为你的finally
守在这必经的渡口

〈搬丨自用〉【修改版】腾讯云函数实现每日天气推送 天气接口API: http://t.weather.itboy.net/api/weather/city/ + 城市代码 城市代码查询入口: https://where.heweather.com/index.html #!/usr/bin/python3 #coding=utf-8 import requests, json spkey = 'xxxxxxxxxxxx' #https://qmsg.zendee.cn ---> 去这个地址注册,获取key,然后添加绑定机器人 def g 阅读详情

相关推荐

微信自动给女朋友发送每日天气的python脚本

微信自动给女朋友发送每日天气,即使没有女朋友,也能每天定时给身边的好友,自己暗恋的女生发送自己的关心与祝福。

用微信公众号给女朋友自定义推送天气与课表

用微信公众号给女朋友推送天气和课表,超简单!

qq_51490212的博客 9358

程序员浪漫------给女神/女朋友定时推送天气信息

短信推送,天气API接口调用,定时任务

天天向上的编程技术分享博客 1034

微信推送消息给女友提醒每天天气情况,本文讲解流程,附带代码,可快速上手。

之前兴起的微信定时推送消息给女朋友,一时兴起给女朋友做了一个,两分钟即可上手,注意,本项目不需要正式的公众号,使用微信提供的测试环境。不过一样使用。如果代码有不理解的内容,可联系作者 使用的语言:Java(不涉及前端技术,纯Java)。

XuDream的博客 3140

微信公众号每天定时女友发送天气信息--0基础学会

强烈推荐0基础的小白学习,跟着步骤就能完成,超级简单,本人亲测有效

Javaxaiobai的博客 5330

每日定时推送早晚安/天气预报等信息——公众号/小程序/邮件

使用golang每天给自己发送一封天气预报的邮件:https://blog.csdn.net/qq_26450765/article/details/84258783 python实现通过微信每天给女友天气预报:https://blog.csdn.net/qq_35624030/article/details/79888019 抓取天气信息并定时推送邮件:https://clou...

Hello World 1万+

微信小程序云函数发天气预报

要求的是给一群固定的同事,每天定时定点发短信推送当天和明天的天气、气温、风速等等信息,短信平台用的是腾讯云通信,天气接口用的是心知天气的数据,之所以用微信小程序还是因为懒,云开发属实方便。 1.开通腾讯云短信,注册签名、模板,拿到API接口。 2.开通心知天气API的免费版。 3.因为人数较多,涉及到自动推送且心知天气免费版的访问速度限制,首先要把通讯录导进云数据库里,而小程序的云数据库单次访问只能读20条数据,用云函数打破限制。 const cloud = require('wx-server

jhjhjhjh1997的博客 1064

[送给她]最近比较火的给她推送天气,恋爱倒计时等功能教程

蓝桉已遇释槐鸟,不爱万物唯爱你。释槐来去无归期,梦回已逐浮云散。

武师叔的博客 3570

手把手教小白制作情侣天气推送号 【只需四步】

前几天看到大家都在弄如何制作情侣天气推送号,现在整合了一下网上的资源做了一个教程。

爱干饭的猿的博客 8024

女朋友推送天气

没错,我有女朋友 使用的是和风天气的接口 网址是https://dev.heweather.com/ 进网站之后点右上角注册 注册好之后登陆到网站,进入‘控制台 点击应用管理,创建一个应用 然后新建应用,我创建的是web端的,其他创建方法详见https://dev.heweather.com/docs/getting-started/get-api-key。 应用名称自己随便写个,test之类的...

李孟笛的博客 3568

【超简单5分钟~最新版】微信公众号早安定时推送 带天气、纪念日、生日、定时推送等(附4.0最新版)

无基础5分钟做出来,不白来!微信公众号早安定时推送最新版!!!

A_Xunla的博客 6万+

公众号推送早安问候以及天气预报(JAVA)

公众号推送早安问候以及天气预报(JAVA)

cV展示的学习园 7万+

微信公众号推送天气教程,自动定时推送【Java版】开发者和小白详细教程

微信公众号天气推送,定时自动推送,在一起时间,每日一句,快给你女朋友写一个把~~

阿果子的博客 4万+

Flask定时向手机发送天气短信(Flask+百度API+国外Twill第三方服务+腾讯云服务器linux下部署)

参考: Flask+APScheduler定时任务 flask 使用 flask_apscheduler 做定时循环任务的实现

程序员象漂亮的博客 1076

程序员女友惊喜程序小妙招

1.打印心形的代码 package com.lrq.test; public class PrintHeart { public static void main(String[] args) { System.out.println(printHeart("*")); } private static String printHeart(String input){

HaleyLiu123的博客 1万+

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

wxpy: 用 Python 玩微信 Python定时自动给微信好友发送天气预报 源码 weather.py from wxpy import * import requests from datetime import datetime import time from apscheduler.schedulers.blocking import BlockingScheduler #定时框架 ...

0x8g1T9E- 6194

python实现给你女朋友天气预报和情话

今天说一下如何用python给你女朋友天气预报和情话,让她明白程序员也有浪漫 整体思路: 上网爬取天气信息 上网爬取情话 发邮件 实现定时发邮件 需要用到的模块: requests:用于向网站发送请求 yagmail:用法发邮件 schedule:用于实现定时任务 BeautifulSoup:处理网页标签 re:正则过滤 天气获取的url:https://tianqi.2345.com/。这个是默认的,为了省去一写麻烦我直接在首页点到对应的城市,最终链接如下:https://tianqi.234

ikyjguygkjgjvu的博客 2762

程序员如何哄女朋友开心的秘籍,定制给女朋友一个应用(生日礼物)

程序员如何哄女朋友开心的秘籍,定制给女朋友一个应用(生日礼物)

licong0716的专栏 2万+

windows上jupyter notebook主题背景、字体及扩展插件配置(集成vim环境)

目录 目录 windows上安装Anaconda (IPython notebook) IPython notebook拓展插件安装 IPython notebook主题背景和字体更改 windows上安装Anaconda (IPython notebook) Anaconda是一个包与环境的管理器,一个Python发行版,以及一个超过1000多个开源包的集合。它是免...

【AI机器学习与知识图谱】的博客 1万+
上一篇: fastText原理和文本分类实战,看这一篇就够了
下一篇: 深度学习多种模型评估指标介绍 - 附sklearn实现
CHEONG_KG
博客等级 码龄11年 936粉丝 104原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值