学习Python学的头疼 很早的时候就是为了实现用模块登陆qq空间播报天气预报来着的 结果模块失效
无意中看到ITchat可以实现类似的功能 就有了这篇文章
代码优化无力[懒] 代码重写次数过多[懒] 总的来说就是很懒 因为是自己用的 是在学面向对象之前学的 所以代码都是面向过程的方式 而且重写地方次数比较多
主要实现功能:使用api接口获取天气预报 一言句子 部分新闻 在特定时间推送
1.安装模块
- 首先安装itchat模块:pip install itchat[类似的另一个模块就是itchmp 是公众号的模块 但是有点烦 我就用个人号了]
2.执行 实现
- 需要用到的模块:json urllib urllib2 schedule
- 部分用到的itchat方法:
itchat.auto_login(hotReload = True,enableCmdQR = 2)`这条方法就是登陆微信并且短时间内不会重新扫码且在命令行显示二维码`
get_user = itchat.search_friends(name = 'test')
`name参数里面提供的是你好友的备注 或者微信名称 或者微信账号 但是不知道为什么微信账号好像不行哎 这个用来得到微信里面特定用户的字典文件
里面存储了一条UserName值 后面就是特定的标识符(就这么理解吧)`
get_user = get_user[0]['UserName']`这条就是得到UserName的值 为后面发送消息做准备`
itchat.send()`这里只有两个参数 第一个是你要发送出去的内容 第二个是发送给指定UserName值得用户`
`因为schedule里面的do方法要提供一个函数 所以要把所有代码定义成一个函数调用`
`然后用他的run_pending()方法开始执行 但是貌似有bug 一定时间好像微信登陆会失效 自动就下线了 用户名密码登陆倒是无所谓 扫码登陆就很烦`
3.代码
注意!!!!!没有重构 很臃肿 直接用我自己写的几个api拼起来的!!!!!!!看不下去的我是不会停的!!!!!!!!!
#-*- coding=utf-8 -*-
import itchat
import sys
import json
import urllib2
import urllib
import time
import schedule
itchat.auto_login(hotReload = True,enableCmdQR = 2)
#itchat登陆方法 后面参数是短时间关闭程序再次打开不用重新扫码 和 启用命令行二维码
def job():
#获取一言api
api = urllib2.urlopen('https://v1.hitokoto.cn/?encode=text').read()
#对api进行utf8解码 使其正常输出 否则都是乱码
api = api.decode('utf8')
#这里写入自己城市
cityname = '昆山'
#对城市进行URL格式编码
cityname = urllib.quote(cityname)
#这里是你的api地址
get_city_url = ('http://v.juhe.cn/weather/index?format=2&cityname=%s&key=b836fb423616b628ae307db86ba1b0d4' % cityname)
#获取api的内容 str格式
get_city_json = urllib2.urlopen(get_city_url).read()
#用json转换为字典格式
get_city_json_except = json.loads(get_city_json)
#访问大字典的子键 用子键访问更深的一个子键
get_main = get_city_json_except['result']['today']
#温度
get_temp = get_main['temperature']
#天气
get_we = get_main['weather']
#风向风速
get_wind = get_main['wind']
#这里是itchat获取好友的union 就是用户唯一标识符 具体用法百度
#后面接的name里面可以是微信号 备注 他的微信名称
#这是一个list和字典组合的格式
get_user = itchat.search_friends(name = 'test')
#访问UserName 这是唯一的 也是下面要用到的
get_user = get_user[0]['UserName']
#发送消息 第一个参数是消息内容 第二个是用户的名称 同样百度itchat可以查到具体参数
itchat.send(
u'昆山' + u'的今日天气:\n' + u'温度:' + get_temp + '\n' + u'天气情况:' + get_we + '\n' + u'风向信息:' + get_wind + '\n'
,
get_user)
#发送一言获取的句子
itchat.send(api,get_user)
#获取新闻
url = 'http://v.juhe.cn/toutiao/index?type=yule&key=d48d19aee725bb6137efa0d53c4bf6ec'
#读取json
get_url = urllib2.urlopen(url).read()
#转换
get_url_json = json.loads(get_url)
#访问
get_url_main = get_url_json['result']['data']
#具体参考上面代码
get_user = itchat.search_friends(name = 'test')
get_user = get_user[0]['UserName']
#获取所有新闻信息 但是这里我是用print看的
#真正发送的话会分开发很多内容 暂时不管他
for i in get_url_main:
main_message = i['title']
main_url = i['url']
change_main = main_message + '\n' + u'原文链接:' + main_url + '\n'
#延时发送
time.sleep(5)
#发送信息
itchat.send(change_main,get_user)
#设置定时执行 每天的12:40发送job函数的内容
#job()
schedule.every().day.at("6:00").do(job)
while True:
#一直运行定时执行
schedule.run_pending()
补一句 因为新闻信息获取后面的换行我要把它读到文件里面组合成一个list再输出来的话太麻烦了 要是想搞随便各位 我是真的懒。。。就是写着玩 代码确实渣
网友评论