zoukankan      html  css  js  c++  java
  • 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("天气已爬取,短信发送成功")  
  • 相关阅读:
    CentOS7安装mysql-8
    zabbix监控规划及实施
    集群技术
    自动化脚本-配置LVS(DR模式)
    Pacemaker+ISCSI实现Apache高可用-配置
    创建集群corosync
    我的第一个python程序——猜数字
    质量报告
    新需求测试与回归测试
    冒烟测试
  • 原文地址:https://www.cnblogs.com/ruoniao/p/6808846.html
Copyright © 2011-2022 走看看