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经典的给图片加水印程序
Dec 06 PHP
PHP 显示客户端IP与服务器IP的代码
Oct 12 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
Apr 10 PHP
PHP 正则表达式常用函数
Aug 17 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
Oct 15 PHP
php下Memcached入门实例解析
Jan 05 PHP
PHP5.3以上版本安装ZendOptimizer扩展
Mar 27 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
Apr 21 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
Jun 12 PHP
Laravel中encrypt和decrypt的实现方法
Sep 24 PHP
Laravel框架FormRequest中重写错误处理的方法
Feb 18 PHP
php 实现银联商务H5支付的示例代码
Oct 12 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实现维护文件代码
2007/06/14 PHP
php+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
phpMyAdmin 安装配置方法和问题解决
2009/06/08 PHP
PHP数组操作汇总 php数组的使用技巧
2011/07/17 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
php查询mysql数据库并将结果保存到数组的方法
2015/03/18 PHP
Yii多表联合查询操作详解
2016/06/02 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
JS判断是否为数字,是否为整数,是否为浮点数的代码
2010/04/24 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
2014/10/16 Javascript
javascript实现滑动解锁功能
2014/12/31 Javascript
基于javascript实现checkbox复选框实例代码
2016/01/28 Javascript
10分钟掌握XML、JSON及其解析
2020/12/06 Javascript
JavaScript 中 apply 、call 的详解
2017/03/21 Javascript
React中的refs的使用教程
2018/02/13 Javascript
JavaScript动态加载重复绑定问题
2018/04/01 Javascript
JS实现DOM删除节点操作示例
2018/04/04 Javascript
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
2015/04/28 Python
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
HTML5标签小集
2011/08/02 HTML / CSS
挪威手表购物网站:Klokker
2016/09/19 全球购物
中专三年学习的个人自我评价
2013/12/12 职场文书
小学教师国培感言
2014/02/08 职场文书
1亿有多大教学反思
2014/05/01 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
开学第一周值周总结
2015/07/16 职场文书
安全生产标语口号
2015/12/26 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android