示例#1
0
class Client:
    def __init__(self,filepath,ip):
        self.filepath = filepath
        with open(filepath, 'r') as f:
            self.config = json.load(f)
        self.clt = AcsClient(self.config.get('Key'), self.config.get('Secret'), self.config.get('Region'))
        if not self.config.get('RecordID'):
            self.GetRecordID()
        self.config['IP']=ip
        self.UpdateRecord()

    def GetRecordID(self):
        id_r = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest()
        id_r.set_DomainName(self.config.get('Domain'))
        id_r.set_RRKeyWord(self.config.get('RR'))
        id_re = self.clt.do_action(id_r)
        id_xml = fromstring(id_re.decode())
        self.config['RecordID'] = id_xml.find('DomainRecords/Record/RecordId').text
        with open(self.filepath, "w") as f:
                f.write(json.dumps(self.config))

    def UpdateRecord(self):
        ur_r = UpdateDomainRecordRequest.UpdateDomainRecordRequest()
        ur_r.set_RR(self.config['RR'])
        ur_r.set_RecordId(self.config['RecordID'])
        ur_r.set_Type('A')
        ur_r.set_Value(self.config['IP'])
        ur_r.set_Line("default")
        ur_re = self.clt.do_action(ur_r)
        Log(ur_re)
示例#2
0
 def __init__(self,filepath,ip):
     self.filepath = filepath
     with open(filepath, 'r') as f:
         self.config = json.load(f)
     self.clt = AcsClient(self.config.get('Key'), self.config.get('Secret'), self.config.get('Region'))
     if not self.config.get('RecordID'):
         self.GetRecordID()
     self.config['IP']=ip
     self.UpdateRecord()
示例#3
0
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
import random
import json

client = AcsClient('LTAIkQEh2SFTBmfn', 'oeUgaDcSvRE9QLvIo0mrqO3G04o6kj',
                   'default')
code = random.randrange(1000, 10000)  # 生成随机验证码

# code = random.randrange(1000, 10000)  # 生成随机验证码
# params = {
#         'code': code
#     }
# request = CommonRequest()
# request.set_accept_format('json')
# request.set_domain('dysmsapi.aliyuncs.com')
# request.set_method('POST')
# request.set_protocol_type('https')  # https | http
# request.set_version('2017-05-25')
# request.set_action_name('SendSms')
#
# request.add_query_param('PhoneNumbers', "13526678185")
# request.add_query_param('SignName', "亿程软件")
# request.add_query_param('TemplateCode', "SMS_168821509")
# #request.add_query_param('TemplateParam', "{\"code\":\"1234\"}")
# request.add_query_param('TemplateParam', json.dumps(params))
#
# response = client.do_action(request)
# # python2:  print(response)
# print(str(response, encoding='utf-8'))
示例#4
0
from datetime import datetime

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest

rc_rr = "www"				# 指代二级域名(子域名,空则使用 @ 代替)
rc_domain = "example.org"	# 指代完整域名,若未配置阿里云 NameServer 解析修改也无效
rc_format = "json"			# 指定返回数据格式,目前本例使用 JSON 数据
rc_type = "A"				# 指定修改记录类型,目前本例使用 A 记录
rc_ttl = "600"				# 指定修改 TTL 值,目前本例使用 600 秒
rc_format = "json"			# 使用 JSON 返回数据,也可以填写为 XML

access_key_id = ""			# 这里为 Aliyun AccessKey 信息
access_key_secret = ""		# 这里为 Aliyun AccessKey 信息

clt = AcsClient(access_key_id, access_key_secret, 'default')

def check_record_id(dns_rr, dns_domain):
    times = 0			# 用于检查对应子域名的记录信息
    check = 0			# 用于确认对应子域名的记录信息
    request = CommonRequest()
    request.set_accept_format('json')                   # 设置返回格式
    request.set_domain('alidns.aliyuncs.com')           # 阿里云服务
    request.set_method('POST')
    request.set_protocol_type('https')
    request.set_version('2015-01-09')
    request.set_action_name('DescribeDomainRecords')

    request.add_query_param('DomainName', rc_domain)    # 设置请求域名
    request.add_query_param('RRKeyWord', rc_rr)
    request.add_query_param('TypeKeyWord', rc_type)
示例#5
0
import os
import json
import ConfigParser

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.profile import region_provider
from aliyunsdkcore.http import format_type
from aliyunsdkcore.request import CommonRequest
from aliyunsdkcore.acs_exception import exceptions

cf = ConfigParser.ConfigParser()
config_file = os.path.expanduser('~') + "/aliyun-sdk.ini"
cf.read(config_file)

client = AcsClient(cf.get("daily_access_key", "id"),
                   cf.get("daily_access_key", "secret"), 'cn-hangzhou')
assert client


class TestCommonApi(object):
    acs_client = client

    def set_client(self, acs_client=client):
        self.acs_client = acs_client

    def test_roa_form_with_init(self):
        request = CommonRequest(domain='ft.aliyuncs.com',
                                version='2016-01-02',
                                action_name='TestRoaApi',
                                uri_pattern='/web/cloudapi')
        request.set_method('POST')
示例#6
0
文件: aliyunsms.py 项目: Rousong/xfz
"""
短信业务调用接口示例,版本号:v20170525

Created on 2017-06-12

"""

ACCESS_KEY_ID = "LTAI5U4PiVykexVV"
ACCESS_KEY_SECRET = "7A4WVVaiUwxVKrpWSCwxXdoNiMJoQk"

# 注意:不要更改
REGION = "cn-hangzhou"
PRODUCT_NAME = "Dysmsapi"
DOMAIN = "dysmsapi.aliyuncs.com"

acs_client = AcsClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET, REGION)
region_provider.add_endpoint(PRODUCT_NAME, REGION, DOMAIN)


def send_sms(phone_numbers, code):
    business_id = uuid.uuid1()
    sign_name = '小饭桌应用'
    template_code = 'SMS_68465012'
    template_param = json.dumps({"code": code})
    smsRequest = SendSmsRequest.SendSmsRequest()
    # 申请的短信模板编码,必填
    smsRequest.set_TemplateCode(template_code)
    # 短信模板变量参数
    if template_param is not None:
        smsRequest.set_TemplateParam(template_param)
    # 设置业务请求流水号,必填。
示例#7
0
#!/usr/bin/env python
#coding=utf-8
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkalidns.request.v20150109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequest
from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest
import json
import requests
import re

client = AcsClient(' ', ' ', 'cn-hangzhou')
domainname = 'insert your ddns domain name'
tagetrecord = 'insert you A record'


def getCurrentIp() -> str:
    try:
        taobaoInterface = requests.get(
            'http://ip.taobao.com/service/getIpInfo.php?ip=myip', timeout=1)
        ip = taobaoInterface.json(
        )['data']['ip'] if taobaoInterface.status_code == 200 else ''
    except Exception as e:
        souhuInterface = requests.get('http://pv.sohu.com/cityjson?ie=utf-8',
                                      timeout=1)
        if souhuInterface.status_code == 200:
            ip = re.search(
                r'(((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3})',
                souhuInterface.text)
            ip = ip.group()
    return ip
示例#8
0
    def __buildClient(self, json_config):

        return AcsClient(str(json_config['id']), str(json_config['secret']),
                         "cn-shanghai")
示例#9
0
def set_client(cfg_file, region_id, top_dir=None):
    """
    Configure client
    :param cfg_file: specify the configuration file
    :param region_id: specify region id
    :param top_dir: working path
    :return: None
    """
    global ACCESS_KEY_ID
    global ACCESS_KEY_SECRET
    global REGION_ID
    global client
    global JSON_INDENT
    global ROS_DEBUG

    if top_dir is None:
        default_file = 'ros/ros.conf'
    else:
        default_file = os.path.normpath(top_dir + '/ros/ros.conf')

    cf = NewConfigParser.NewConfigParser()
    if cfg_file is None:
        if ROS_DEBUG:
            print("Use default config file: %s\n" % default_file)
        cfg_file = default_file

    if os.path.isfile(cfg_file):
        pass
    else:
        if os.path.isdir(top_dir + '/ros'):
            pass
        else:
            os.mkdir(top_dir + '/ros')
            
        print('Please set Aliyun access info first.')

        access_key_id = raw_input('Enter your access key id:')
        while check_access_info(access_key_id) is False:
            access_key_id = raw_input('Enter your access key id, only characters and numbers:')
        
        access_key_secret = raw_input('Enter your access key secret, without quote:')
        while check_access_info(access_key_secret) is False:
            access_key_secret = raw_input('Enter your access key secret, only characters and numbers:')

        default_region_id = raw_input('Enter default region id, without quote:')

        cf.add_section('ACCESS')
        cf.set('ACCESS', 'ACCESS_KEY_ID', access_key_id)
        cf.set('ACCESS', 'ACCESS_KEY_SECRET', access_key_secret)
        cf.set('ACCESS', 'REGION_ID', default_region_id)

        cf.add_section('OTHER')
        cf.set('OTHER', 'JSON_INDENT', 2)
        cf.set('OTHER', 'DEBUG', False)

        with open(cfg_file, 'w') as configfile:
            cf.write(configfile)

    try:
        cf.read(cfg_file)
    except BaseException:
        print("""Config file (%s) error, please write it like:

        [ACCESS]
        ACCESS_KEY_ID = YOUR_KEY_ID
        ACCESS_KEY_SECRET = YOUR_KEY_SECRET
        REGION_ID = cn-beijing

        [OTHER]
        JSON_INDENT = 2
        DEBUG = False
        """ % cfg_file)
        sys.exit(1)

    ACCESS_KEY_ID = cf.get("ACCESS", "ACCESS_KEY_ID")
    ACCESS_KEY_SECRET = cf.get("ACCESS", "ACCESS_KEY_SECRET")
    if region_id is None:
        REGION_ID = cf.get("ACCESS", "REGION_ID")
    else:
        REGION_ID = region_id

    JSON_INDENT = int(cf.get("OTHER", "JSON_INDENT"))
    ROS_DEBUG = bool(cf.get("OTHER", "DEBUG") == 'True')

    client = AcsClient(
        ACCESS_KEY_ID,
        ACCESS_KEY_SECRET,
        REGION_ID
    )

    if ROS_DEBUG:
        current_conf()
