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

 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