文档章节

【代码改变人生】自制Python撩妹神器—每日天气播报

零号_特工
 零号_特工
发布于 2017/05/25 20:06
字数 885
阅读 50
收藏 0

##背景

最近正在自学Python,找点有意思的小项目练练手。从知乎一帖子中学习到一位高手的撩妹技巧:每天定时给女朋友发一封邮件,简单的问候加天气情况。博主觉得有点意思,何不尝试做一下呢。

##原理

实现的原理很简单了。

调用免费的天气API接口,获取所在城市的天气情况 大家都知道Bing的背景图非常漂亮,每天都会更新,Bing也将获取图片的API公开。所以调用Bing每日图片的API,下载到本地 将天气情况和图片拼成邮件内容,利用python的smtp模块实现邮件发送 将python程序,即.py文件上传到服务器上。在crontab中加入一条定时任务,每天定时执行小程序。 主要过程如上所述,是不是非常简单。下面将Python代码放出。

##代码

# coding=utf-8
import urllib
import urllib2
from email import encoders
from email.header import Header
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
import xml.etree.ElementTree as ET
import time
import json


def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr((
        Header(name, 'utf-8').encode(),
        addr.encode('utf-8') if isinstance(addr, unicode) else addr))


# 获取bing的每日图片,修改api中的参数n,可以获取多张图片
# 从bing的api返回的xml中提取图片的url,然后下载到本地,并命名为yyyymmdd.jpg
def get_bing_pic():
    req = urllib2.Request("http://cn.bing.com/HPImageArchive.aspx?idx=0&n=1")
    webpage = urllib2.urlopen(req)
    root = ET.fromstring(webpage.read())
    # 获取图片链接
    url = 'http://cn.bing.com' + root.find('image').find('url').text
    # 图片描述
    pic_desc_ = root.find('image').find('copyright').text
    # 图片保存到本地的位置,这是linux的文件目录,windows的注意修改为C:/XX/XX
    pic_file_name_ = "/root/" + time.strftime('%Y%m%d', time.localtime(time.time()))
    urllib.urlretrieve(url, pic_file_name_ + url[-4:])
    return pic_file_name_ + url[-4:], pic_desc_


# 调用免费的天气API接口,city_code默认为广州的code,其他城市code参见文末参考链接3.
def get_city_weather(city_code='101280101'):
    response = urllib2.urlopen("http://www.weather.com.cn/data/cityinfo/"+city_code+".html")
    weather_json = json.loads(response.read())
    city_ = weather_json['weatherinfo']['city']
    min_temp_ = weather_json['weatherinfo']['temp1']
    max_temp_ = weather_json['weatherinfo']['temp2']
    weather_ = weather_json['weatherinfo']['weather']
    return city_, min_temp_, max_temp_, weather_


# 发件人地址和密码
from_addr = 'XXXX@XX.com'
password = 'XXXXXXX'
# SMTP服务器地址:
smtp_server = 'smtp.XXXX.com'
# 收件人地址:
to_addr = 'XXXXXXXX@XXX.com'
# 抄送给自己:
cc_addr = 'XXXXXX@XX.com'

city, min_temp, max_temp, weather = get_city_weather()
# 带路径的文件名
pic_file_name, pic_desc = get_bing_pic()
# 文件名
pic_name = pic_file_name.split("/")[-1]

# 这里是邮件正文内容,'<img src='cid:0'></img>'是为了将附件的图片插入邮件正文中,直接显示
content = u"<html><body><h1>Hello</h1><p>%s今天天气%s,最低温度%s,最高温度%s.</p>\
<h3>%s</h3><img style='width:800px' src='cid:0' alt='%s'></img><h3>Have a nice day.\
</h3></body></html>" % (city, weather, min_temp, max_temp, pic_desc, pic_desc)

msg = MIMEMultipart()
msg['From'] = _format_addr(from_addr)
msg['To'] = _format_addr(to_addr)
msg['Cc'] = _format_addr(cc_addr)
msg['Subject'] = Header(u'每日天气播报', 'utf-8').encode()
msg.attach(MIMEText(content, 'html', 'utf-8'))

