EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本

5年以前  |  阅读数:888 次  |  编程语言:PHP 

恰巧发现有个叫"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.net

    import sys
    import urllib, urllib2
    import base64
    import json

    URLLIB_DEBUG_LEVEL = 1
    URLLIB_TIMEOUT = 5

    def 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 urlreq

    def 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 url

    def 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 0

    def PrintHelp(argv):
      print "\t 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.net

    from distutils.core import setup
    import py2exe

    setup(console=['EarthLiveCleanCloudinary.py'])

Windows编译版本下载:

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

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例