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 相关文章推荐
建立动态的WML站点(三)
Oct 09 PHP
PHP中,文件上传
Dec 06 PHP
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
May 03 PHP
php中explode与split的区别介绍
Oct 03 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
Jul 18 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
Aug 10 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
Apr 21 PHP
PHP的preg_match匹配字符串长度问题解决方法
May 03 PHP
php中chdir()函数用法实例
Nov 13 PHP
php实现微信公众平台发红包功能
Jun 14 PHP
PHP实现的多维数组去重操作示例
Jul 21 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
Apr 26 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面向对象程序设计组合模式与装饰模式详解
2016/12/02 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
JavaScript中的私有成员
2006/09/18 Javascript
兼容多浏览器的字幕特效Marquee的通用js类
2008/07/20 Javascript
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
javascript 表格内容排序 简单操作示例代码
2014/01/03 Javascript
JavaScript使用Prototype实现面向对象的方法
2015/04/14 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
2016/05/09 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
2018/07/11 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
2018/09/29 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
js实现3D旋转相册
2020/08/02 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
详解Python进程间通信之命名管道
2017/08/28 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
2019/08/17 Python
Pytorch之view及view_as使用详解
2019/12/31 Python
pytorch+lstm实现的pos示例
2020/01/14 Python
Django后端分离 使用element-ui文件上传方式
2020/07/12 Python
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
ECCO爱步官方旗舰店:丹麦鞋履品牌
2018/01/02 全球购物
售后服务承诺书怎么写
2014/05/21 职场文书
销售岗位职责范本
2014/06/12 职场文书
北京奥运会口号
2014/06/21 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
公司授权委托书样本
2014/09/15 职场文书