每天自动给自己发天气预报的脚本
需求:
每天早上起来可以看看天气预报,然后顺便当个闹钟使
思路是这样的:
模块一:采用yahoo weather api获取北京的天气
模块二:通过网页版飞信,模拟飞信登陆,给自己发短信
模块三:发送信息
一。get_yahoo_weather.py
#!/usr/bin/env python #coding=utf-8 import urllib2 from xml.etree import cElementTree as ET class GetWeather: def __init__(self): self.weather = self.makexml() def makexml(self): url = "http://weather.yahooapis.com/forecastrss?w=2151330&u=c" res = urllib2.urlopen(url) xmlfile = open("yahoo.xml",'w') xmlfile.writelines(res.read()) xmlfile.close() return self.xmlET() def xmlET(self): tree = ET.ElementTree(file="yahoo.xml") forecast = [] for elem in tree.iter(tag="{http://xml.weather.yahoo.com/ns/rss/1.0}forecast"): forecast.append(elem.attrib) return self.msg(forecast) def msg(self,forecast): msg_data = "" fmt = "\n%s %s %s %s\n"%("日期","天气","最高温","最低温") msg_data += fmt for i in forecast: msg_data += "%s %s %s %s"%(i['date'],i['text'],i['high'],i['low']) msg_data +="\n" return msg_data if __name__ == "__main__": w = GetWeather() print w.weather
二。fetionsimu.py
#!/usr/bin/env python #coding=utf-8 import cookielib import urllib import urllib2 import json import re import time def fetion(weather_msg = "no data"): cj = cookielib.LWPCookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) urllib2.install_opener(opener) t = time.localtime() print t.tm_year,t.tm_mon,t.tm_mday print "logining" urlbase = "http://f.10086.cn/im5/" response_text = urllib2.urlopen(urlbase) response_text = response_text.read() partten = re.compile(r'login/login\.action\?mnative=\d&t=\d+') urlplus = partten.search(response_text) urlcomplete = urlbase + urlplus.group(0) # print urlcomplete qheader = {'Referer':urlcomplete} args = {'m':'your phone number','pass':'your password'} logurl = "http://f.10086.cn/im5/login/loginHtml5.action" req = urllib2.Request(logurl,urllib.urlencode(args),qheader) jump = opener.open(req) page = jump.read() # print page page = json.loads(page) if page['nickname'] == "LGY": print "login successfully" else: print "error in pass or username" sendmsgurl = "http://f.10086.cn/im5/chat/sendNewGroupShortMsg.action" msg_data = {"touserid":page["idUser"],"msg":weather_msg} msg_back = urllib2.Request(sendmsgurl,urllib.urlencode(msg_data),qheader) msg_jump = opener.open(msg_back) msguse = msg_jump.read() msguse = json.loads(msguse) if msguse["info"] == u"发送成功": print "send successfully" else: print msguse print "send failed" if __name__ == "__main__": fetion()
三。sendweather.py
#!/usr/bin/env python import time from get_yahoo_weather import GetWeather from fetionsimu import fetion def sendmsg(w): fetion(w) if __name__ == "__main__": w = GetWeather() sendmsg(w.weather)
最后加入开机启动
用crontab -e编辑开机启动项
0 7 * * * /test/mkfun/sendweather.py > /test/mkfun/sdwthmsg.log 2>&1
然后就ok了。。。