示例#10
0
class SendSms(object):

    def __init__(self, phone: str = None, category: str = None, template_param=None):
        """

        :param phone: 发送的手机号
        :param category: 选择短信模板
        :param template_param: 短信验证码或者短信模板中需要替换的变量用字典传入 类似:{"code":123456}
        """
        access_key_id = current_app.config.get('SMS_ACCESS_KEY_ID', None)
        access_key_secret = current_app.config.get('SMS_ACCESS_KEY_SECRET', None)
        sign_name = current_app.config.get("SMS_SIGN_NAME", None)

        if access_key_id is None:
            raise ValueError("缺失短信key")

        if access_key_secret is None:
            raise ValueError("缺失短信secret")

        if phone is None:
            raise ValueError("手机号错误")

        if template_param is None:
            raise ValueError("短信模板参数无效")

        if category is None:
            raise ValueError("短信模板编码无效")

        if sign_name is None:
            raise ValueError("短信签名错误")

        self.acs_client = AcsClient(access_key_id, access_key_secret)
        self.phone = phone
        self.category = category
        self.template_param = template_param
        self.template_code = self.template_code()
        self.sign_name = sign_name

    def template_code(self):
        """
        选择模板编码
        :param self.category
           authentication: 身份验证
           login_confirmation: 登陆验证
           login_exception: 登陆异常
           user_registration: 用户注册
           change_password:修改密码
           information_change:信息修改
        :return:
        """
        if self.category == "authentication":
            code = current_app.config.get('AUTHENTICATION', None)
            if code is None:
                raise ValueError("配置文件中未找到模板编码AUTHENTICATION")
            return code

        elif self.category == "login_confirmation":
            code = current_app.config.get('LOGIN_CONFIRMATION', None)
            if code is None:
                raise ValueError("配置文件中未找到模板编码LOGIN_CONFIRMATION")
            return code
        elif self.category == "login_exception":
            code = current_app.config.get('LOGIN_EXCEPTION', None)
            if code is None:
                raise ValueError("配置文件中未找到模板编码LOGIN_EXCEPTION")
            return code
        elif self.category == "user_registration":
            code = current_app.config.get('USER_REGISTRATION', None)
            if code is None:
                raise ValueError("配置文件中未找到模板编码USER_REGISTRATION")
            return code
        elif self.category == "change_password":
            code = current_app.config.get('CHANGE_PASSWORD', None)
            if code is None:
                raise ValueError("配置文件中未找到模板编码CHANGE_PASSWORD")
            return code
        elif self.category == "information_change":
            code = current_app.config.get('INFORMATION_CHANGE', None)
            if code is None:
                raise ValueError("配置文件中未找到模板编码INFORMATION_CHANGE")
            return code
        else:
            raise ValueError("短信模板编码无效")

    def send_sms(self):
        """
        发送短信
        :return:
        """

        sms_request = CommonRequest()

        # 固定设置
        sms_request.set_accept_format('json')
        sms_request.set_domain('dysmsapi.aliyuncs.com')
        sms_request.set_method('POST')
        sms_request.set_protocol_type('https')  # https | http
        sms_request.set_version('2017-05-25')
        sms_request.set_action_name('SendSms')

        # 短信发送的号码列表,必填。
        sms_request.add_query_param('PhoneNumbers', self.phone)
        # 短信签名,必填。
        sms_request.add_query_param('SignName', self.sign_name)

        # 申请的短信模板编码,必填
        sms_request.add_query_param('TemplateCode', self.template_code)

        # 短信模板变量参数 类似{"code":"12345"},必填。
        sms_request.add_query_param('TemplateParam', self.template_param)

        # 设置业务请求流水号,必填。暂用UUID1代替
        build_id = uuid.uuid1()
        sms_request.add_query_param('OutId', build_id)

        # 调用短信发送接口,返回json
        sms_response = self.acs_client.do_action_with_exception(sms_request)

        return sms_response
示例#11
0
from aliyunsdkcore.client import AcsClient
from aliyunsdkchatbot.request.v20171011 import ChatRequest
import json

# 创建AcsClient实例
client = AcsClient("LTAIjgiPhdMbT2F9", "n1RHkNGL7KnVPDRjWbKfr5qK7YKS2G",
                   "cn-shanghai")
# 创建request,并设置参数
SessionId = ""
while 1:
    height = input()
    if "exit" == height:
        break
    request = ChatRequest.ChatRequest()
    request.set_SessionId(SessionId)
    request.set_InstanceId("chatbot-cn-mp90vh2if0005g")
    # request.set_Utterance("订餐厅")
    request.set_Utterance(height)
    # 发起API请求并显示返回值
    response = client.do_action_with_exception(request)
    # bytes to str
    bs = str(response, encoding="utf8")
    chat_bot_msg = json.loads(bs)
    SessionId = chat_bot_msg["SessionId"]
    Messages = chat_bot_msg["Messages"]
    print(chat_bot_msg)
    for message in Messages:
        text = message["Text"]
        content = text["Content"]
        print(content)
示例#12
0
# 创建 AcsClient 实例
#
with open('E:\\03.devops\\django\\test\\jsm_aliyun_id.txt','r') as jsm_aliyun_id:
    jsm_aliyun_id_info = jsm_aliyun_id.readline()
    # print(jsm_aliyun_id_info)

jsm_aliyun_id_info_json = json.loads(jsm_aliyun_id_info)
#
# print(type(jsm_aliyun_id_info_json))
ak = jsm_aliyun_id_info_json['ak']
secret = jsm_aliyun_id_info_json['secret']
region_id = jsm_aliyun_id_info_json['region_id']

client = AcsClient(
    ak,
    secret,
    region_id)


# 获取RDS实例的备份数
#
def jsm_get_rds_backup(client, rds_instance_id, rds_instance_name):
    ''
    request = DescribeBinlogFilesRequest.DescribeBinlogFilesRequest()
    request.set_DBInstanceId(rds_instance_id)
    # 获取昨天到今天凌晨的备份时间
    request.set_StartTime(yestoday_format)
    request.set_EndTime(today_format)

    response = client.do_action_with_exception(request)
    print(response)
示例#13
0
from aliyunsdkros.request.v20150901 import \
    DescribeRegionsRequest
from aliyunsdkvpc.request.v20160428 import \
    DescribeVSwitchesRequest
from aliyunsdkecs.request.v20140526 import \
    DescribeZonesRequest, \
    DescribeImagesRequest, \
    DescribeInstanceTypesRequest, \
    DescribeSecurityGroupsRequest, \
    DescribeSecurityGroupAttributeRequest

pp = pprint.PrettyPrinter(indent=2)

access_key = ''
access_key_secret = ''
client = AcsClient(access_key, access_key_secret, 'cn-beijing')

# print Regions
req = DescribeRegionsRequest.DescribeRegionsRequest()
body = client.do_action_with_exception(req)
pp.pprint(json.loads(body.decode("utf-8")))

# VSwitch
req = DescribeVSwitchesRequest.DescribeVSwitchesRequest()
req.set_query_params({'PageSize': 50})
body = client.do_action_with_exception(req)
pp.pprint(json.loads(body.decode("utf-8")))

# zone
req = DescribeZonesRequest.DescribeZonesRequest()
body = client.do_action_with_exception(req)
示例#14
0
 def __init__(self, access_key, access_secret, region="cn-beijing"):
     self.region = region
     self.client = AcsClient(access_key, access_secret, self.region)
     self.zones = None
