EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
author:一佰互联 2019-04-26   click:143

恰巧发现有个叫“EarthLiveSharp”,可用将日本向日葵8号卫星的地球实时图片设为屏保。向日葵8号卫星的地球实时图片官网为:http://himawari8.nict.go.jp/,EarthLiveSharp的项目地址是:https://github.com/bitdust/EarthLiveSharp。为了减轻向日葵8号的服务器负担,同时也是提高地球实时图片的获取成功率,需要使用cloudinary来做CDN。注册配置都在软件里有说明。

目前EarthLiveSharp暂时没有清理cloudinary的CDN图片缓存的功能,于是我用python写了一个,并尝试用gist管理,地址为:https://gist.github.com/creke/c5a8a18fa41b8f5c1a0719a7e0cf4de6

同时,为了大家方便,顺便编译成了Windows可执行文件,下载: https://pan.baidu.com/s/1c27fXEo 提取码:k33n为了自己检索方便,顺便在这里附上python脚本源码,可以作为python如何使用RESTful接口的例子,相关工具类函数也便于参考。

EarthLiveCleanCloudinary.py

# -*- coding: utf-8 -*-# Author: Creke# HomePage: http://blog.creke.netimport sysimport urllib, urllib2import base64import jsonURLLIB_DEBUG_LEVEL = 1URLLIB_TIMEOUT = 5def Dict2Uri(dic):  return urllib.urlencode(dic)def GenUrllibReq(url, method, api_key, api_secret, post_data=None):  urlreq = None  if post_data is None:    urlreq = urllib2.Request(url)  else:    urlreq = urllib2.Request(url, post_data)  urlreq.get_method = lambda: method  auth_str = base64.b64encode("%s:%s" % (api_key, api_secret))  urlreq.add_header("Authorization", "Basic %s" % auth_str)  urlreq.add_header("Cache-Control", "no-cache")  return urlreqdef GetApiDelUrl(cloud_name, img_type):  url = "https://api.cloudinary.com/v1_1/%s/resources/image/%s" % (cloud_name, img_type)  params = {"prefix": "http://himawari8-dl"}  url = url + "?" + Dict2Uri(params)  return urldef main(argv):  arg_idx = 1  api_key = argv[arg_idx]  arg_idx += 1  api_secret = argv[arg_idx]  arg_idx += 1  cloud_name = argv[arg_idx]  while True:    del_url = GetApiDelUrl(cloud_name, "fetch")    urlreq = GenUrllibReq(del_url, "DELETE", api_key, api_secret)    print "==========================="    print "Requesting %s" % (del_url)    opener = urllib2.build_opener(urllib2.HTTPSHandler(debuglevel=URLLIB_DEBUG_LEVEL))    urllib_open = opener.open(urlreq, timeout=URLLIB_TIMEOUT)    response = urllib_open.read()    print "==========================="    print "Response:"    print "%s" % (response)    print "==========================="    urllib_open.close()    print "Done Requesting"    res_json = json.loads(response)    deleted_cnt = len(res_json["deleted"])    print "Deleted %u himawari8 pics" % (deleted_cnt)    print "==========================="    if "next_cursor" in res_json and deleted_cnt>0:      print "Due to Cloudinary limits, we"re starting a new round"    else:      break  return 0def PrintHelp(argv):  print "	 USAGE: %s [api_key] [api_secret] [cloud_name]" % (argv[0])if __name__ == "__main__":  if len(sys.argv) < 4:    PrintHelp(sys.argv)    exit(1)  print "RUNNING main"  main(sys.argv)  print "DONE main"

EarthLiveCleanCloudinary2exe.py

# -*- coding: utf-8 -*-# Author: Creke# HomePage: http://blog.creke.netfrom distutils.core import setupimport py2exesetup(console=["EarthLiveCleanCloudinary.py"])

Windows编译版本下载:

链接: https://pan.baidu.com/s/1skADZeH 密码: rdgb