class QiNiuCDNTool(QiNiuTool): def __init__(self): self.manager = CdnManager( Auth(access_key=settings.QINIU_ACCESSKEY, secret_key=settings.QINIU_ACCESSSECRET)) def get_log_data(self): pass def check(self, url): if 'http' in url: index = url.find('//') header = url.find('/', index + 2) if '.' in url[header + 1:]: # uri return 'FILE' else: return 'DIR' else: index = url.find('/') if '.' in url[index + 1:]: return 'FILE' else: return 'DIR' def sort(self, urls): file_urls = [] dir_urls = [] for url in urls: if self.check(url) == 'FILE': file_urls.append(url) else: dir_urls.append(url) return file_urls, dir_urls def refreshs(self, urls): file_urls, dir_urls = self.sort(urls) print(file_urls, dir_urls) if file_urls: ret, info = self.manager.refresh_dirs(dir_urls) print(ret, 'AAA', info) if dir_urls: ret, info = self.manager.refresh_urls(file_urls) print(ret, 'BBB', info) def refresh(self, url): ret = None info = None if self.check(url) == 'FILE': ret, info = self.manager.refresh_urls([url]) else: ret, info = self.manager.refresh_dirs([url]) if ret['code'] == 200: return True else: return False
def publish(self, target_url, credentials=None, **extra): # read auth keys from config file which they name shoudl be "qiniu.ini" config = self.get_config('qiniu.ini') access_key = config.get('auth.Access_Key') secret_key = config.get('auth.Secret_Key') bucket_name, key_prefix = self.split_bucket_uri(target_url) # prepare local files and upload status variables local = self.list_local() qn = Auth(access_key, secret_key) start_time = datetime.now() yield "### start to upload to bucket %s %s " % (bucket_name, key_prefix) counter = 0 num_files = len(local) ### upload files for filename in local: counter = counter+1 abs_path = os.path.join(self.output_path, filename) yield '### uploading %s ###' % filename key_name = key_prefix+filename token = qn.upload_token(bucket_name,key_name,120) ret,info=put_file(token,key_name,abs_path) if info.status_code ==200: yield '-- Successfully uploaded %s of %s files --' % (str(counter),num_files) else: yield 'something wrong %s' % info.status_code yield 'Full error message: %s' % info last_time = datetime.now()-start_time yield "$$$ Upload Done in %s seconds!" % last_time.seconds ##start to refresh cdn dir if config.get('cdn.refresh_enable') == "yes": yield "start to refresh" cdn_namager = CdnManager(qn) refresh_url = config.get('cdn.refresh_url') if refresh_url[-1]!='/': refresh_url = refresh_url+"/" dir = [refresh_url] refresh_dir_result = cdn_namager.refresh_dirs(dir) print(refresh_dir_result) if refresh_dir_result[0]['code'] ==200: yield "refresh complete!" else: yield "Error refreshing: %s" % refresh_dir_result[0] yield "ALL TASK ARE COMPLETED!"
'http://if-pbl.qiniudn.com/qiniu.jpg', 'http://if-pbl.qiniudn.com/qiniu2.jpg' ] # 注意链接最后的斜杠表示目录 dirs = ['http://if-pbl.qiniudn.com/test1/', 'http://if-pbl.qiniudn.com/test2/'] """刷新文件,目录""" # 刷新链接 print('刷新文件') refresh_url_result = cdn_manager.refresh_urls(urls) print_result(refresh_url_result) # 刷新目录需要联系七牛技术支持开通权限 print('刷新目录') refresh_dir_result = cdn_manager.refresh_dirs(dirs) print_result(refresh_dir_result) # 同时刷新文件和目录 print('刷新文件和目录') refresh_all_result = cdn_manager.refresh_urls_and_dirs(urls, dirs) print_result(refresh_all_result) """预取文件""" # 预取文件链接 print('预取文件链接') prefetch_url_result = cdn_manager.prefetch_urls(urls) print_result(prefetch_url_result) """获取带宽和流量数据""" domains = ['if-pbl.qiniudn.com', 'qdisk.qiniudn.com']
# -*- coding: utf-8 -*- import qiniu from qiniu import CdnManager # 账户ak,sk access_key = '...' secret_key = '...' auth = qiniu.Auth(access_key=access_key, secret_key=secret_key) cdn_manager = CdnManager(auth) # 需要刷新的目录链接 dirs = [ 'http://aaa.example.com/doc/img/', 'http://bbb.example.com/doc/video/' ] # 刷新链接 refresh_dir_result = cdn_manager.refresh_dirs(dirs)
if res.status_code != 200: raise Exception("upload failed") return ret, res if __name__ == "__main__": # 不要开代理 access_key = sys.argv[1] secret_key = sys.argv[2] sync = Sync( access_key=access_key, # access_key secret_key=secret_key, # secret_key bucket_name="bi-she", # bucket_name sync_dir="./", # 静态文件目录(后面必须有斜杠/) exclude=[".DS_Store"], cover=True, remove_redundant=True, ) # 刷新缓存 cdn_manager = CdnManager(sync.q) # 需要刷新的文件链接 urls = ['http://aaa.example.com/a.gif', 'http://bbb.example.com/b.jpg'] # URL刷新链接 refresh_url_result = cdn_manager.refresh_urls(urls) # 目录刷新链接 refresh_dir_result = cdn_manager.refresh_dirs(['xxx'])
class QiNiuCDNTool(QiNiuTool): def __init__(self): self.manager = CdnManager(Auth(access_key=settings.QINIU_ACCESSKEY, secret_key=settings.QINIU_ACCESSSECRET)) @staticmethod def get_status(status): if status == 'success': return settings.STATUS_CDN_DONE elif status == 'processing': return settings.STATUS_CDN_RUN elif status == 'failure': return settings.STATUS_CDN_ERROR @staticmethod def get_models(result): return { 'process': result['progress'], 'status': QiNiuCDNTool.get_status(result['state']), } def get_log_data(self): pass def check(self, url): if 'http' in url: index = url.find('//') header = url.find('/', index + 2) if '.' in url[header + 1:]: # uri return 'FILE' else: return 'DIR' else: index = url.find('/') if '.' in url[index+1:]: return 'FILE' else: return 'DIR' def sort(self, urls): file_urls = [] dir_urls = [] for url in urls: if self.check(url) == 'FILE': file_urls.append(url) else: dir_urls.append(url) return file_urls, dir_urls def refreshs(self, urls): file_urls, dir_urls = self.sort(urls) print(file_urls,dir_urls) if file_urls: ret, info= self.manager.refresh_dirs(dir_urls) print(ret, 'AAA',info) if dir_urls: ret, info =self.manager.refresh_urls(file_urls) print(ret, 'BBB',info) def tool_flush_cdn(self, url): ret = None info = None if self.check(url) == 'FILE': ret, info = self.manager.refresh_urls([url]) else: ret, info = self.manager.refresh_dirs([url]) return { 'RefreshTaskId': ret['requestId'], 'urlSurplusDay': ret['urlSurplusDay'], 'dirQuotaDay': ret['dirQuotaDay'], 'dirSurplusDay': ret['dirSurplusDay'], 'urlQuotaDay': ret['urlQuotaDay'], } def tool_get_task(self, request_id): req = {} req['requestId'] = request_id body = json.dumps(req) url = '{0}/v2/tune/refresh/list'.format(self.manager.server) headers = {'Content-Type': 'application/json'} ret, info = http._post_with_auth_and_headers(url, body, self.manager.auth, headers) yield QiNiuCDNTool.get_models(ret['items'][0])