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 相关文章推荐
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
Dec 11 PHP
关于Intype一些小问题的解决办法
Mar 28 PHP
php后台如何避免用户直接进入方法实例
Oct 15 PHP
PHP取余函数介绍MOD(x,y)与x%y
May 15 PHP
php5.2以下版本无json_decode函数的解决方法
May 25 PHP
PHP Smarty模版简单使用方法
Mar 30 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
Apr 05 PHP
ThinkPHP中create()方法自动验证表单信息
Apr 28 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
Laravel中的Blade模板引擎示例详解
Oct 10 PHP
PHP基于array_unique实现二维数组去重
Jul 14 PHP
THINKPHP5分页数据对象处理过程解析
Oct 28 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
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
php写的带缓存数据功能的mysqli类
2012/09/06 PHP
PHP中的流(streams)浅析
2015/07/02 PHP
smarty中常用方法实例总结
2015/08/07 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
2016/10/08 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
2017/05/09 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
laravel实现于语言包的完美切换方法
2019/09/29 PHP
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
2016/05/24 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
Angularjs使用指令做表单校验的方法
2017/03/31 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
2018/12/25 Javascript
Vue实现按钮级权限方案
2019/11/21 Javascript
vue组件传值的实现方式小结【三种方式】
2020/02/05 Javascript
python开发之thread实现布朗运动的方法
2015/11/11 Python
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
AHAVA美国官方网站:死海海泥护肤品牌
2016/10/18 全球购物
瑞典快乐袜子:Happy Socks
2018/02/16 全球购物
土木工程专业大学毕业生求职信
2013/10/13 职场文书
态度决定一切演讲稿
2014/05/20 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书
SQLServer2019 数据库环境搭建与使用的实现
2021/04/08 SQL Server
简单谈谈Python面向对象的相关知识
2021/06/28 Python