# 添加附件就是加上一个MIMEBase,从本地读取一个图片
with open(pic_file_name, 'rb') as f:
    # 设置附件的MIME和文件名,这里是jpg类型
    mime = MIMEBase('image', 'jpg', filename=pic_name)
    # 加上必要的头信息
    mime.add_header('Content-Disposition', 'attachment', filename=pic_name)
    mime.add_header('Content-ID', '<0>')
    mime.add_header('X-Attachment-Id', '0')
    # 把附件的内容读进来
    mime.set_payload(f.read())
    # 用Base64编码
    encoders.encode_base64(mime)
    # 添加到MIMEMultipart
    msg.attach(mime)

server = smtplib.SMTP(smtp_server, 25)  # SMTP协议默认端口是25
# server.starttls() #SSL加密的SMTP,注意修改端口号
server.set_debuglevel(1)    # 打印和邮件服务器交互的详细信息
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr, cc_addr], msg.as_string())
server.quit()

##参考链接

[1] http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832745198026a685614e7462fb57dbf733cc9f3ad000

[2] http://blog.csdn.net/wmqi10/article/details/29566301

[3] http://blog.csdn.net/wbb1075421270/article/details/51810282?locationNum=4&fps=1

© 著作权归作者所有

共有 人打赏支持
零号_特工
粉丝 0
博文 3
码字总数 2326
作品 0
合肥
程序员
私信 提问
人工智能的新年“新气象” 首现“看东方”

  在元旦小长假中我们挥别了2016。而在全年无休的东方卫视,则在2017年1月1日为台里的见习主播微软小冰,安排了一份更加重要的工作 – 这一天的东方卫视大型晨间新闻播报栏目《看东方》像往...

人工智能观察室
2017/01/04
0
0
全网最有趣的python学习视频丨逗比洗脑讲师

作为二十一世纪的人,不会一点编程知识可以说是一个现代文盲了,最近小编我又受打击了,隔壁擅长编程的小伙伴竟然靠自己的编程技巧成功吸引到了小姐姐的关注[dogdog] 这就让我嫉妒了,于是小...

辣鸡软件
05/23
0
0
收集的几个Python恋爱神器,让python编程帮你追求女孩!

](upload_images/9305082-c125aaaec63deed4?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) Python程序员教你由单身dog进进化成为秀恩爱dog! 今天教大家,怎样用Python做一份特别的礼...

Python新世界
07/27
0
0
2017年IT人年终总结,一个都不知道的你这一年就白过了

移动互联时代,每天都会涌现大量新词热词,我们IT圈也不例外,2017年就要过去了,是时候来回顾下这一年都发生了什么 首先来看看2017年互联网的热词与流行语,原来2017年的年轻人们聊天最经常...

uzv80px5v412ne
2017/12/30
0
0
用小几千的预算教你挑战40万+年薪的职场能力

又是一年双11 双11剁手快乐 特惠价,错过这波,就待明年双11~ 活动时间: 11月10日00:00:00 - 11月11日23:59:59 前十名下单的学员还有神秘大礼哦 提前加群@助教妹纸预约优惠哦 MongoDB实战2...

老叶茶馆_
11/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

颜色模型与颜色应用---光的特性

电磁频谱 颜色的心理学特征

中国龙-扬科
24分钟前
2
0
android音频及强噪相关

Android AudioRecord和AudioTrack介绍(Android音频收集和播放 麦克风降噪) https://blog.csdn.net/tanningzhong/article/details/72844559 音频采集(AudioRecorder) https://www.jianshu.......

whoisliang
31分钟前
2
0
redis-持久化

RDB rdb持久化是把当前进程数据生成快照保存到磁盘的过程。触发RDB持久化过程分为手动触发和自动触发。 触发机制 bgsave执行流程 rdb优缺点 AOF 记录每次写命令,重启时再重新执行aof文件中的...

grace_233
36分钟前
3
0
电话激活Windows 中文操作系统步骤

已购买微软MAK批量授权,系统又在企业内网中,无法通过连接Internet进行激活,还可以通过电话完成激活。 前期准备 请提前准备好产品密钥,Product Key格式如下:XXXXX-XXXXX-XXXXX-XXXXX-XXX...

tonyfox
38分钟前
4
0
Apache用户认证,域名跳转,访问日志

Apache用户认证 当设置了用户认证后,用户访问网站时,需要输入用户名和密码才能访问。 可以全局设置,也可以为某几个虚拟主机单独配置。 下面以全局配置进行操作示例。 编辑httpd.conf进行配...

野雪球
42分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部