每天5分钱,用python给关心的人发送天气信息和你的关怀
起因:女朋友是个非常粗心大意的人,经常一变天就要感冒。自己又很忙,不能每次都提醒,于是乎就想写个python脚本,每天获取当日的天气信息,用短信的形式发给她。
一、获取天气信息
中国天气,天气API没啥限制,直接调用就可以。
先获取目标城市的ID,然后拼接到API地址上http://www.weather.com.cn/data/cityinfo/你的目标城市id.html
用Python3 urllib.request模块抓取天气信息:
import urllib.request\nimport json\n\nweather_city_code = \"101290101\"#目标城市id\nweather_url = \"http://www.weather.com.cn/data/cityinfo/%s.html\" % weather_city_code\n\nrequest = urllib.request.urlopen(weather_url)\nrs = request.read().decode()\nweatherinfo = json.loads(rs)[\"weatherinfo\"]
得到如下天气信息:
{\"city\": \"昆明\", \"cityid\": \"101290101\", \"temp1\": \"5℃\", \"temp2\": \"18℃\", \"weather\": \"晴\", \"img1\": \"n0.gif\", \"img2\": \"d0.gif\", \"ptime\": \"18:00\"}\n
二、使用短信接口(用阿里云短信服务示例)
1.找到短信服务,申请开通短信服务
2.申请短信模板和短信签名
审核通过后得到短信模板的ID。至此短信模板申请成功。
注意:为了成功发送一条短信通知,您至少需要完成以下步骤
在控制台完成短信签名与短信模板的申请,获得调用接口必备的参数
在“短信签名”页面完成签名的申请,获得短信签名的字符串 签名申请手册
在“短信模板”页面完成模板的申请,获得模板ID。模板申请手册
三、构建代码
由于阿里云短信接口只有python2.x的sdk,使用python3.x的小伙伴就很蛋疼了,怎么办呢?这里有python3版本的简单实现:
# ACCESS_KEY_ID/ACCESS_KEY_SECRET 根据实际申请的账号信息进行替换\nACCESS_KEY_ID = \"你的阿里云app_id\"\n\nACCESS_KEY_SECRET = \"你的阿里云secret\"\n\n\nclass AliYunSMS(object):\n def __init__(self):\n self.format = \"JSON\"\n self.version = \"2017-05-25\"\n self.key = ACCESS_KEY_ID\n self.secret = ACCESS_KEY_SECRET\n self.signature = \"\"\n self.signature_method = \"HMAC-SHA1\"\n self.signature_version = \"1.0\"\n self.signature_nonce = str(uuid.uuid4())\n self.timestamp = datetime.datetime.utcnow().isoformat(\"T\")\n self.region_id = ALIYUN_API_REGION_ID\n\n self.gateway = ALISMS_GATEWAY\n self.action = \"\"\n self.sign = \"\"\n self.template = \"\"\n self.params = {}\n self.phone = None\n\n def send_single(self, phone, sign, template, params):\n self.action = \"SendSms\"\n self.phone = phone\n self.sign = sign\n self.params = params\n self.template = template\n\n query_string = self.build_query_string()\n\n resp = requests.get(self.gateway + \"?\" + query_string)\n resp = resp.json()\n return resp\n\n def build_query_string(self):\n query = []\n query.append((\"Format\", self.format))\n query.append((\"Version\", self.version))\n query.append((\"AccessKeyId\", self.key))\n query.append((\"SignatureMethod\", self.signature_method))\n query.append((\"SignatureVersion\", self.signature_version))\n query.append((\"SignatureNonce\", self.signature_nonce))\n query.append((\"Timestamp\", self.timestamp))\n query.append((\"RegionId\", self.region_id))\n query.append((\"Action\", self.action))\n query.append((\"SignName\", self.sign))\n query.append((\"TemplateCode\", self.template))\n query.append((\"PhoneNumbers\", self.phone))\n params = \"{\"\n for param in self.params:\n params += \"\"\" + param + \"\"\" + \":\" + \"\"\" + str(self.params[param]) + \"\"\" + \",\"\n params = params[:-1] + \"}\"\n query.append((\"TemplateParam\", params))\n query = sorted(query, key=lambda key: key[0])\n query_string = \"\"\n for item in query:\n query_string += quote(item[0], safe=\"~\") + \"=\" + quote(item[1], safe=\"~\") + \"&\"\n query_string = query_string[:-1]\n tosign = \"GET&%2F&\" + quote(query_string, safe=\"~\")\n secret = self.secret + \"&\"\n hmb = hmac.new(secret.encode(\"utf-8\"), tosign.encode(\"utf-8\"), \"sha1\").digest()\n self.signature = quote(base64.standard_b64encode(hmb).decode(\"ascii\"), safe=\"~\")\n query_string += \"&\" + \"Signature=\" + self.signature\n return query_string\n\n\n# 可选XML\nALIYUN_API_FORMAT = \"JSON\" \n# 区域,可选\nALIYUN_API_REGION_ID = \"cn-hangzhou\" \nALISMS_GATEWAY = \"http://dysmsapi.aliyuncs.com/\" \nALISMS_SIGN = \"你的短信签名\" \nALISMS_TPL_REGISTER = \"你的短信模板code\" \n \nsms = AliYunSMS()\n# :param phone: 手机号\n# :param sign: 短信签名\n# :param template: 短信模板\n# :param params: 模板变量(你申请短信模板时候的变量名)\n# sms.send_singe(phone, sign, template, params)\n\n# TODO 调用短信记录查询接口,返回json\nresponse = sms.send_single(\"135XXXXXXXX\", ALISMS_SIGN, ALISMS_TPL_REGISTER, {\"name\": \"11111\", \"weather\": \"多云见晴\"})\nprint(response)
然后把刚刚得到的天气发给你要关心的人吧~
四、每天四分钱,送出你每天早上最真挚的关怀~
业务逻辑实现了,接下来需要linux在每天早上6点执行我们的脚本咯。
编写定时任务:
#crontab -e\n\n0 6 * * * python3 /opt/sendMsg.py
保存。每天清晨 6:00:01,用python3执行/opt/sendMsg.py文件。至此,你的祝福跟关心就能每天早上到达她的手机咯~
0 条评论
想说点什么呢