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


Posted in PHP onApril 04, 2017

恰巧发现有个叫“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 相关文章推荐
拼音码表的生成
Oct 09 PHP
PHP 页面跳转到另一个页面的多种方法方法总结
Jul 07 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
Apr 09 PHP
基于php split()函数的用法详解
Jun 05 PHP
一组PHP可逆加密解密算法实例代码
Jan 21 PHP
ThinkPHP CURD方法之limit方法详解
Jun 18 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
Aug 25 PHP
php快速排序原理与实现方法分析
May 26 PHP
PHP图片添加水印功能示例小结
Oct 03 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
Feb 06 PHP
php 函数使用可变数量的参数方法
May 02 PHP
php中的钩子理解及应用实例分析
Aug 30 PHP
php实现用户登陆简单实例
Apr 04 #PHP
详谈phpAdmin修改密码后拒绝访问的问题
Apr 03 #PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
Apr 03 #PHP
THINKPHP在添加数据的时候获取主键id的值方法
Apr 03 #PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
Apr 03 #PHP
php PDO判断连接是否可用的实现方法
Apr 03 #PHP
php 调用ffmpeg获取视频信息的简单实现
Apr 03 #PHP
You might like
php获取参数的几种方法总结
2014/02/18 PHP
php从完整文件路径中分离文件目录和文件名的方法
2015/03/13 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
2013/07/10 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用
2014/11/23 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
Es6 写的文件import 起来解决方案详解
2016/12/13 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
vue-router重定向和路由别名的使用讲解
2019/01/19 Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
js实现图片推拉门效果代码实例
2019/05/18 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
jquery实现直播弹幕效果
2019/11/28 jQuery
2019最新21个MySQL高频面试题介绍
2020/02/06 Javascript
浅析VUE防抖与节流
2020/11/24 Vue.js
python图像处理之镜像实现方法
2015/05/30 Python
学习Python3 Dlib19.7进行人脸面部识别
2018/01/24 Python
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
HTML5 Canvas概述
2009/08/26 HTML / CSS
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
医学专业个人求职自荐信格式
2013/09/23 职场文书
营业员演讲稿
2013/12/30 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
暑假学习心得体会
2014/09/02 职场文书
2015年推普周活动方案
2015/05/06 职场文书
总经理致辞
2015/07/29 职场文书