示例#15
0
    pass

# Note: Do NOT change
PRODUCT_NAME = "Dybaseapi"
DOMAIN = "dybaseapi.ap-southeast-1.aliyuncs.com"
REGION = "ap-southeast-1"

# TODO : Need to replace below field into the message type you want. Delivery Report:SmsReport, Replied Message: Smsup
msgtype = "SmsReport"
# TODO Need to replace below field into the Queune name which you can get from SMS Console.
qname = "Alicom-Queue-xxxxxx-SmsReport"

# Do NOT change
endpoint = "http://1493622401794734.mns.ap-southeast-1.aliyuncs.com"

acs_client = AcsClient(const.ACCESS_KEY_ID, const.ACCESS_KEY_SECRET, REGION)
region_provider.add_endpoint(PRODUCT_NAME, REGION, DOMAIN)


# The expiry time set for Short Message Service
class Token():
    def __init__(self,
                 token=None,
                 tmp_access_id=None,
                 tmp_access_key=None,
                 expire_time=None):
        self.__token = token
        self.__tmp_access_id = tmp_access_id
        self.__tmp_access_key = tmp_access_key
        self.__expire_time = expire_time
class AliYunDNSManager:
    def __init__(self):
        self.client = AcsClient(configs.ALIYUN_ACCESS_KEY_ID,
                                configs.ALIYUN_SECRET)

    @staticmethod
    def _data_valid(data) -> bool:
        if type(data) == str:
            return data is not None and len(data) > 0
        else:
            return data is not None

    def add_or_update_domain_record(self,
                                    domain_name: str,
                                    host_record_keyword: str,
                                    type_keyword: str = 'A',
                                    old_value_keyword: str = None,
                                    value: str = None):
        response_data = self.get_domain_records(domain_name,
                                                host_record_keyword,
                                                type_keyword,
                                                old_value_keyword)
        record_count = response_data['TotalCount']
        if record_count == 0:
            response_data = self._add_domain_record(
                domain_name=domain_name,
                host_record=host_record_keyword,
                record_type=type_keyword,
                value=value)
            print(response_data)
            return
        elif record_count > 1:
            raise RuntimeError('匹配的解析记录大于1条,无法确定需要修改的记录,请提高搜索精度')

        record = response_data['DomainRecords']['Record'][0]
        record_id = record['RecordId']

        response_data = self._update_domain_record(
            record_id=record_id,
            host_record=host_record_keyword,
            record_type=type_keyword,
            value=value)
        print(response_data)

    def delete_domain_record(self,
                             domain_name: str,
                             host_record_keyword: str,
                             type_keyword: str = 'A',
                             value_keyword: str = None):
        response_data = self.get_domain_records(domain_name,
                                                host_record_keyword,
                                                type_keyword, value_keyword)
        record_count = response_data['TotalCount']
        if record_count == 0:
            raise RuntimeError('无法找到需要删除的解析记录')
        elif record_count > 1:
            raise RuntimeError('匹配的解析记录大于1条,无法确定需要修改的记录,请提高搜索精度')

        record = response_data['DomainRecords']['Record'][0]
        record_id = record['RecordId']

        response_data = self._delete_domain_record(record_id)
        print(response_data)

    def _add_domain_record(self, domain_name: str, host_record: str,
                           record_type: str, value: str):
        request = AddDomainRecordRequest()
        request.set_accept_format('json')

        request.set_DomainName(domain_name)
        request.set_RR(host_record)
        request.set_Type(record_type)
        request.set_Value(value)

        response = self.client.do_action_with_exception(request)
        response = response.decode('utf-8')
        return json.loads(response)

    def _update_domain_record(self, record_id: str, host_record: str,
                              record_type: str, value: str):
        request = UpdateDomainRecordRequest()
        request.set_accept_format('json')

        request.set_RecordId(record_id)
        request.set_RR(host_record)
        request.set_Type(record_type)
        request.set_Value(value)

        response = self.client.do_action_with_exception(request)
        response = response.decode('utf-8')
        return json.loads(response)

    def _delete_domain_record(self, record_id: str):
        request = DeleteDomainRecordRequest()
        request.set_accept_format('json')

        request.set_RecordId(record_id)

        response = self.client.do_action_with_exception(request)
        response = response.decode('utf-8')
        return json.loads(response)

    def get_domain_records(self,
                           domain_name: str,
                           host_record_keyword: str = None,
                           type_keyword: str = 'A',
                           value_keyword: str = None) -> dict:
        if not self._data_valid(domain_name):
            raise RuntimeError('缺少域名名称')

        request = DescribeDomainRecordsRequest()
        request.set_accept_format('json')

        request.set_DomainName(domain_name)
        # request.set_PageSize('100')
        if self._data_valid(host_record_keyword):
            request.set_RRKeyWord(host_record_keyword)
        request.set_TypeKeyWord(type_keyword)
        if self._data_valid(value_keyword):
            request.set_ValueKeyWord(value_keyword)

        response = self.client.do_action_with_exception(request)  # type: bytes
        response_data = json.loads(response.decode('utf-8'))
        return response_data
