pyhthon 利用爬虫结合阿里大于短信接口实现短信发送天气预报

news/2024/7/19 9:47:55 标签: 爬虫, json, python
 1 # -*- coding: utf-8 -*-  
 2     ''''' 
 3     SDK for alidayu 
 4      
 5     requires: python3.x, requests 
 6      
 7     @author: raptor.zh@gmail.com 
 8     requests 打包出错故替换成urllib库  
 9     '''  
10       
11     #import requests  
12     import urllib.request  
13     import urllib.parse  
14     import hashlib  
15     from time import time  
16     import json  
17     import logging  
18       
19     logger = logging.getLogger(__name__)  
20       
21       
22     class RestApi(object):  
23         def __init__(self, key, secret, url="https://gw.api.tbsandbox.com/router/rest", partner_id=""):  
24             self.key = key  
25             self.secret = secret  
26             self.url = url  
27             self.partner_id = partner_id  
28       
29         def sign(self, params):  
30             #===========================================================================  
31             # '''签名方法  
32             # @param parameters: 支持字典和string两种  
33             # '''  
34             #===========================================================================  
35             if isinstance(params, dict):  
36                 params = "".join(["".join([k, v]) for k,v in sorted(params.items())])  
37                 params = "".join([self.secret, params, self.secret])  
38             sign = hashlib.md5(params.encode("utf-8")).hexdigest().upper()  
39             return sign  
40       
41         def get_api_params(self):  
42             params = {}  
43             try:  
44                 [params.__setitem__(k, getattr(self, k)) for k in self.get_param_names()]  
45             except AttributeError:  
46                 raise Exception("Some parameters is needed for this api call")  
47             [params.__setitem__(k, getattr(self, k)) for k in self.get_option_names() if hasattr(self, k)]  
48             print(params)  
49             return params  
50       
51         def getResponse(self, authorize=None):  
52             sys_params = {  
53                     "method": self.get_api_name(),  
54                     "app_key": self.key,  
55                     "timestamp": str(int(time() * 1000)),  
56                     "format": "json",  
57                     "v": "2.0",  
58                     "partner_id": self.partner_id,  
59                     "sign_method": "md5",  
60                     }  
61             if authorize is not None:  
62                 sys_params['session'] = authorize  
63             params = self.get_api_params()  
64             sign_params = sys_params.copy()  
65             sign_params.update(params)  
66             sys_params['sign'] = self.sign(sign_params)  
67             headers = {  
68                      'Content-type': 'application/x-www-form-urlencoded;charset=UTF-8',  
69                      "Cache-Control": "no-cache",  
70                      "Connection": "Keep-Alive",  
71             }  
72             #headers = {"Content-Type":"application/x-www-form-urlencoded;charset=utf-8"}  
73       
74             sys_params.update(params)  
75             logger.debug(json.dumps(sys_params))  
76             data = urllib.parse.urlencode(sys_params).encode('utf-8')  
77             r = urllib.request.Request(self.url, data, headers)  
78             result = urllib.request.urlopen(r).read().decode('utf-8')  
79             return result  
80             #r = requests.post(self.url, params=sys_params, headers=headers)  
81             #r.raise_for_status()  
82             #return r.json()  
83       
84       
85     class AlibabaAliqinFcSmsNumSendRequest(RestApi):  
86         def get_api_name(self):  
87             return "alibaba.aliqin.fc.sms.num.send"  
88       
89         def get_param_names(self):  
90             return ['sms_type', 'sms_free_sign_name', 'rec_num', 'sms_template_code']  
91       
92         def get_option_names(self):  
93             return ['extend', 'sms_param']  

调用接口

 1     import json  
 2     from alidayu import AlibabaAliqinFcSmsNumSendRequest  
 3     from TianQi_Spider import GetWeather  
 4       
 5       
 6       
 7     def sms_send(phone):  
 8         weather = GetWeather()  
 9           
10         appkey = '236******'  
11         secret = 'e81e81691c0cdbaacbfae2f***'  
12         url = 'https://eco.taobao.com/router/rest'  
13         # params = {'name':'ks2','num':'50'}  
14         req = AlibabaAliqinFcSmsNumSendRequest(appkey, secret, url)  
15         req.extend = "123456"  
16         req.sms_type = "normal"  
17         req.sms_free_sign_name = "**天气"  
18         #req.sms_param="{\"weather\":\"\"{name}.format(name=today_weather)\"\"}"  
19         #req.sms_param=json.dumps(params)  
20         req.sms_param=str(weather)  
21         req.rec_num = phone  
22         req.sms_template_code = "SMS_482***"  
23         try:  
24             resp = req.getResponse()  
25             print(resp)  
26         except Exception as e:  
27             print(e)  
28       
29       
30       
31     sms_send('178***')  
32     print("天气已爬取,短信发送成功")  

 

转载于:https://www.cnblogs.com/ruoniao/p/6808846.html


http://www.niftyadmin.cn/n/963251.html

相关文章

LabVIEW中调用共享库

LabVIEW中调用共享库 调用库函数节点可调用大多数标准库或DLL的结构。打开自动化VI、属性节点和调用节点可调用含有ActiveX对象的共享库。 调用库函数节点:直接调用DLL库或共享库。该函数为可扩展函数,可显示已连线的输入端和输出端的数据类型,与捆绑函…

连接数据库提示4064错误

局域网环境下,用sa账号连接另一台电脑的数据库,提示不能连接,错误代码4064。 解决方法:在目标服务器上用windows身份认证进入数据库,进入“安全性-登录名”,双击sa,设置默认数据库为master&…

LabVIEW通过数据值引用保存数据并减少数据副本

LabVIEW通过数据值引用保存数据并减少数据副本 因为LabVIEW频繁复制数据,处理大量数据的应用程序可能会速度降低,甚至内存不够。使用数据值引用存储大量数据,有助于内存管理,还可以避免过于频繁复制数据。 下列程序框图显示了如…

从史上八大MySQL事故中学到的经验

本文列举了史上八大MySQL宕机事件原因、影响以及人们从中学到的经验,文中用地震级数来类比宕机事件的严重性和后果,排在最严重层级前两位的是由于亚马逊AWS宕机故障(相当于地震十级和九级)。 一、Percona网站宕机事件 震级:3 发生时长&#…

php CI笔记

控制器1.文件名不需要加后缀,全部小写2.类名首字母大写,继承CI_Controller基类3.以下划线开头或者非public的方法不能被浏览器请求4.在config/routes.php中可以配置默认控制器$route[default_controller]5.与类名相同(无论大小写)的方法会被当做类的构造…

LabVIEW项目规划和设计

LabVIEW项目规划和设计 开发VI前,先根据用户需求列出所需执行任务的清单。明确用户界面组件及用于数据分析、显示分析结果等操作所需的输入控件和显示控件的数量和类型。与目标用户或项目组其他成员详细规划和商讨,明确用户需在何时以何种方式实现上述功…

LabVIEW使用源代码控制

LabVIEW使用源代码控制 如需在LabVIEW中使用源代码控制,必须根据选择的第三方源代码控制软件对LabVIEW进行配置。关于LabVIEW兼容的第三方源代码控制软件的最新信息,见知识库。 注:只有在专业版开发系统中才可使用源代码控制。 按照下列步…

SQL存储过程开发中十条军规

1、存储过程中要尽可能少的定义变量,能复用就复用。2、存储过程中两个列相互赋值、或者是变量给临时表中插入值的时候要注意两个数据类型定义要完全一致。3、存储过程中临时表中的列名最好不要和存储过程中的变量名重名,否则,出现问题很难调试…