Python也可以很暖男之每日发送爱词霸每日一句中英文+日期+农历+天气预报+各种天气指数(只学了一个多月新手的第二个实战项目,代码写的不好,请轻喷,谢谢有很多网友问为何用不了,因为中国天气网改了代码,需要改变正则表达式

Python也可以很暖男

事情来由:老婆每天早上起来就要问今天温度如何,天气咋样,适合穿什么样的衣服。天天问得扛不住了,所以就想把天气信息+什么紫外线指数,空气指数,穿衣指数,洗车指数等在起床之前发给她,就可以自己看了。顺带再来一句爱词霸的每日一句(最终结果:太傻太天真,发是发了,可依旧要问。T_T,欲哭无泪)
为了造福各钢铁直男, 现已经封装成EXE可执行程序,想要的可以直接留言发邮箱。输入你的称呼,所在城市(最好大城市),对方的微信昵称。微信扫一扫弹出的二维码,后续就交给程序了,效果如下。(当然,单身狗也可以自己发给自己

总体思路

实现的功能是爬取中国天气网,爱词霸每日一句,结合日期各种天气指数,通过微信发送。主要有六个功能函数和一个主函数:

  1. 获取当天日期和农历 :datetime模块+sxtwl模块
  2. 获取爱词霸每日一句:网上有很多现成例子,爱词霸有API,用JSON模块,需要用户输入称呼,以便打印出来
  3. 获取中国天气网城市对应的代码:靠爬取中国天气网的数据,把城市和对应的代码结合成字典,RE模块+REQUESTS模块,需要用户输入城市
  4. 获取城市代码对应的天气网址:每个城市的网址后缀9位数的代码
  5. 获取对应的天气情况:爬取对应的天气情况以及各种天气指数,需要调用称呼,以便打印出来
  6. 微信自动发送:通过ITCHAT库调用微信个人API入口,发送给指定的人;需要用户输入对方**(微信昵称)**
  7. 主函数:各种调用

函数一、获取当天日期和农历

有现成的sxtwl模块,我只是numCn中的把“零”改成了“天”

import json,re,datetime
import requests,itchat,sxtwl
def getYMD():#获得对应的农历ymc = [u"十一", u"十二", u"正", u"二", u"三", u"四", u"五", u"六", u"七", u"八", u"九", u"十"]rmc = [u"初一", u"初二", u"初三", u"初四", u"初五", u"初六", u"初七", u"初八", u"初九", u"初十",u"十一", u"十二", u"十三", u"十四", u"十五", u"十六", u"十七", u"十八", u"十九",u"二十", u"廿一", u"廿二", u"廿三", u"廿四", u"廿五", u"廿六", u"廿七", u"廿八", u"廿九", u"三十", u"卅一"]Gan = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]Zhi = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]ShX = ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"]numCn = ["天", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"]lunar = sxtwl.Lunar()year = datetime.datetime.now().yearmonth = datetime.datetime.now().monthrday = datetime.datetime.now().dayday = lunar.getDayBySolar(year, month, rday)d = str(day.y) + "年" + str(day.m) + "月" + str(day.d) + "日"if day.Lleap:a = "润" + ymc[day.Lmc] + "月" + rmc[day.Ldi] + "日"else:a = ymc[day.Lmc] + "月" + rmc[day.Ldi] + "日"b = "星期" + numCn[day.week]c = Gan[day.Lyear2.tg] + Zhi[day.Lyear2.dz] + "年" + Gan[day.Lmonth2.tg] + Zhi[day.Lmonth2.dz] + "月" + Gan[day.Lday2.tg] + Zhi[day.Lday2.dz] + "日"txt = '今天日期:'+d + ', ' + b + '\n'+'中华农历: ' + a + ', ' + creturn txt

今天日期:2020年4月19日, 星期天
中华农历: 三月廿七日, 庚子年庚辰月壬辰日

函数二、获取爱词霸每日一句

CSDN上有很多代码,这个因为有API,爬取比较简单:

def get_iciba_everyday_chicken_soup(xingming):url = 'http://open.iciba.com/dsapi/'  r = requests.get(url)all = json.loads(r.text) Englis = all['content']  Chinese = all['note'] everyday_soup = '@喝一碗'+xingming+'的心灵鸡汤(^_^):'+'\n'+Englis+'\n'+Chinese+'\n' return everyday_soup

@喝一碗laowang的心灵鸡汤(_):
Everything in excess is opposed to nature.
在自然中,一切事物过犹不及。

函数三、获取中国天气网城市对应的代码

网址:http://www.weather.com.cn/forecast/
每个城市都有对应的九位数代码,由此形成城市与代码的字典,我是新手,只能用笨笨的正则表达式。

def getURLcode(location):#获取城市对应的代码url = "http://www.weather.com.cn/forecast/"r = requests.get(url)r.raise_for_status()r.encoding = r.apparent_encodingtxt = r.textloc = re.findall(r' target="_blank">[\u4e00-\u9fa5]{1,5}?</a></li>', txt)cod = re.findall(r' <li><a href="http://www.weather.com.cn/weather1d/[0-9]{9}.shtml"', txt)loca, loca_1, code, code_1 = [], [], [], []a_cdict = {}for item in loc:loca.append(re.findall(r'target="_blank">(.*?)</a></li>', item))for i in range(len(loca)):loca_1.append(loca[i][0])loca_1.insert(47, '固原')#这个城市没有爬取到for item in cod:code.append(re.findall(r'[0-9]{9}', item))for i in range(len(code)):code_1.append(code[i][0])a_cdict = dict(zip(loca_1, code_1))return str(a_cdict[location])

函数四、获取城市代码对应的天气网址

把对应的代码加入到访问的网址中:

def getURL(code):#获取城市对应的链接url = 'http://www.weather.com.cn/weather1d/'+code+'.shtml'return url

函数五、获取对应的天气情况

爬取对应的各种天气指数,同样用的也是笨笨的正则表达式(之前有很多网友问为何用不了,因为中国天气网改了代码,需要改变正则表达式)

def geturltext(xingming,html):#获取天气情况r = requests.get(html)r.raise_for_status()r.encoding = r.apparent_encodingtx = r.textaim = re.findall(r'<input type="hidden" id="hidden_title" value="(.*?)月(.*?)日(.*?)时(.*?) (.*?)  (.*?)  (.*?)"', tx)ult_index = re.findall(r'<li class="li1 hot">\n<i></i>\n<span>(.*?)</span>\n<em>(.*?)</em>\n<p>(.*?)</p>\n</li>\n', tx)cloth_index = re.findall(r'<i></i>\n<span>(.*?)</span>\n<em>(.*?)</em>\n<p>(.*?)</p>\n</a>\n</li>\n<li class="li4 hot dazhong">', tx)wash_index = re.findall(r'<i></i>\n<span>(.*?)</span>\n<em>(.*?)</em>\n<p>(.*?)</p>\n</a>\n</li>\n<li class="li1 hot">', tx)txt1 = '@看一看'+xingming+'的天气预报(^_^):'+'\n'+getYMD()+'\n'txt2 = '天气情况: '+aim[0][5]+'\n'+'温度情况: '+aim[0][6]+'\n'txt3 = '紫外线指数: '+ult_index[0][0]+', '+ult_index[0][2]+'\n'txt4 = '穿衣指数: '+cloth_index[0][0]+', '+cloth_index[0][2]+'\n'txt5 = '洗车指数: '+wash_index[0][0]+', '+wash_index[0][2]+'\n'txt = '\n'+txt1+txt2+txt3+txt4+txt5return txt

@看一看XXXX的天气预报(_):
今天日期:2020年4月19日, 星期天
中华农历: 三月廿七日, 庚子年庚辰月壬辰日
天气情况: 多云转小雨
温度情况: 24/17°C
空气指数: 中, 易感人群应适当减少室外活动。
紫外线指数: 中等, 涂擦SPF大于15、PA+防晒护肤品。
穿衣指数: 舒适, 建议穿长袖衬衫单裤等服装。
洗车指数: 不宜, 有雨,雨水和泥水会弄脏爱车。

函数六、微信自动发送

使用ITCHAT库自动登录和发送,微信账号不可用,只能用昵称。只要不频繁登录,频繁发送信息,问题都不会很大。

def sentauto(nicheng,txt):itchat.auto_login()result = itchat.search_friends(nickName=nicheng)user_name = result[0]['UserName']itchat.send_msg(txt, user_name)

函数七、主函数main()

def main():print("-"*30+'程序使用说明'+"-"*30)print('此程序功能在于发送给固定的一人,每天双击运行扫描就可以发送天气预报以及中英文每日一句')print('1、数据来源:中国天气网(可能有些城市天气网上搜不到),爱词霸每日一句')print('2、只能使用昵称来搜索,微信号不可用。如果昵称有特殊字符,直接在微信下复制即可')print('3、只能发给一个人,一个人,一个人!不要三心二意')print('4、输完信息后会弹出二维码,微信扫一扫即可以发送成功')print("-" * 30 + '程序使用说明' + "-" * 30)xingming = input('你想以何种称呼发送此信息:')location = input('您的地点(不要输入‘市’字)用于查询天气情况:')nicheng = input('请输入对方的微信昵称(请确保昵称正确,否则查不到):')code = getURLcode(location)html = getURL(code)text = get_iciba_everyday_chicken_soup(xingming)+geturltext(xingming,html)sentauto(nicheng,text)
main()

整体功能和代码都介绍完毕,代码写得不好,各位看官请见谅。肯定有很大的改进空间,也欢迎给位一起讨论,献丑了。

目前也遇到两个无法解决的问题,请教各位大神:

- [ ] 无法自动登录微信,必须手工扫一扫。有人说换个思路,直接用werobot 或者图灵机器人,这个我可以研究下
- [ ] 电脑无法天天7*24小时开机,代码虽然可以用第三方库设定时间运行,但是如果电脑没开机咋办?有人说部署在什么云服务器上,这个我是真的懵逼,完全不会,请大神指教。

Python也可以很暖男之每日发送爱词霸每日一句+日期+农历+天气预报+各种天气指数(更新)相关推荐

  1. 每天叫醒你的不是闹钟,而是“爱词霸每日一句”——Python实现将每日一句定时推送至微信...

    前言 前几天在网上看到一篇文章<教你用微信每天给女票说晚安>,感觉很神奇的样子,随后研究了一下,构思的确是巧妙.好,那就开始动工吧!服务器有了,Python环境有了,IDE打开了...然而 ...

  2. python 发送邮件附件很慢_python下smtpsendmail发送特别慢

    调用send_mail时卡在s.sendmail(me,to_list,fullText)不动了,很久才响应.代码如下:defsend_mail(to_list,sub,content,path):m ...

  3. 计算机语言python读音_编程语言是什么意思_编程语言的翻译_音标_读音_用法_例句_爱词霸在线词典...

    全部 a high-level programming language 高级编程语言 <牛津高阶英汉双解词典> A multipurpose programming language u ...

  4. 使用uniapp编写词霸每日一句页面

    无意中看到了金山词霸提供的每日一句api,刚好最近在用uniAPP开发,就利用中午休息的时间把每日一句的页面实现了一下 请求接口为http://open.iciba.com/dsapi/ 返回数据如下 ...

  5. python中capital是什么意思_capital是什么意思_capital的翻译_音标_读音_用法_例句_爱词霸在线词典...

    全部 四级 六级 高考 考研 But a new report by Deloitte, Global Human Capital Trends, based on a survey of more ...

  6. 什么软件可以搜索python答案_module是什么意思_module的翻译_音标_读音_用法_例句_爱词霸在线词典...

    全部 模块 组件 Unplug the existing cable from the NMT Interface connector on the RF module, if necessary. ...

  7. python中else是什么意思中文翻译_else是什么意思_else的翻译_音标_读音_用法_例句_爱词霸在线词典...

    全部 四级 六级 高考 考研 I did what everybody else thought looked successful, she says. 出自-2017年6月阅读原文 If we h ...

  8. python编写--爱词霸在线翻译软件

    原理: 在使用金山PDF的时候发现,里面的取词翻译是使用的iCIBA(爱词霸),而且翻译的非常准确.就尝试了一下在线翻译.网址:http://fy.iciba.com/?from=wps_client ...

  9. 词霸的每日一句的api接口

    本来打算用爬虫来爬数据的,但是爬出来的英文内容为 {{content}} 很难受,于是仔细分析了下它页面数据获取展示的方式,居然直接找到了api接口.... 词霸每日一句 分析了下词霸的每日一句接口每 ...

最新文章

  1. CentOS7下ntp安装步骤
  2. 遇到的问题和解决方案
  3. Sql Server相关报错解决
  4. 从babel实现es6类的继承来深入理解js的原型及继承
  5. 当前最主流的商业模式,普通老板如何打造强大后端实现躺赚的秘诀!
  6. Ubuntu20.04上安装部署Elasticsearch
  7. 一份我们团队Java开发的开发规范,参考了阿里巴巴Java开发手册终极版v1.3.0
  8. ipa 上传卡在鉴权_解决App Store上传ipa卡在Authenticating with App Store的问题
  9. java大数BinInteger
  10. 张朝阳:社交是互联网的中原 做「狐友」是要逐鹿中原
  11. k8s核心技术-Ingress(对外暴露应用实施)---K8S_Google工作笔记0042
  12. html新闻上下自动滚动代码,jQuery网站公告上下滚动自动轮播代码
  13. 字符串格式连接sqlserver数据库的字段概念解释
  14. Android状态页切换(数据加载中,数据加载失败,空数据)
  15. 高等数学(第七版)同济大学 习题1-7 个人解答
  16. web 应用程序与桌面应用程序的区别与优缺点
  17. 两张图轻松搞懂 二进制 八进制 十进制 十六进制 之间的转换关系
  18. sda、sdb 在linux中是什么意思
  19. java的流间隔问题_java – SuperMemo(SM-2)的间隔重复算法
  20. 字符串(昵称)过滤特殊符号和表情(通用)

热门文章

  1. 施密特正交方法例题(用于学习)
  2. PIL:Concepts 关于PIL的通道Bands,颜色模式Mode和滤波器Filters
  3. eclipse debug 执行到断点处并没有停下,断点无效问题
  4. IM——基本系统架构
  5. [THUWC 2017]在美妙的数学王国中畅游
  6. 想在 Ubuntu 上放飞梦想的小黑菜(2)
  7. 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(12月26日-1月1日)
  8. 流媒体服务器(1)—— 一个非常好用云转码流媒体平台
  9. 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter16-脚本控制
  10. cad2020安装1603错误_解决CAD安装过程中出现1603致命错误的方法