示例#17
0
class AlibabaSDK(object):
    def __init__(self, params):
        # Alibaba connection credentials
        access_key_id = params['Credential'].get('access_key_id')
        access_key_secret = params['Credential'].get('secretaccess_key')
        region = params['VM'].get('region')

        AliyunConfig(access_key_id=access_key_id,
                     access_key_secret=access_key_secret,
                     region=region).update()
        self.clt = AcsClient(access_key_id, access_key_secret, region)

        # VM parameters
        self.vm_params = dict()
        self.vm_params["InstanceType"] = params['Flavor'].get('name')
        self.vm_params["RegionId"] = region
        self.vm_params["InstanceName"] = params['VM'].get('vm_name').replace(
            '_', '-')
        self.vm_params["HostName"] = self.vm_params["InstanceName"]
        self.vm_params["Username"] = params['VM'].get('username')
        self.vm_params["Password"] = params['VM'].get('password')
        self.vm_params["KeyPairName"] = params['VM'].get('keypair')
        self.vm_params["ZoneId"] = params['VM'].get('az')
        self.vm_params["ImageName"] = params['Image'].get('name')
        self.vm_params["ImageId"] = params['Image'].get('id', '*/Image/*')
        self.vm_params["SecurityGroupId"] = params['SecurityGroup'].get('id')
        self.vm_params["VSwitchId"] = params["Network"]["VSwitch"].get('id')
        self.vm_params["DiskName"] = params['Disk'].get('cloud_disk_name')
        self.vm_params["Size"] = params['Disk'].get('cloud_disk_size')
        self.vm_params["NetworkInterfaceName"] = params['NIC'].get('nic_name')

        # Assign SystemDiskCategory and DiskCategory
        self.vm_params["SystemDiskCategory"] = self.select_disk_category(
            'SystemDisk')
        self.vm_params["DiskCategory"] = self.select_disk_category('DataDisk')

        logging.info(
            'Assigned. SystemDiskCategory="{}"; DiskCategory="{}".'.format(
                self.vm_params['SystemDiskCategory'],
                self.vm_params['DiskCategory']))

    def _send_request(self, request):
        request.set_accept_format('json')
        try:
            logging.debug("Run: {0}".format(request.__class__.__name__))
            #            logging.debug(
            #               "Request: %s" % request.get_query_params())
            response_str = self.clt.do_action_with_exception(request)
            response_detail = json.loads(response_str)
            #            logging.debug("Response: %s" % response_detail)
            return response_detail
        except Exception as e:
            logging.error(e)
            return e

    @staticmethod
    def _add_params(request, key_list=None, params=None):
        if params is None:
            return request
        if key_list:
            for key in key_list:
                if params.get(key) is not None:
                    value = params.get(key)
                    if "Ids" in key or "Names" in key:
                        value = str(value.split(',')).replace('\'', '"')
                    eval("request.set_{0}('{1}')".format(key, value))
        request.get_query_params()
        return request

    # Instance
    def describe_instances(self):
        request = DescribeInstancesRequest.DescribeInstancesRequest()
        key_list = ["InstanceName", "InstanceIds"]
        self.vm_params.setdefault("InstanceName",
                                  self.vm_params["InstanceName"])
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def create_instance(self, authentication="publickey"):
        request = CreateInstanceRequest.CreateInstanceRequest()
        key_list = [
            "InstanceChargeType", "ImageId", "InstanceType",
            "InternetChargeType", "SecurityGroupId", "VSwitchId",
            "SystemDiskCategory", "HostName", "InstanceName",
            "InternetMaxBandwidthOut", "InternetMaxBandwidthIn", "ZoneId"
        ]
        self.vm_params.setdefault("InstanceChargeType", "PostPaid")
        self.vm_params.setdefault("InternetChargeType", "PayByTraffic")
        self.vm_params.setdefault("SystemDiskCategory",
                                  self.vm_params['DiskCategory'])
        self.vm_params.setdefault("InternetMaxBandwidthIn", "5")
        self.vm_params.setdefault("InternetMaxBandwidthOut", "5")
        if authentication == "publickey":
            key_list.append("KeyPairName")
        elif authentication == "password":
            key_list.append("Password")
        request = self._add_params(request, key_list, self.vm_params)
        response = self._send_request(request)
        if isinstance(response, Exception):
            raise response
        return response

    def start_instance(self, instance_id):
        request = StartInstanceRequest.StartInstanceRequest()
        key_list = ["InstanceId"]
        self.vm_params["InstanceId"] = instance_id
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def stop_instance(self, instance_id, force=False):
        request = StopInstanceRequest.StopInstanceRequest()
        key_list = ["InstanceId", "ForceStop"]
        self.vm_params["InstanceId"] = instance_id
        if force:
            self.vm_params["ForceStop"] = force
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def reboot_instance(self, instance_id, force=False):
        request = RebootInstanceRequest.RebootInstanceRequest()
        key_list = ["InstanceId", "ForceStop"]
        self.vm_params["InstanceId"] = instance_id
        if force:
            self.vm_params["ForceStop"] = force
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def delete_instance(self, instance_id):
        request = DeleteInstanceRequest.DeleteInstanceRequest()
        key_list = ["InstanceId"]
        self.vm_params["InstanceId"] = instance_id
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def describe_instance_attribute(self, instance_id):
        request = DescribeInstanceAttributeRequest.\
            DescribeInstanceAttributeRequest()
        key_list = ["InstanceId"]
        self.vm_params["InstanceId"] = instance_id
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def modify_instance_attribute(self, instance_id, new_password):
        request = ModifyInstanceAttributeRequest.\
            ModifyInstanceAttributeRequest()
        key_list = ["InstanceId", "Password"]
        self.vm_params["InstanceId"] = instance_id
        self.vm_params["Password"] = new_password
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def modify_instance_spec(self, instance_id, new_type):
        request = ModifyInstanceSpecRequest.ModifyInstanceSpecRequest()
        key_list = [
            "InstanceId", "InstanceType", "InternetMaxBandwidthIn",
            "InternetMaxBandwidthOut"
        ]
        self.vm_params["InstanceId"] = instance_id
        self.vm_params["InstanceType"] = new_type
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    # Resource
    def describe_available_resource(self, destination_resource):
        # destination_resource: ['Zone', 'IoOptimized', 'InstanceType',
        #                        'SystemDisk', 'DataDisk', 'Network', 'ddh']
        request = DescribeAvailableResourceRequest.DescribeAvailableResourceRequest(
        )
        key_list = ["DestinationResource", "ZoneId", "InstanceType"]
        self.vm_params["DestinationResource"] = destination_resource
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def select_disk_category(self, category):
        """Select Available Disk Category by ZoneId and InstanceType."""

        if category not in ('SystemDisk', 'DataDisk'):
            logging.error(
                'Unsupported category! category = {}'.format(category))
            return 'cloud_efficiency'

        _data = self.describe_available_resource(category)

        _azone = _data.get('AvailableZones', {}).get('AvailableZone', [])
        if len(_azone) != 1 or _azone[0].get('Status') != 'Available':
            logging.error('Resource unavailable! _azone = {}'.format(_azone))
            return 'cloud_efficiency'

        _resource = _azone[0].get('AvailableResources',
                                  {}).get('AvailableResource', [])
        if len(_resource) != 1 or _resource[0].get('Type') != category:
            logging.error(
                'Resource unavailable! _resource = {}'.format(_resource))
            return 'cloud_efficiency'

        _disk = _resource[0].get('SupportedResources',
                                 {}).get('SupportedResource', [])
        _disk_categories = [
            x.get('Value') for x in _disk if x.get('Status') == 'Available'
        ]

        if len(_disk_categories) == 0:
            logging.error('Resource unavailable! _disk_categories = []')
            return 'cloud_efficiency'

        if 'cloud_essd' in _disk_categories:
            disk_category = 'cloud_essd'
        elif 'cloud_ssd' in _disk_categories:
            disk_category = 'cloud_ssd'
        elif 'cloud_efficiency' in _disk_categories:
            disk_category = 'cloud_efficiency'
        else:
            disk_category = _disk_categories[0]

        logging.info('Selected {} Category "{}" from {}'.format(
            category, disk_category, _disk_categories))

        return disk_category

    # Public IP
    def allocate_public_ip_address(self, instance_id):
        request = AllocatePublicIpAddressRequest.\
            AllocatePublicIpAddressRequest()
        key_list = ["InstanceId"]
        self.vm_params["InstanceId"] = instance_id
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    # KeyPair
    def describe_keypairs(self):
        request = DescribeKeyPairsRequest.DescribeKeyPairsRequest()
        key_list = ["KeyPairName", "RegionId"]
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def create_keypair(self):
        request = CreateKeyPairRequest.CreateKeyPairRequest()
        key_list = ["KeyPairName", "RegionId"]
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def import_keypair(self):
        request = ImportKeyPairRequest.ImportKeyPairRequest()
        key_list = ["KeyPairName", "RegionId", "PublicKeyBody"]
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def delete_keypair(self):
        request = DeleteKeyPairsRequest.DeleteKeyPairsRequest()
        key_list = ["KeyPairNames", "RegionId"]
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    # Image
    def describe_images(self):
        request = DescribeImagesRequest.DescribeImagesRequest()
        key_list = ["ImageName", "ImageId"]
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def create_image(self):
        request = CreateImageRequest.CreateImageRequest()
        key_list = ["ImageName", "SnaoshotId", "Platform"]
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    # Disk
    def describe_disks(self, diskids=None):
        """Describe cloud disks.

        diskids should be a string like '"id1","id2","id3"'.
        """
        request = DescribeDisksRequest.DescribeDisksRequest()
        key_list = ["ZoneId", "DiskName", "Category", "PageSize"]
        self.vm_params.setdefault("Category", self.vm_params['DiskCategory'])
        self.vm_params.setdefault("PageSize", "100")
        if diskids:
            key_list.append("DiskIds")
            self.vm_params["DiskIds"] = diskids
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def create_disk(self):
        request = CreateDiskRequest.CreateDiskRequest()
        key_list = ["ZoneId", "DiskName", "DiskCategory", "Size"]
        self.vm_params.setdefault("DiskCategory",
                                  self.vm_params['DiskCategory'])
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def delete_disk(self, diskid):
        request = DeleteDiskRequest.DeleteDiskRequest()
        key_list = ["DiskId"]
        self.vm_params["DiskId"] = diskid
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def attach_disk(self, instance_id, diskid=None):
        request = AttachDiskRequest.AttachDiskRequest()
        key_list = ["InstanceId", "DiskId"]
        self.vm_params["InstanceId"] = instance_id
        self.vm_params["DiskId"] = diskid
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def detach_disk(self, instance_id, diskid=None):
        request = DetachDiskRequest.DetachDiskRequest()
        key_list = ["InstanceId", "DiskId"]
        self.vm_params["InstanceId"] = instance_id
        self.vm_params["DiskId"] = diskid
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def create_nic(self, primary_ip_address=None):
        request = CreateNetworkInterfaceRequest.CreateNetworkInterfaceRequest()
        key_list = [
            "NetworkInterfaceName", "PrimaryIpAddress", "VSwitchId",
            "SecurityGroupId"
        ]
        self.vm_params["PrimaryIpAddress"] = primary_ip_address
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def attach_nic(self, instance_id, nic_id):
        request = AttachNetworkInterfaceRequest.AttachNetworkInterfaceRequest()
        key_list = ["InstanceId", "NetworkInterfaceId"]
        self.vm_params["InstanceId"] = instance_id
        self.vm_params["NetworkInterfaceId"] = nic_id
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def describe_nics(self,
                      instance_id=None,
                      nic_type=None,
                      nic_name="default",
                      nic_ids=None):
        request = DescribeNetworkInterfacesRequest.\
            DescribeNetworkInterfacesRequest()
        key_list = ["InstanceId", "Type"]
        self.vm_params["InstanceId"] = instance_id
        self.vm_params["Type"] = nic_type
        if nic_name:
            if not nic_name == "default":
                self.vm_params["NetworkInterfaceName"] = nic_name
            key_list.append("NetworkInterfaceName")
        if nic_ids:
            if not isinstance(nic_ids, str):
                nic_ids = ','.join(nic_ids)
            key_list.append("NetworkInterfaceIds")
            self.vm_params["NetworkInterfaceIds"] = nic_ids
        key_list.append("PageSize")
        self.vm_params["PageSize"] = 500
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def detach_nic(self, instance_id, nic_id):
        request = DetachNetworkInterfaceRequest.DetachNetworkInterfaceRequest()
        key_list = ["InstanceId", "NetworkInterfaceId"]
        self.vm_params["InstanceId"] = instance_id
        self.vm_params["NetworkInterfaceId"] = nic_id
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def delete_nic(self, nic_id):
        request = DeleteNetworkInterfaceRequest.DeleteNetworkInterfaceRequest()
        key_list = ["NetworkInterfaceId"]
        self.vm_params["NetworkInterfaceId"] = nic_id
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)

    def get_console_log(self, instance_id):
        request = GetInstanceConsoleOutputRequest.GetInstanceConsoleOutputRequest(
        )
        key_list = ['InstanceId']
        self.vm_params["InstanceId"] = instance_id
        request = self._add_params(request, key_list, self.vm_params)
        return self._send_request(request)
