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 相关文章推荐
adodb与adodb_lite之比较
Dec 31 PHP
PHP中文件缓存转内存缓存的方法
Dec 06 PHP
php jq jquery getJSON跨域提交数据完整版
Sep 13 PHP
destoon利用Rewrite规则设置网站安全
Jun 21 PHP
PHP获取windows登录用户名的方法
Jun 24 PHP
php中socket通信机制实例详解
Jan 03 PHP
浅谈thinkphp的实例化模型
Jan 04 PHP
基于php的微信公众平台开发入门实例
Apr 15 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
May 22 PHP
Yii框架实现的验证码、登录及退出功能示例
May 20 PHP
PHP中Static(静态)关键字功能与用法实例分析
Apr 05 PHP
php中Swoole的热更新实现代码实例
Mar 04 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获取网页内容方法总结
2008/12/04 PHP
一个php Mysql类 可以参考学习熟悉下
2009/06/21 PHP
ThinkPHP使用心得分享-分页类Page的用法
2014/05/15 PHP
php的XML文件解释类应用实例
2014/09/22 PHP
THINKPHP项目开发中的日志记录实例分析
2014/12/01 PHP
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
2016/11/09 PHP
javascript 表单规则集合对象
2009/07/21 Javascript
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
使用JavaScript解决网页图片拉伸问题(推荐)
2016/11/25 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
深入理解js中的加载事件
2017/02/08 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
2017/02/22 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
python PIL模块与随机生成中文验证码
2016/02/27 Python
Win10下Python环境搭建与配置教程
2016/11/18 Python
python开发简易版在线音乐播放器
2017/03/03 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
python 同时读取多个文件的例子
2019/07/16 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
Django Auth用户认证组件实现代码
2020/10/13 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
物流仓储计划书
2014/01/10 职场文书
毕业评语大全
2014/05/04 职场文书
行政求职信
2014/07/04 职场文书
2016大学迎新欢迎词
2015/09/29 职场文书