def listNamespaces(access_key, secret_key, offset=None, line=10, sortBy="desc:createdAt"): """ 获取空间列表 https://developer.qiniu.com/qvs/api/6730/list-namespace :param access_key: 公钥 :param secret_key: 私钥 :param offset: 在全部namespace中的偏移量,时间戳 :param line: 一次返回多少条 :param sortBy: asc 表示升序, desc 表示降序, 默认按创建时间降序排列(可参与排序的字段有createdAt, updatedAt).asc:updatedAt表示更新时间从小到大排序, desc:updatedAt表示更新时间从大到小排序 :return: 200 { } """ auth = QiniuMacAuth(access_key, secret_key) if offset is None: # 请求URL url = f"http://qvs.qiniuapi.com/v1/namespaces?line={line}&sortBy={sortBy}" else: url = f"http://qvs.qiniuapi.com/v1/namespaces?offset={offset}&line={line}&sortBy={sortBy}" # 发起POST请求 ret, res = http._get_with_qiniu_mac(url, params=None, auth=auth) headers = {"code": res.status_code, "reqid": res.req_id, "xlog": res.x_log} # 格式化响应体 Headers = json.dumps(headers, indent=4, ensure_ascii=False) result = json.dumps(ret, indent=4, ensure_ascii=False) return Headers, result
def get_ssl_cert(self, cert_id: str = ''): url = 'https://api.qiniu.com/sslcert/{}'.format(cert_id) ret, info = http._get_with_qiniu_mac(url=url, params=None, auth=self._qiniu_mac_auth) return ret, info
def listNamespacesInfo(access_key, secret_key, templateId): """ 查询模板信息 https://developer.qiniu.com/qvs/api/6724/template-information :param access_key: 公钥 :param secret_key: 私钥 :param templateId: 模板ID :return: { "code": 200 } """ auth = QiniuMacAuth(access_key, secret_key) # 请求URL url = f"http://qvs.qiniuapi.com/v1/templates/{templateId}" # 发起POST请求 ret, res = http._get_with_qiniu_mac(url, params=None, auth=auth) headers = {"code": res.status_code, "reqid": res.req_id, "xlog": res.x_log} # 格式化响应体 Headers = json.dumps(headers, indent=4, ensure_ascii=False) result = json.dumps(ret, indent=4, ensure_ascii=False) return Headers, result
def streamsInfo(access_key, secret_key, namespaceId, streamId): """ 查询流信息 https://developer.qiniu.com/qvs/api/6736/query-information-flow :param access_key: 公钥 :param secret_key: 私钥 :param namespaceId: 空间ID :param streamId: 流名ID :return: { "code": 200 } """ auth = QiniuMacAuth(access_key, secret_key) # 请求URL url = f"http://qvs.qiniuapi.com/v1/namespaces/{namespaceId}/streams/{streamId}" # 发起GET请求 ret, res = http._get_with_qiniu_mac(url, params=None, auth=auth) headers = {"code": res.status_code, "reqid": res.req_id, "xlog": res.x_log} # 格式化响应体 Headers = json.dumps(headers, indent=4, ensure_ascii=False) result = json.dumps(ret, indent=4, ensure_ascii=False) return Headers, result
def streamsInfo(access_key, secret_key, hub, streamTitle): """ 查询流信息 https://developer.qiniu.com/pili/api/2773/query-stream :param access_key: 公钥 :param secret_key: 私钥 :param hub: 直播空间 :param streamTitle: 流名 :return: 200 { "createdAt": <CreatedAt>, // Unix Time "updatedAt": <UpdatedAt>, // Unix Time,更新流配置时会自动更新这个时间 "expireAt": <ExpireAt>, // Unix Time,过期时间 "converts": ["<Profile1>", "<Profile2>"], // 流的转码规格 "disabledTill": <DisabledTill> // 禁用的结束时间,-1 表示永久禁用 } """ auth = QiniuMacAuth(access_key, secret_key) # 流名base64安全编码 EncodedStreamTitle = urlsafe_base64_encode(streamTitle) # 请求URL url = f'http://pili.qiniuapi.com/v2/hubs/{hub}/streams/{EncodedStreamTitle}' # 发起GET请求 ret, res = http._get_with_qiniu_mac(url=url, params=None, auth=auth) headers = {"code": res.status_code, "reqid": res.req_id, "xlog": res.x_log} # 格式化响应体 Headers = json.dumps(headers, indent=4, ensure_ascii=False) result = json.dumps(ret, indent=4, ensure_ascii=False) return Headers, result
def listTemplates(access_key, secret_key, offset=None, templateType=None, match=None, line=10, sortBy="desc:createdAt"): """ 获取模板列表 https://developer.qiniu.com/qvs/api/6725/list-template :param access_key: 公钥 :param secret_key: 私钥 :param offset: 非必填,在全部namespace中的偏移量,时间戳 :param line: 非必填,一次返回多少条 :param sortBy: 非必填,asc 表示升序, desc 表示降序, 默认按创建时间降序排列(可参与排序的字段有createdAt, updatedAt).asc:updatedAt表示更新时间从小到大排序, desc:updatedAt表示更新时间从大到小排序 :param templateType: 非必填,模板类型,取值:0(录制模版), 1(截图模版) :param match: 非必填,模糊匹配查询(模版名称包含match串时返回) :return: 200 { } """ auth = QiniuMacAuth(access_key, secret_key) if offset is None and match is None and templateType is None: # 请求URL url = f"http://qvs.qiniuapi.com/v1/templates?line={line}&sortBy={sortBy}" else: url = f"http://qvs.qiniuapi.com/v1/templates?offset={offset}&line={line}&sortBy={sortBy}&templateType={templateType}&match={match}" # 发起POST请求 ret, res = http._get_with_qiniu_mac(url, params=None, auth=auth) headers = {"code": res.status_code, "reqid": res.req_id, "xlog": res.x_log} # 格式化响应体 Headers = json.dumps(headers, indent=4, ensure_ascii=False) result = json.dumps(ret, indent=4, ensure_ascii=False) return Headers, result
def historyactivity(access_key, secret_key, hub, streamTitle, startTime, endTime): """ 直播历史查询 https://developer.qiniu.com/pili/api/2778/live-history :param access_key: 公钥 :param secret_key: 私钥 :param hub: 直播空间 :param streamTitle: 流名 :param startTime: 整数,Unix 时间戳,起始时间,不指定或 0 值表示不限制起始时间。 :param endTime: 整数,Unix 时间戳,结束时间,不指定或 0 值表示当前时间。 :return: 200 { "items": [ { "start": <Start>, "end": <End> }, ... ] } """ auth = QiniuMacAuth(access_key, secret_key) # 流名base64安全编码 EncodedStreamTitle = urlsafe_base64_encode(streamTitle) l = [] # 日期转时间戳 def time2timestamp(datetime): # 日期格式 # datetime = '2020-06-08 00:00:00' # 转为时间数组 timeArray = time.strptime(datetime, "%Y-%m-%d %H:%M:%S") timeStamp = int(time.mktime(timeArray)) return timeStamp start = time2timestamp(startTime) end = time2timestamp(endTime) # 请求URL url = f'http://pili.qiniuapi.com/v2/hubs/{hub}/streams/{EncodedStreamTitle}/historyactivity?start={start}&end={end}' # 发起GET请求 ret, res = http._get_with_qiniu_mac(url=url, params=None, auth=auth) # 格式化响应体 result = ret["items"] for i in result: t = i["end"] - i["start"] l.append(t) return sum(l) / 60
def streamSnapshotss(access_key, secret_key, namespaceId, streamId, startDate, endDate, type, line=30, marker=None): """ 获取截图列表 https://developer.qiniu.com/qvs/api/6749/list-stream-snapshots :param access_key: 公钥 :param secret_key: 私钥 :param namespaceId: 必填项,空间ID :param streamId: 必填项,流ID :param type: 必填项,1:实时截图对应的图片列表 :param line: 非必填,限定返回截图的个数,只能输入1-100的整数,不指定默认返回30个 :param startDate: 必填项,查询开始时间(unix时间戳,单位为秒) :param endDate: 必填项,查询结束时间(unix时间戳,单位为秒) :param marker: 非必填,上一次查询返回的标记,用于提示服务端从上一次查到的位置继续查询,不指定表示从头查询 :return: 200 { } """ auth = QiniuMacAuth(access_key, secret_key) start = time2timestamp(startDate) end = time2timestamp(endDate) if marker is None: # 请求URL url = f"http://qvs.qiniuapi.com/v1/namespaces/{namespaceId}/streams/{streamId}/snapshots?type={type}&start={start}&end={end}&line={line}" else: url = f"http://qvs.qiniuapi.com/v1/namespaces/{namespaceId}/streams/{streamId}/snapshots?type={type}&start={end}&end={end}&line={line}&marker={marker}" # 发起POST请求 ret, res = http._get_with_qiniu_mac(url, params=None, auth=auth) if res.text_body: result = json.loads(res.text_body) headers = { "code": result["code"], "reqid": res.req_id, "xlog": result["error"] } else: headers = { "code": res.text_body, "reqid": res.req_id, "xlog": res.x_log } # 格式化响应体 Headers = json.dumps(headers, indent=4, ensure_ascii=False) result = json.dumps(ret, indent=4, ensure_ascii=False) return Headers, result
def get_ssl_cert_list(self, marker: str = '', limit: int = 10): url = 'https://api.qiniu.com/sslcert?marker={}&limit={}'.format( marker, limit) # content_type = 'application/json' # headers = {'Content-Type': content_type} # ret, info = http._post_with_qiniu_mac_and_headers(url, data, self._qiniu_mac_auth, headers) ret, info = http._get_with_qiniu_mac(url, params=None, auth=self._qiniu_mac_auth) return ret, info
def get_account_info(self): """获得当前账号的信息 查看当前请求方(请求鉴权使用的 AccessKey 的属主)的账号信息。 Returns: 返回一个tuple对象,其格式为(<result>, <ResponseInfo>) - result 成功返回用户信息,失败返回None - ResponseInfo 请求的Response信息 """ url = '{0}/v3/info'.format(self.host) return http._get_with_qiniu_mac(url, None, self.auth)
def list_apps(self): """获得当前账号的应用列表 列出所属应用为当前请求方的应用列表。 Returns: 返回一个tuple对象,其格式为(<result>, <ResponseInfo>) - result 成功返回应用列表,失败返回None - ResponseInfo 请求的Response信息 """ url = '{0}/v3/apps'.format(self.host) return http._get_with_qiniu_mac(url, None, self.auth)
def list_regions(self): """获得账号可见的区域的信息 列出当前用户所有可使用的区域。 Returns: 返回一个tuple对象,其格式为(<result>, <ResponseInfo>) - result 成功返回区域列表,失败返回None - ResponseInfo 请求的Response信息 """ url = '{0}/v3/regions'.format(self.host) return http._get_with_qiniu_mac(url, None, self.auth)
def streamSnapshotss(access_key, secret_key, namespaceId, streamId): """ 获取直播封面截图 https://developer.qiniu.com/qvs/api/6814/the-cover-for-screenshots :param access_key: 公钥 :param secret_key: 私钥 :param namespaceId: 必填项,空间ID :param streamId: 必填项,流ID :return: 200 { "url": "http://prlghu509.test.bkt.clouddn.com/snapshot/jpg/2akrarrzns76w/t0.jpg?e=1588124787&token=Ves3WTXC8XnEHT0I_vacEQQz-9jrJZxNExcmarzQ:bH8s5m5N5Ugp2wo6ACRUVeIK280" } """ auth = QiniuMacAuth(access_key, secret_key) # 请求URL url = f"http://qvs.qiniuapi.com/v1/namespaces/{namespaceId}/streams/{streamId}/cover" # 发起GET请求 ret, res = http._get_with_qiniu_mac(url, params=None, auth=auth) result = json.loads(res.text_body) if res.status_code == 401: headers = { "code": res.status_code, "reqid": res.req_id, "error": result["error"] } elif res.status_code != 401 and res.text_body: headers = { "code": result["code"], "reqid": res.req_id, "xlog": result["error"] } else: headers = { "code": res.text_body, "reqid": res.req_id, "xlog": res.x_log } # 格式化响应体 Headers = json.dumps(headers, indent=4, ensure_ascii=False) result = json.dumps(ret, indent=4, ensure_ascii=False) return Headers, result
def get_app_keys(self, app_uri): """获得账号下应用的密钥 列出指定应用的密钥,仅当访问者对指定应用有管理权限时有效: 用户对创建的应用有管理权限。 用户对使用的第三方应用没有管理权限,第三方应用的运维方有管理权限。 Args: - app_uri: 应用的完整标识 Returns: 返回一个tuple对象,其格式为(<result>, <ResponseInfo>) - result 成功返回秘钥列表,失败返回None - ResponseInfo 请求的Response信息 """ url = '{0}/v3/apps/{1}/keys'.format(self.host, app_uri) return http._get_with_qiniu_mac(url, None, self.auth)
def listOnlineStreamsInfo(access_key, secret_key, hub, streamTitle): """ 查询实时信息 https://developer.qiniu.com/pili/api/2776/live-broadcast-of-real-time-information :param access_key: 公钥 :param secret_key: 私钥 :param hub: 直播空间 :param streamTitle: 流名 :return: 200 { "startAt": <StartAt>, "clientIP": "<ClientIP>", "bps": <Bps>, // 当前码率 "fps": { "audio": <Audio>, "video": <Video>, "data": <Data> } } 404 { "error": "stream not found" } 619 { "error": "no live" // 流不在直播 } """ auth = QiniuMacAuth(access_key, secret_key) # 流名base64安全编码 EncodedStreamTitle = urlsafe_base64_encode(streamTitle) # 请求URL url = f'http://pili.qiniuapi.com/v2/hubs/{hub}/streams/{EncodedStreamTitle}/live' # 发起GET请求 ret, res = http._get_with_qiniu_mac(url=url, params=None, auth=auth) headers = {"code": res.status_code, "reqid": res.req_id, "xlog": res.x_log} # 格式化响应体 Headers = json.dumps(headers, indent=4, ensure_ascii=False) result = json.dumps(ret, indent=4, ensure_ascii=False) return Headers, result
def recordHistories(access_key, secret_key, namespaceId, streamId, start, end, line=10, marker=None): """ 查询录制记录 https://developer.qiniu.com/qvs/api/6745/query-recordhistories :param access_key: 公钥 :param secret_key: 私钥 :param offset: 非必填,在全部namespace中的偏移量,时间戳 :param line: 非必填,一次返回多少条 :param sortBy: 非必填,asc 表示升序, desc 表示降序, 默认按创建时间降序排列(可参与排序的字段有createdAt, updatedAt).asc:updatedAt表示更新时间从小到大排序, desc:updatedAt表示更新时间从大到小排序 :param templateType: 非必填,模板类型,取值:0(录制模版), 1(截图模版) :param match: 非必填,模糊匹配查询(模版名称包含match串时返回) :return: 200 { } """ auth = QiniuMacAuth(access_key, secret_key) start = time2timestamp(startDate) end = time2timestamp(endDate) if marker is None: # 请求URL url = f"http://qvs.qiniuapi.com/v1/namespaces/{namespaceId}/streams/{streamId}/recordhistories?start={start}&end={end}&line={line}" else: url = f"http://qvs.qiniuapi.com/v1/namespaces/{namespaceId}/streams/{streamId}/recordhistories?start={start}&end={end}&marker={marker}&line={line}" # 发起POST请求 ret, res = http._get_with_qiniu_mac(url, params=None, auth=auth) headers = {"code": res.status_code, "reqid": res.req_id, "xlog": res.x_log} # 格式化响应体 Headers = json.dumps(headers, indent=4, ensure_ascii=False) result = json.dumps(ret, indent=4, ensure_ascii=False) return Headers, result
def listNamespaces(access_key, secret_key, namespaceId, streamId, startDate, endDate, offset=None, line=10): """ 获取推流记录 https://developer.qiniu.com/qvs/api/6742/query-flow-records :param access_key: 公钥 :param secret_key: 私钥 :param offset: 非必填,在全部namespace中的偏移量,时间戳 :param line: 非必填,一次返回多少条 :param start: 必填,推流开始时间(unix timestamp in second) :param end: 必填,推流结束时间(unix timestamp in second) :return: 200 { } """ auth = QiniuMacAuth(access_key, secret_key) start = time2timestamp(startDate) end = time2timestamp(endDate) if offset is None: # 请求URL url = f"http://qvs.qiniuapi.com/v1/namespaces/{namespaceId}/streams/{streamId}/pubhistories?start={start}&end={end}&line={line}" else: url = f"http://qvs.qiniuapi.com/v1/namespaces?start={start}&end={end}&line={line}&offset={offset}" # 发起POST请求 ret, res = http._get_with_qiniu_mac(url, params=None, auth=auth) headers = {"code": res.status_code, "reqid": res.req_id, "xlog": res.x_log} # 格式化响应体 Headers = json.dumps(headers, indent=4, ensure_ascii=False) result = json.dumps(ret, indent=4, ensure_ascii=False) return Headers, result
def listStreams(access_key, secret_key, namespaceid, offset=None, line=10, qtype=0, prefix=None, sortBy="desc:createdAt"): """ 获取流列表 https://developer.qiniu.com/qvs/api/6737/query-list-flow :param access_key: 公钥 :param secret_key: 私钥 :param namespaceid: 空间名称ID :param offset: 在全部namespace中的偏移量,时间戳 :param line: 一次返回多少条 :param qtype: 查询流类型, 0:全部,1:在线流,2:离线流 :param prefix: 流ID 前缀,可以流ID 前缀进行检索查询 :param sortBy: asc 表示升序, desc 表示降序, 默认按创建时间降序排列(可参与排序的字段有createdAt, updatedAt).asc:updatedAt表示更新时间从小到大排序, desc:updatedAt表示更新时间从大到小排序 :return: 200 { } """ auth = QiniuMacAuth(access_key, secret_key) if offset is None and prefix is None: # 请求URL url = f"http://qvs.qiniuapi.com/v1/namespaces/{namespaceid}?line={line}&sortBy={sortBy}&qtype={qtype}" else: url = f"http://qvs.qiniuapi.com/v1/namespaces/{namespaceid}?offset={offset}&line={line}&qtype={qtype}&prefix={prefix}&sortBy={sortBy}" # 发起GET请求 ret, res = http._get_with_qiniu_mac(url, params=None, auth=auth) headers = {"code": res.status_code, "reqid": res.req_id, "xlog": res.x_log} # 格式化响应体 Headers = json.dumps(headers, indent=4, ensure_ascii=False) result = json.dumps(ret, indent=4, ensure_ascii=False) return Headers, result
def __get(self, url, params=None): if params is None: return http._get_with_qiniu_mac(url, params, self.auth) else: return http._get(url, params, self.auth)
def get_app_info(appuri): if ACC_AUTH is None: return None url = '{0}/v3/apps/{1}'.format(APP_HOST, appuri) return http._get_with_qiniu_mac(url, None, ACC_AUTH)[0]
#!/usr/bin/env python # -*- coding: utf-8 -*- import os import qiniu from qiniu import QiniuMacAuth from qiniu import http access_key = '1oMhuZ5a7zjXSSMjM1KWQKGUpbCkEUw9yxYy1ENE' secret_key = 'vnq9qhe_rrx4cBHUHOz0Mhz94ai5xAnYf_Pyunkj' auth = QiniuMacAuth(access_key, secret_key) url = 'http://ai.qiniuapi.com/v1/image/group' data = {} req = http._get_with_qiniu_mac(url, data, auth) print(req[0])
def __get(self, url, params): return http._get_with_qiniu_mac(url, params, self.auth)
def get_managed(): if ACC_AUTH is None: return None url = '{0}/v3/managed'.format(APP_HOST) return http._get_with_qiniu_mac(url, None, ACC_AUTH)[0]
def __get(self, url, params=None): return http._get_with_qiniu_mac(url, params, self.auth)
end = "20200323" # 必填,时间粒度,支持 day;当天支持5min、hour、day g = "hour" # 存储区域:z0 华东;z1 华北;z2 华南;na0 北美;as0 东南亚;是条件请求参数 region = "z0" # 值为size,表示流量 (Byte) select = "size" # 请求地址: url = "http://api.qiniu.com/v6/space?begin={0}&end={1}&g={2}".format( begin, end, g) ret, res = http._get_with_qiniu_mac(url=url, params=None, auth=auth) headers = {"code": res.status_code, "reqid": res.req_id, "xlog": res.x_log} print(json.dumps(headers, indent=4, ensure_ascii=False)) print(json.dumps(ret, indent=4, ensure_ascii=False)) """2、标准存储当前文件量统计:https://developer.qiniu.com/kodo/api/3914/count""" # AK、SK access_key = "<access_key>" secret_key = "<secret_key>" auth = QiniuMacAuth(access_key, secret_key) # 存储空间名称,是一个条件请求参数 bucket = "upload25"
def __get(self, url): return http._get_with_qiniu_mac(url, None, self.auth)