mirror of
https://github.com/HaujetZhao/CapsWriter.git
synced 2025-07-13 21:12:08 +08:00
87 lines
3.2 KiB
Python
87 lines
3.2 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
* Copyright 2015 Alibaba Group Holding Limited
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
"""
|
|
|
|
import base64
|
|
import hashlib
|
|
import hmac
|
|
import requests
|
|
import time
|
|
import uuid
|
|
|
|
from urllib import parse
|
|
from ali_speech._logging import _log
|
|
|
|
|
|
class AccessToken:
|
|
@staticmethod
|
|
def _encode_text(text):
|
|
encoded_text = parse.quote_plus(text)
|
|
return encoded_text.replace('+', '%20').replace('*', '%2A').replace('%7E', '~')
|
|
|
|
@staticmethod
|
|
def _encode_dict(dic):
|
|
keys = dic.keys()
|
|
dic_sorted = [(key, dic[key]) for key in sorted(keys)]
|
|
encoded_text = parse.urlencode(dic_sorted)
|
|
return encoded_text.replace('+', '%20').replace('*', '%2A').replace('%7E', '~')
|
|
|
|
@staticmethod
|
|
def create_token(access_key_id, access_key_secret):
|
|
parameters = {'AccessKeyId': access_key_id,
|
|
'Action': 'CreateToken',
|
|
'Format': 'JSON',
|
|
'RegionId': 'cn-shanghai',
|
|
'SignatureMethod': 'HMAC-SHA1',
|
|
'SignatureNonce': str(uuid.uuid1()),
|
|
'SignatureVersion': '1.0',
|
|
'Timestamp': time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()),
|
|
'Version': '2019-02-28'}
|
|
# 构造规范化的请求字符串
|
|
query_string = AccessToken._encode_dict(parameters)
|
|
_log.debug('规范化的请求字符串: %s' % query_string)
|
|
# 构造待签名字符串
|
|
string_to_sign = 'GET' + '&' + AccessToken._encode_text('/') + '&' + AccessToken._encode_text(query_string)
|
|
_log.debug('待签名的字符串: %s' % string_to_sign)
|
|
# 计算签名
|
|
secreted_string = hmac.new(bytes(access_key_secret + '&', encoding='utf-8'),
|
|
bytes(string_to_sign, encoding='utf-8'),
|
|
hashlib.sha1).digest()
|
|
signature = base64.b64encode(secreted_string)
|
|
_log.debug('签名: %s' % signature)
|
|
# 进行URL编码
|
|
signature = AccessToken._encode_text(signature)
|
|
_log.debug('URL编码后的签名: %s' % signature)
|
|
# 调用服务
|
|
full_url = 'http://nls-meta.cn-shanghai.aliyuncs.com/?Signature=%s&%s' % (signature, query_string)
|
|
_log.debug('url: %s' % full_url)
|
|
# 提交HTTP GET请求
|
|
response = requests.get(full_url)
|
|
if response.ok:
|
|
root_obj = response.json()
|
|
key = 'Token'
|
|
if key in root_obj:
|
|
token = root_obj[key]['Id']
|
|
expire_time = root_obj[key]['ExpireTime']
|
|
return token, expire_time
|
|
|
|
_log.error(response.text)
|
|
return None, None
|
|
|
|
|