diff --git a/python/aliyun_downrds.py b/python/aliyun_downrds.py new file mode 100644 index 0000000..aecf5da --- /dev/null +++ b/python/aliyun_downrds.py @@ -0,0 +1,149 @@ +# coding:utf-8 + + +import requests +import urllib +import base64 +import hmac +import time +import json +import uuid +import logging +from hashlib import sha1 +import os + +# 阿里云rds数据库自动备份下载 + +logging.basicConfig(level=logging.DEBUG, + format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', + datefmt='%a, %d %b %Y %H:%M:%S', + filename='H:\\download.log', + filemode='a') + +################################################################################################# +#定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准错误,并将其添加到当前的日志处理对象# +console = logging.StreamHandler() +console.setLevel(logging.INFO) +formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') +console.setFormatter(formatter) +logging.getLogger('').addHandler(console) + + +def sign(accessKeySecret, parameters): + #=========================================================================== + # '''签名方法 + # @param secret: 签名需要的密钥 + # @param parameters: 支持字典和string两种 + # ''' + #=========================================================================== + # 如果parameters 是字典类的话 + + sortedParameters = sorted(parameters.items(), key=lambda parameters: parameters[0]) + + canonicalizedQueryString = '' + for (k,v) in sortedParameters: + canonicalizedQueryString += '&' + percent_encode(k) + '=' + percent_encode(v) + stringToSign = 'GET&%2F&' + percent_encode(canonicalizedQueryString[1:]) + + h = hmac.new(accessKeySecret + "&", stringToSign, sha1) + signature = base64.encodestring(h.digest()).strip() + return signature + +def percent_encode(encodeStr): + encodeStr = str(encodeStr) + res = urllib.quote(encodeStr, '') + res = res.replace('+', '%20') + res = res.replace('*', '%2A') + res = res.replace('%7E', '~') + return res + +def CreateBackup(apikey,apisecret): + cdb_parameters = { \ + 'Format' : 'json', \ + 'Version' : '2014-08-15', \ + 'AccessKeyId' : apikey, \ + 'SignatureVersion' : '1.0', \ + 'SignatureMethod' : 'HMAC-SHA1', \ + 'SignatureNonce' : str(uuid.uuid1()), \ + 'TimeStamp' : timestamp, \ + 'Action' : 'CreateBackup', \ + 'DBInstanceId' : 'rdswb45274s******',\ + 'BackupMethod' : 'Physical',\ + 'BackupType' : 'FullBackup' + } + + signature = sign(apisecret,cdb_parameters) + cdb_parameters['Signature'] = signature + url = "/?" + urllib.urlencode(cdb_parameters) + try: + apireq = requests.get(apiurl+url) + except: + logging.error(u'网络连接失败') + exit() + return apireq.json() + +def getdownurl(apikey,apisecret): + parameters = { \ + 'Format' : 'json', \ + 'Version' : '2014-08-15', \ + 'AccessKeyId' : apikey, \ + 'SignatureVersion' : '1.0', \ + 'SignatureMethod' : 'HMAC-SHA1', \ + 'SignatureNonce' : str(uuid.uuid1()), \ + 'TimeStamp' : timestamp, \ + 'Action' : 'DescribeBackups', \ + 'DBInstanceId' : 'rdswb452********',\ + 'StartTime' : starttime,\ + 'EndTime' : endtime + } + signature = sign(apisecret,parameters) + parameters['Signature'] = signature + url = "/?" + urllib.urlencode(parameters) + try: + apireq = requests.get(apiurl+url) + except: + logging.error(u'网络连接失败') + exit() + try: + url = apireq.json()['Items']['Backup'][0]['BackupDownloadURL'] + print apireq.json()['Items']['Backup'] + except: + logging.error(u'没有获取到下载地址') + exit() + return url + +def downurl(url,PWD): + Name = url.split('?')[0] + Name = Name.split('/')[4] + if os.path.isfile(PWD+Name): + logging.error(u'文件已存在: %s' % Name) + else: + try: + r = requests.get(url,stream=True) + with open(PWD+Name, 'wb') as fd: + for chunk in r.iter_content(): + fd.write(chunk) + except: + logging.ERROR(u'下载文件失败') + exit() + logging.info(u'数据库下载完成:%s' % str(url)) + + +if __name__ == "__main__": + apiurl = 'http://rds.aliyuncs.com' + apikey = 'vSs*********' + apisecret = '' + timestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()) + starttime = time.strftime("%Y-%m-%dT00:00Z", time.gmtime()) + + result = CreateBackup(apikey,apisecret) + logging.info(u'创建备份任务 %s' % str(result)) + logging.info(u'等待300秒钟') + time.sleep(300) + + endtime = time.strftime("%Y-%m-%dT%H:%MZ", time.gmtime()) + dburl = getdownurl(apikey,apisecret) + logging.info(u'获取备份数据库下载地址: %s' % str(dburl)) + + logging.info(u'开始下载') + downurl(dburl,u"H:\\db\\") \ No newline at end of file diff --git a/python/yunpian_sedsms.py b/python/yunpian_sedsms.py new file mode 100644 index 0000000..ed4f415 --- /dev/null +++ b/python/yunpian_sedsms.py @@ -0,0 +1,63 @@ +#coding:utf-8 + +import httplib +import urllib + +# Desc: 云片网批量发通知 +# 服务地址 +host = "yunpian.com" +# 端口号 +port = 80 +# 版本号 +version = "v1" +# 查账户信息的URI +user_get_uri = "/" + version + "/user/get.json" +# 智能匹配模版短信接口的URI +sms_send_uri = "/" + version + "/sms/send.json" +# 模板短信接口的URI +sms_tpl_send_uri = "/" + version + "/sms/tpl_send.json" + +def get_user_info(apikey): + """ + 取账户信息 + """ + conn = httplib.HTTPConnection(host, port=port) + conn.request('GET', user_get_uri + "?apikey=" + apikey) + response = conn.getresponse() + response_str = response.read() + conn.close() + return response_str + +def send_sms(apikey, text, mobile): + """ + 能用接口发短信 + """ + params = urllib.urlencode({'apikey': apikey, 'text': text, 'mobile':mobile}) + headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"} + conn = httplib.HTTPConnection(host, port=port, timeout=30) + conn.request("POST", sms_send_uri, params, headers) + response = conn.getresponse() + response_str = response.read() + conn.close() + return response_str + +def tpl_send_sms(apikey, tpl_id, tpl_value, mobile): + """ + 模板接口发短信 + """ + params = urllib.urlencode({'apikey': apikey, 'tpl_id':tpl_id, 'tpl_value': tpl_value, 'mobile':mobile}) + headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"} + conn = httplib.HTTPConnection(host, port=port, timeout=30) + conn.request("POST", sms_tpl_send_uri, params, headers) + response = conn.getresponse() + response_str = response.read() + conn.close() + return response_str + +if __name__ == '__main__': + apikey = "dd65ef486************" + text = "【签名】内容" + with open(u"sj2.txt", 'r') as urlfile: + for line in urlfile.readlines(): + mobile=line.strip('\n') + print(send_sms(apikey, text, mobile))