示例#18
0
class Aliyun(object):
    """
    :param access_key: access_key.
    :param access_secret: access_secret.
    :param region: region.
    """

    def __init__(self, access_key, access_secret, region="cn-beijing"):
        self.region = region
        self.client = AcsClient(access_key, access_secret, self.region)
        self.zones = None

    def request_page_query(self, req):
        page_size = 50
        index = 1
        req.set_query_params({'PageSize': page_size})
        req.set_query_params({'PageNumber', index})
        body = self.client.do_action_with_exception(req)
        res = json.loads(body.decode("utf-8"))
        total_count = res['TotalCount']
        if total_count <= page_size:
            yield res
        else:
            current_count = total_count
            while current_count < total_count:
                index += 1
                req.set_query_params({'PageNumber', index})
                body = self.client.do_action_with_exception(req)
                current_count += page_size
                yield json.loads(body.decode("utf-8"))

    def get_zone(self, zone_id):
        if not self.zones:
            self.zones = self.__request_zones()

        for zone in self.zones:
            if zone['ZoneId'] == zone_id:
                return zone

        raise ValueError("Invalid ZoneId.")

    def __request_zones(self):
        req = DescribeZonesRequest.DescribeZonesRequest()
        result = self.__do_request(req)["Zones"]["Zone"]
        return result

    def __do_request(self, req):
        body = self.client.do_action_with_exception(req)
        return json.loads(body.decode("utf-8"))

    def create_instance(self, instance):
        """
        :param Instance instance: class Instance
        :param callback: callback function run after instance creation successfully.
        """
        c = instance.config
        zone = self.get_zone(c.ZoneId)
        check_resource_types(zone)
        check_instance_type(zone, instance.is_io_optimized, c.InstanceType)

        req = self.prepare_instance_create_request(zone, instance)
        res = self.__do_request(req)

        return res

    def prepare_instance_create_request(self, zone, instance):
        c = instance.config
        request = CreateInstanceRequest.CreateInstanceRequest()
        request.set_accept_format('json')

        request.add_query_param('RegionId', self.region)
        for k, v in c.items():
            request.add_query_param(k, v)

        check_system_disk_categories(zone, instance.is_io_optimized, instance.system_disk.category)
        request.add_query_param('SystemDisk.Category', instance.system_disk.category)
        request.add_query_param('SystemDisk.Size', instance.system_disk.size)

        index = 1
        for disk in instance.data_disks:
            check_data_disk_categories(zone, instance.is_io_optimized, disk.category)
            request.add_query_param('DataDisk.%d.Category' % index, disk.category)
            request.add_query_param('DataDisk.%d.Size' % index, disk.size)
            index += 1

        index = 1
        for tag in instance.tags:
            request.add_query_param('Tag.%d.Key' % index, tag.key)
            request.add_query_param('Tag.%d.Value' % index, tag.value)
            index += 1

        return request
示例#19
0
class Subtitle:
    '''
    Example:
        >>> s = Subtitle('cache')
        >>> s.from_audio('target.mp3')
        >>> s.to_srt('target.srt)
    '''
    def __init__(self, dirname=config.cache_dir):
        self._dirname = pathlib.Path(dirname)
        self._dirname.mkdir(exist_ok=True)
        self._data = None
        self._client = None

    @property
    def data(self):
        return self._data

    @property
    def from_(self):
        return {
            'audio': self.from_audio,
            'json': self.from_json,
            'srt': self.from_srt,
        }

    @property
    def to(self):
        return {
            'json': self.to_json,
            'srt': self.to_srt,
        }

    def from_audio(self, filename, delay=10, **kwargs):
        # https://help.aliyun.com/document_detail/90727.html
        path = self._dirname / filename
        with OSS(str(path)) as oss:
            task_id = self._trans(oss.url, **kwargs)
            response = self._polling(task_id, delay=delay)
            self._data = response['Result']['Sentences']

    def from_json(self, filename):
        self._data = json.loads((self._dirname / filename).read_text())

    def from_srt(self, filename, channel_id=0):
        def f(pattern):
            (h, m, s), (ms, ) = (map(int, p.split(':'))
                                 for p in pattern.split(','))
            return 1000 * (60 * (60 * h + m) + s) + ms

        def g(part):
            _, times, text = part.splitlines()
            begin, end = map(f, times.split(' --> '))
            return dict(BeginTime=begin,
                        EndTime=end,
                        Text=text,
                        ChannelId=channel_id)

        self._data = list(
            g(p) for p in (self._dirname / filename).read_text().split('\n\n')
            if p)

    def to_json(self, filename):
        (self._dirname / filename).write_text(
            json.dumps(self._data, ensure_ascii=False))

    def to_srt(self, filename, channel_id=0):
        path = self._dirname / filename
        data = filter(lambda x: x['ChannelId'] == channel_id, self._data)
        pattern = '{h:02}:{m:02}:{s:02},{ms:03}'
        with open(str(path), 'w') as f:
            for ith, item in enumerate(
                    sorted(data, key=lambda x: x['BeginTime'])):
                start, end = (self._time(item[k], pattern)
                              for k in ('BeginTime', 'EndTime'))
                f.write(f'{ith}\n{start} --> {end}\n{item["Text"]}\n\n')

    def _trans(self, url, **kwargs):
        # 创建 AcsClient 实例
        self._client = AcsClient(
            config.access_key['id'],
            config.access_key['secret'],
            'cn-shanghai',
        )
        # 提交录音文件识别请求
        request = self._request(get_or_post=False)
        task = dict(
            appkey=config.clound['app_key'],
            file_link=url,
            version='4.0',
            enable_words=True,
            enable_sample_rate_adaptive=True,
        )
        task.update(kwargs)
        request.add_body_params('Task', json.dumps(task))
        try:
            response = json.loads(
                self._client.do_action_with_exception(request))
            if response['StatusText'] == 'SUCCESS':
                return response['TaskId']
        except (ServerException, ClientException):
            pass

    def _polling(self, task_id, delay=10):
        # 创建 CommonRequest,设置任务 ID
        request = self._request(get_or_post=True)
        request.add_query_param('TaskId', task_id)
        # 提交录音文件识别结果查询请求
        while True:
            try:
                response = json.loads(
                    self._client.do_action_with_exception(request))
                if response['StatusText'] not in ('RUNNING', 'QUEUEING'):
                    return response
                time.sleep(delay)
            except (ServerException, ClientException):
                pass

    def _request(self, get_or_post=True):
        # 'get' if get_or_post else 'post'
        request = CommonRequest()
        request.set_domain('filetrans.cn-shanghai.aliyuncs.com')
        request.set_version('2018-08-17')
        request.set_product('nls-filetrans')
        request.set_action_name(
            'GetTaskResult' if get_or_post else 'SubmitTask')
        request.set_method('GET' if get_or_post else 'POST')
        return request

    def _time(self, microsecond, pattern='{h:02}:{m:02}:{s:02},{ms:03}'):
        def f(microsecond):
            for c in (1000, 60, 60, 60):
                yield microsecond % c
                microsecond //= c

        ms, s, m, h = f(microsecond)
        return pattern.format(ms=ms, s=s, m=m, h=h)
示例#20
0
    else:
        # 正常不应该有多条相同的记录,如果存在这种情况,应该手动去网站检查核实是否有操作失误
        logger.debug("存在多个相同子域名解析记录值,请核查删除后再操作!")


if __name__ == "__main__":
    # 获取阿里云keyid和secret
    keyid = config.get("access", "keyid")
    secret = config.get("access", "secret")
    regionId = config.get("access", "regionId")

    DomainName = config.get("domain", "domain_name")
    SubDomainList = config.get_all("subdomain")

    # 配置认证信息
    client = AcsClient(keyid, secret, regionId)

    dynamicIP = getIp()

    for subdomain in SubDomainList:
        setDomainRecord(client, dynamicIP, subdomain, DomainName)

    # 删除记录测试
    # delDomainRecord(client,'b.jsoner.com')

    # 新增或更新记录测试
    # setDomainRecord(client,'192.168.3.222','a',DomainName)

    # 获取记录测试
    # logger.debug (getDomainInfo(DomainName, 'y'))
示例#21
0
文件: sms.py 项目: 007gzs/apiutils
def get_client():
    global client
    if client is None:
        from django.conf import settings
        client = AcsClient(settings.SMS_ACCESS_KEY_ID, settings.SMS_ACCESS_KEY_SECRET, 'cn-hangzhou')
    return client
示例#22
0
logger.setLevel(logging.INFO)
handler1.setLevel(logging.INFO)
handler2.setLevel(logging.INFO)

formatter = logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s")
handler1.setFormatter(formatter)
handler2.setFormatter(formatter)

logger.addHandler(handler1)
logger.addHandler(handler2)

f = open(os.path.join(path, 'alyDDNS.json'))
config = json.load(f)
f.close()
client = AcsClient(config['access_key'], config['access_secret'],
                   'cn-hangzhou')

ip = get_wan_ip()
if not ip:
    logger.info('can not get ip, abort')
logger.info('local wan ip: ' + ip)

for sub in config['sub']:
    domain_name = sub + '.' + config['domain']
    logger.info('run update for domain: ' + domain_name)
    records = list_domain_records(client, domain_name)
    exist = False
    rid = None
    for record in records:
        if record['Type'] == 'A':
            exist = True
class ALiApi:
    accessKeyId = ""
    accessSecret = ""
    productKey = ""
    client = AcsClient(accessKeyId, accessSecret, 'cn-shanghai')

    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, 'instance'):
            cls.instance = super().__new__(cls)
            if os.path.exists("config/productkey.config"):
                with open("config/productkey.config", "r") as f:
                    ALiApi.productKey = f.readline()
                    ALiApi().get_infor_data()
            else:
                QMessageBox.critical(QWidget(), "错误", "请设置有效产品验证码!")
                exit(1)
        return cls.instance

    @staticmethod
    def get_current_th(devicename):
        request = QueryDevicePropertyStatusRequest()
        request.set_accept_format('json')
        request.set_ProductKey(ALiApi.productKey)
        request.set_DeviceName(devicename)
        response = ALiApi.client.do_action_with_exception(request)
        data = json.loads(str(response, encoding='utf-8'))
        return data["Data"]["List"]["PropertyStatusInfo"][0]["Value"], data[
            "Data"]["List"]["PropertyStatusInfo"][1]["Value"]

    @staticmethod
    def get_history_data():
        pass

    @staticmethod
    def get_infor_version(devicename):
        request = QueryDeviceDesiredPropertyRequest()
        request.set_accept_format('json')
        request.set_ProductKey(ALiApi.productKey)
        request.set_DeviceName(devicename)
        request.set_Identifiers(["infor"])
        response = ALiApi.client.do_action_with_exception(request)
        data = json.loads(str(response, encoding='utf-8'))
        return int(data["Data"]["List"]["DesiredPropertyInfo"][0]["Version"])

    @staticmethod
    def get_infor_data():
        request = QueryProductRequest()
        request.set_accept_format('json')
        request.set_ProductKey(ALiApi.productKey)
        response = ALiApi.client.do_action_with_exception(request)
        data = json.loads(str(response, encoding='utf-8'))
        if not data["Success"]:
            QMessageBox.critical(QWidget(), "错误", "产品验证码有误!")
            exit(1)
            return False
        else:
            data_list = str(data["Data"]["Description"]).split("\n")
            return data_list[0], data_list[1], data_list[2]

    @staticmethod
    def get_propertyinfo(devicename, property_name, start_time, end_time):
        request = QueryDevicePropertyDataRequest()
        request.set_accept_format('json')
        request.set_StartTime(ALiApi.to_datatime(start_time))
        request.set_EndTime(ALiApi.to_datatime(end_time))
        request.set_Asc("0")
        request.set_PageSize(50)
        request.set_Identifier(property_name)
        request.set_ProductKey(ALiApi.productKey)
        request.set_DeviceName(devicename)
        response = ALiApi.client.do_action_with_exception(request)
        data = json.loads(str(response, encoding='utf-8'))
        return data

    @staticmethod
    def set_infor_data(username, passwd, email):
        request = UpdateProductRequest()
        request.set_accept_format('json')
        request.set_ProductName("温湿度监测")
        request.set_ProductKey(ALiApi.productKey)
        data = username + "\n" + passwd + "\n" + email + "\n"
        request.set_Description(data)
        response = ALiApi.client.do_action_with_exception(request)
        data = json.loads(str(response, encoding='utf-8'))
        if not data["Success"]:
            return False
        else:
            return True

    @staticmethod
    def register_device(device_name):
        request = RegisterDeviceRequest()
        request.set_accept_format('json')
        request.set_ProductKey(ALiApi.productKey)
        request.set_DeviceName(device_name)
        response = ALiApi.client.do_action_with_exception(request)
        data = json.loads(str(response, encoding='utf-8'))
        if not data["Success"]:
            return False, data["ErrorMessage"]
        else:
            return True, "注册成功"

    @staticmethod
    def to_datatime(string):
        time_array = time.strptime(string, "%Y/%m/%d %H:%M:%S")
        time_stamp = int(time.mktime(time_array))
        return int(str(time_stamp) + "000")
示例#24
0
from conf import alert_conf
from src.lib import db_mysql

try:
    import simplejson as json
except ImportError:
    import json

file_path = os.path.join(os.path.dirname(__file__), "../../../conf/key.conf")
cf = configparser.ConfigParser()
cf.read(file_path)
ak_section = "aliyun_master"
accessid = cf.get(ak_section, 'AccessKeyId')
accesssecret = cf.get(ak_section, 'AccessKeySecret')
regionid = cf.get(ak_section, 'DefaultRegionId')
client = AcsClient(accessid, accesssecret, regionid)
page_size = 100     # 单个页面的最大告警条数


def get_LoadBalancerName(loadbalancerid):    # 通过slb api获取loadbalancername
    request = DescribeLoadBalancerAttributeRequest()
    request.set_accept_format('json')
    request.set_LoadBalancerId(loadbalancerid)
    loadbalancername = ''
    try:
        response = client.do_action_with_exception(request)
    except aliyunsdkcore.acs_exception.exceptions.ServerException:
        print("aliyunsdkcore.acs_exception.exceptions.ServerException")
    except:
        print("except")
    else:
示例#25
0
import socket, fcntl, struct, sys
rc_rr = "i"  # 指代二级域名(子域名,空则使用 @ 代替)
rc_domain = "aharobo.com"  # 指代完整域名,若未配置阿里云 NameServer 解析修改也无效
rc_format = "json"  # 指定返回数据格式,目前本例使用 JSON 数据
rc_type = "A"  # 指定修改记录类型,目前本例使用 A 记录
rc_ttl = "600"  # 指定修改 TTL 值,目前本例使用 600 秒
rc_format = "json"  # 使用 JSON 返回数据,也可以填写为 XML

access_key_id = ""  # 这里为 Aliyun AccessKey 信息
access_key_secret = ""  # 这里为 Aliyun AccessKey 信息

ID = "LTAI4Fuk8cLyiBCyevEYW29V"
Secret = "ydd39f2iV0HtlvnS101JwfgXxSYDsv"
Zone = 'cn-zhangjiakou'

clt = AcsClient(ID, Secret, Zone)


def check_record_id(dns_rr, dns_domain):
    times = 0  # 用于检查对应子域名的记录信息
    check = 0  # 用于确认对应子域名的记录信息
    request = CommonRequest()
    request.set_accept_format('json')  # 设置返回格式
    request.set_domain('alidns.aliyuncs.com')  # 阿里云服务
    request.set_method('POST')
    request.set_protocol_type('https')
    request.set_version('2015-01-09')
    request.set_action_name('DescribeDomainRecords')
    request.add_query_param('DomainName', rc_domain)  # 设置请求域名
    request.add_query_param('RRKeyWord', rc_rr)
    request.add_query_param('TypeKeyWord', rc_type)
#!/usr/bin/env python
# coding=utf-8

import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkemr.request.v20160408.CreateClusterV2Request import CreateClusterV2Request

client = AcsClient(os.environ['ACCESS_KEY_ID'],
                   os.environ['ACCESS_KEY_SECRET'],
                   'eu-central-1',
                   timeout=40,
                   max_retry_time=5)

request = CreateClusterV2Request()
request.set_accept_format('json')

request.set_EasEnable(False)
request.set_IsOpenPublicIp(False)
request.set_SshEnable(True)
request.set_InstanceGeneration("ecs-3")
request.set_KeyPairName("alibaba-de")
request.set_Period(1)
request.set_MachineType("ECS")
request.set_MasterPwd("Lenin1922$")
request.set_DepositType("HALF_MANAGED")
request.set_ZoneId("eu-central-1a")
request.set_SecurityGroupName("emr-security-group")
request.set_ChargeType("PostPaid")
request.set_NetType("vpc")
request.set_VSwitchId("vsw-gw8ue96459069ui8pl8pc")
request.set_VpcId("vpc-gw8b865ld4labpkquw3di")
示例#27
0
#!/usr/bin/env python3
# coding=utf-8
# [email protected]
# 需要先安装阿里云的接口
# pip3 install aliyun-python-sdk-core-v3

import sys
import json
import argparse
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest

# 需要先获取 aliyun 账号的 AccessKey 信息
client = AcsClient('AccessKeyID', 'AccessKeySecret', 'default')
domain_name = 'xxx.com'


def help_doc():
    aaa = '''
                  !!!something wrong, plz check it!!!
    usage: alidns.py [-h] [--add | --delete | --update | --get]
                          RR TYPE ADDRESS [RR TYPE ADDRESS ...]

    针对 xxx.com 域名记录进行相关操作

    positional arguments:
        RR TYPE ADDRESS  记录 类型 地址

    optional arguments:
        -h, --help       show this help message and exit
        -a, --add            add domain record. (e.g. --add RR TYPE ADDRESS)
示例#28
0
def fileTrans(akId, akSecret, appKey, fileLink):
    # 地域ID,常量内容,请勿改变
    REGION_ID = "cn-shanghai"
    PRODUCT = "nls-filetrans"
    DOMAIN = "filetrans.cn-shanghai.aliyuncs.com"
    API_VERSION = "2018-08-17"
    POST_REQUEST_ACTION = "SubmitTask"
    GET_REQUEST_ACTION = "GetTaskResult"
    # 请求参数key
    KEY_APP_KEY = "appkey"
    KEY_FILE_LINK = "file_link"
    KEY_VERSION = "version"
    KEY_ENABLE_WORDS = "enable_words"
    # 是否开启智能分轨
    KEY_AUTO_SPLIT = "auto_split"
    # 响应参数key
    KEY_TASK = "Task"
    KEY_TASK_ID = "TaskId"
    KEY_STATUS_TEXT = "StatusText"
    KEY_RESULT = "Result"
    # 状态值
    STATUS_SUCCESS = "SUCCESS"
    STATUS_RUNNING = "RUNNING"
    STATUS_QUEUEING = "QUEUEING"
    # 创建AcsClient实例
    client = AcsClient(akId, akSecret, REGION_ID)
    # 提交录音文件识别请求
    postRequest = CommonRequest()
    postRequest.set_domain(DOMAIN)
    postRequest.set_version(API_VERSION)
    postRequest.set_product(PRODUCT)
    postRequest.set_action_name(POST_REQUEST_ACTION)
    postRequest.set_method('POST')
    # 新接入请使用4.0版本,已接入(默认2.0)如需维持现状,请注释掉该参数设置
    # 设置是否输出词信息,默认为false,开启时需要设置version为4.0
    task = {
        KEY_APP_KEY: appKey,
        KEY_FILE_LINK: fileLink,
        KEY_VERSION: "4.0",
        KEY_ENABLE_WORDS: False
    }
    # 开启智能分轨,如果开启智能分轨 task中设置KEY_AUTO_SPLIT : True
    # task = {KEY_APP_KEY : appKey, KEY_FILE_LINK : fileLink, KEY_VERSION : "4.0", KEY_ENABLE_WORDS : False, KEY_AUTO_SPLIT : True}
    task = json.dumps(task)
    print(task)
    postRequest.add_body_params(KEY_TASK, task)
    taskId = ""
    try:
        postResponse = client.do_action_with_exception(postRequest)
        postResponse = json.loads(postResponse)
        print(postResponse)
        statusText = postResponse[KEY_STATUS_TEXT]
        if statusText == STATUS_SUCCESS:
            print("录音文件识别请求成功响应!")
            taskId = postResponse[KEY_TASK_ID]
        else:
            print("录音文件识别请求失败!")
            return
    except ServerException as e:
        print(e)
    except ClientException as e:
        print(e)
    # 创建CommonRequest,设置任务ID
    getRequest = CommonRequest()
    getRequest.set_domain(DOMAIN)
    getRequest.set_version(API_VERSION)
    getRequest.set_product(PRODUCT)
    getRequest.set_action_name(GET_REQUEST_ACTION)
    getRequest.set_method('GET')
    getRequest.add_query_param(KEY_TASK_ID, taskId)
    # 提交录音文件识别结果查询请求
    # 以轮询的方式进行识别结果的查询,直到服务端返回的状态描述符为"SUCCESS"、"SUCCESS_WITH_NO_VALID_FRAGMENT",
    # 或者为错误描述,则结束轮询。
    statusText = ""
    while True:
        try:
            getResponse = client.do_action_with_exception(getRequest)
            getResponse = json.loads(getResponse)
            print(getResponse)
            statusText = getResponse[KEY_STATUS_TEXT]
            if statusText == STATUS_RUNNING or statusText == STATUS_QUEUEING:
                # 继续轮询
                time.sleep(10)
            else:
                # 退出轮询
                break
        except ServerException as e:
            print(e)
        except ClientException as e:
            print(e)
    if statusText == STATUS_SUCCESS:
        print("录音文件识别成功!")
        print(getResponse['Result'])
    else:
        print("录音文件识别失败!")
    return
示例#29
0
#!/usr/bin/env python
#coding=utf-8

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkiot.request.v20180120.CreateRuleActionRequest import CreateRuleActionRequest

client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-shanghai')

request = CreateRuleActionRequest()
request.set_accept_format('json')

request.set_Type("REPUBLISH")
request.set_Configuration({
                               "topic":"/a19wpcZaBOO/FaUcrp722sDCzr2tSeXe/user/update",
                               "topicType":1
                           })
request.set_RuleId("330322")
request.set_ErrorActionFlag(False)

response = client.do_action_with_exception(request)
# python2:  print(response) 
print(response)
示例#30
0
 def clt(self):
     clt = AcsClient(self.accesskey,self.accesssecret,self.regionid)
     return clt
示例#31
0
#!/usr/bin/env python
#coding=utf-8

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest

client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-hangzhou')

request = CommonRequest()
request.set_accept_format('json')
request.set_domain('dysmsapi.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https')  # https | http
request.set_version('2017-05-25')
request.set_action_name('SendSms')

request.add_query_param('RegionId', "cn-hangzhou")
request.add_query_param('PhoneNumbers', "17645109827")
request.add_query_param('SignName', "红茶不加冰")
request.add_query_param('TemplateCode', "SMS_185840990")
request.add_query_param('TemplateParam', "{\"code\":\"4564\"}")

response = client.do_action(request)
# python2:  print(response)
print(str(response, encoding='utf-8'))
示例#32
0
文件: run.py 项目: lincanyitse/DDNS
class DDNS:
    '''针对指定域名的主机记录为A的动态域名解析'''
    my_ip = None

    def __init__(self, access_key_id, access_key_secret, domain, rr="@"):
        '''针对指定域名的DDNS初始化'''
        self.domain = domain
        self.rr = rr
        self.type = type
        # AcsClient连接
        self.__client = AcsClient(access_key_id, access_key_secret,
                                  'cn-hangzhou')
        # 使用CommonRequest进行调用
        self.__request = CommonRequest()
        # CommonRequest请求公共参数
        self.__public_request()
        # 初次请求
        response = self.__Initial_request(domain, rr)
        #保存返回解析记录
        self.save_record(response)

    def __public_request(self):
        # 设置CommonRequest返回格式
        self.__request.set_accept_format('json')
        # 设置CommonRequest服务地址
        self.__request.set_domain('alidns.aliyuncs.com')
        # 设置CommonRequest提交方式
        self.__request.set_method('POST')
        # 设置CommonRequest通讯协议
        self.__request.set_protocol_type('https')  # https | http
        # 设置CommonRequest版本信息
        self.__request.set_version('2015-01-09')

    def __Initial_request(self, domain_name, rr_word, type_word='A'):
        # 请求操作接口名:DescribeDomainRecords
        self.__request.set_action_name('DescribeDomainRecords')
        # 请求指定域名
        self.__request.add_query_param('DomainName', domain_name)
        # 请求指定主机记录
        self.__request.add_query_param('RRKeyWord', rr_word)
        # 请求指定解析类型
        self.__request.add_query_param('TypeKeyWord', type_word)
        # 发送请求,并获取返回参数或错误
        response = self.__client.do_action_with_exception(self.__request)
        return response

    def save_record(self, response):
        '''保存需要的解析记录'''
        if sys.version_info > (3, 0):
            response = response.decode('utf-8')
        # json转换
        response = json.JSONDecoder().decode(response)
        if 'DomainRecords' in response:
            # 获取解析记录
            response = response['DomainRecords']
            if 'Record' in response:
                response = response['Record']
                if len(response) == 0:
                    print(
                        cprint('No ', '31') +
                        cprint(self.rr + "." + self.domain, '36') +
                        cprint(" parsing record!", '31'))
                    self.__status = False
                    return
                elif len(response) == 1:
                    response = response[0]

        # 获取解析记录IP
        self.__parser_ip = response['Value']
        # 获取解析记录RecordId
        self.__record_id = response['RecordId']
        # 获取解析记录RR
        self.__rr = response['RR']
        # 获取解析记录Type
        self.__type = response['Type']
        # 获取解析记录ttl
        self.__ttl = response['TTL']
        # DDNS状态
        self.__status = True

    @staticmethod
    def native_ip(url="http://txt.go.sohu.com/ip/soip"):
        '''获取本机当前公网ip'''
        # 判断当前python版本
        if sys.version_info < (3, 0):
            # python2.*导入的模块
            import urllib2
            url = urllib2.urlopen(url)
            text = url.read()
            ip = re.findall(r'\d+.\d+.\d+.\d+', text)
            DDNS.my_ip = "{0}".join(ip)
            return "{0}".join(ip)
        else:
            # python3.*导入的模块
            import urllib
            url = urllib.request.urlopen(url)
            text = url.read().decode('utf-8')
            ip = re.findall(r'\d+.\d+.\d+.\d+', text)
            DDNS.my_ip = "{0}".join(ip)
            return "{0}".join(ip)

    def parser_ip(self):
        '''获取解析记录IP'''
        # 判断DDNS初始化是否成功
        if not self.__status:
            return
        # 请求操作接口名:DescribeDomainRecordInfo
        self.__request.set_action_name('DescribeDomainRecordInfo')
        # 请求指定解析记录的ID
        self.__request.add_query_param('RecordId', self.__record_id)
        # 发送请求,并获取返回参数或错误
        response = self.__client.do_action_with_exception(self.__request)
        # 保存新的解析记录
        self.save_record(response)
        return self.__parser_ip

    def update_ip(self, dns_value, dns_ttl='600'):
        '''更新解析ip'''
        # 判断DDNS初始化是否成功
        if not self.__status:
            return
        # 请求操作接口名:UpdateDomainRecord
        self.__request.set_action_name('UpdateDomainRecord')
        # 请求解析记录的ID:RecordId
        self.__request.add_query_param('RecordId', self.__record_id)
        # 请求设置解析记录的主机记录:RR
        self.__request.add_query_param('RR', self.__rr)
        # 请求设置解析记录类型:Type
        self.__request.add_query_param('Type', self.__type)
        # 请求设置解析记录的记录值:IP
        self.__request.add_query_param('Value', dns_value)
        # 请求设置生存时间:TTL
        self.__request.add_query_param('TTL', dns_ttl)
        # 发送请求,并获取返回参数或错误
        response = self.__client.do_action_with_exception(self.__request)
        return response
示例#33
0
# @Time    : 2020/9/17 11:09
# @Software: PyCharm

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkbssopenapi.request.v20171214.QueryInstanceBillRequest import QueryInstanceBillRequest
from cmdb import models as cmdbmodels
from midplatform import settings
from common import baseconfig
import json

accesskeyId = baseconfig.getconfig()['accessKey']
accessSecret = baseconfig.getconfig()['accessSecret']

client = AcsClient(accesskeyId, accessSecret, 'cn-hangzhou')
request = QueryInstanceBillRequest()
request.set_accept_format('json')


def syncMonthBill(month, pagesize):

    if pagesize not in range(20, 301):
        settings.RESULT['code'] = 2009
        settings.RESULT['msg'] = 'fail'
        settings.RESULT['data'] = 'pagesize 请选择[20,300]之间'
        return settings.RESULT

    request.set_BillingCycle(month)
    request.set_PageSize(1)
 def __init__(self):
     self.client = AcsClient(configs.ALIYUN_ACCESS_KEY_ID,
                             configs.ALIYUN_SECRET)
示例#35
0
class RsaKeyPairSigner(Signer):
    _MIN_SESSION_PERIOD = 900
    _MAX_SESSION_PERIOD = 3600
    _RETRY_DELAY_FAST = 3
    _PRIORITY = 1

    def __init__(self, rsa_key_pair_credential, region_id, debug=False):
        if not debug and rsa_key_pair_credential.session_period < self._MIN_SESSION_PERIOD \
                or rsa_key_pair_credential.session_period > self._MAX_SESSION_PERIOD:
            raise exceptions.ClientException(
                error_code.SDK_INVALID_SESSION_EXPIRATION,
                error_msg.get_msg('SDK_INVALID_SESSION_EXPIRATION').format(self._MIN_SESSION_PERIOD,
                                                                           self._MAX_SESSION_PERIOD))
        rsa_key_pair_credential.region_id = region_id
        self._public_key_id = rsa_key_pair_credential.public_key_id
        self._private_key = rsa_key_pair_credential.private_key
        self._session_period = rsa_key_pair_credential.session_period
        self._schedule_interval = rsa_key_pair_credential.session_period if debug \
            else max(rsa_key_pair_credential.session_period * 0.8, 5)
        from aliyunsdkcore.client import AcsClient
        self._sts_client = AcsClient(self._public_key_id, self._private_key, rsa_key_pair_credential.region_id)
        self._session_credential = None
        self._get_session_ak_and_sk()
        self._scheduler = sched.scheduler(time.time, time.sleep)
        self._daemon_thread = threading.Thread(target=self._refresh_session_ak_and_sk, args=[True, 0])
        self._daemon_thread.setDaemon(True)
        self._daemon_thread.start()

    def sign(self, region_id, request):
        session_ak, session_sk = self._session_credential
        header = request.get_signed_header(region_id, session_ak, session_sk)
        url = request.get_url(region_id, session_ak, session_sk)
        return header, url

    def _get_session_ak_and_sk(self):

        request = GetSessionAkRequest()
        request.set_method("GET")
        request.set_duration_seconds(self._session_period)

        try:
            response_str = self._sts_client.do_action_with_exception(request)
            response = json.loads(response_str)
            session_ak = str(response.get("SessionAccessKey").get("SessionAccessKeyId"))
            session_sk = str(response.get("SessionAccessKey").get("SessionAccessKeySecret"))

            self._session_credential = session_ak, session_sk
        except exceptions.ServerException as srv_ex:
            if srv_ex.error_code == 'InvalidAccessKeyId.NotFound' or srv_ex.error_code == 'SignatureDoesNotMatch':
                raise exceptions.ClientException(error_code.SDK_INVALID_CREDENTIAL,
                                                 error_msg.get_msg('SDK_INVALID_CREDENTIAL'))
            else:
                raise

    # no-limit-retry if failed with any conditions.
    # fast retry in first 3 times, then the interval becomes incremental.
    # the max interval is 10 minutes.
    def _refresh_session_ak_and_sk(self, is_init, retry_times=0):
        delay = self._schedule_interval
        next_retry_time = 0
        try:
            if not is_init:
                self._get_session_ak_and_sk()
        except (Exception, socket.error) as ex:
            if retry_times <= 3:
                delay = self._RETRY_DELAY_FAST
            else:
                delay = 60 * min(10, retry_times)
            next_retry_time = retry_times + 1
            logging.warn(
                'refresh session ak failed, auto retry after {} seconds. message = {}'.format(delay, ex))
        finally:
            self._scheduler.enter(delay, self._PRIORITY, self._refresh_session_ak_and_sk, [False, next_retry_time])
            self._scheduler.run()
示例#36
0
 def __init__(self, REGION, DOMAIN, PRODUCT_NAME, sms_access_key_id, sms_access_key_secret, ):
     self.acs_client = AcsClient(sms_access_key_id, sms_access_key_secret, REGION)
     region_provider.add_endpoint(PRODUCT_NAME, REGION, DOMAIN)
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

# coding=utf-8

import os
import sys

parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parent_dir)

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import RpcRequest

client = AcsClient('your_access_key', 'your_access_secret', 'cn-hangzhou')
location_service = client.get_location_service()
location_service.set_location_service_attr(region='cn-beijing',
                                           product_name="Location",
                                           domain="location.aliyuncs.com")
domain = location_service.find_product_domain(client.get_region_id(), 'oss');
print domain
domain = location_service.find_product_domain(client.get_region_id(), 'oss');
print domain


class DescribeRegionsRequest(RpcRequest):

    def __init__(self, OwnerId = None, ResourceOwnerAccount = None,
                 ResourceOwnerId = None, OwnerAccount = None):
        RpcRequest.__init__(self, 'Ecs', '2014-05-26', 'DescribeRegions', 'oss')