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_Flame(Version:Progress)的原代码
Oct 09 PHP
Windows下XDebug 手工配置与使用说明
Jul 11 PHP
PHP缓存技术的使用说明
Aug 06 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
Nov 14 PHP
php关联数组快速排序的方法
Apr 17 PHP
php类自动加载器实现方法
Jul 28 PHP
php简单防盗链实现方法
Jul 29 PHP
PHP中explode函数和split函数的区别小结
Aug 24 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
Jun 01 PHP
php实现数字补零的方法总结
Sep 12 PHP
PHP基于cookie实现统计在线人数功能示例
Jan 16 PHP
在laravel中实现将查询的对象转换为多维数组的函数
Oct 21 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
mysql5详细安装教程
2007/01/15 PHP
php面向对象中的魔术方法中文说明
2014/03/04 PHP
smarty自定义函数用法示例
2016/05/20 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
浅谈PHP中的错误处理和异常处理
2017/02/04 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
JavaScript实现Sleep函数的代码
2007/03/04 Javascript
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
jQuery 更改checkbox的状态,无效的解决方法
2016/07/22 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
总结JavaScript在IE9之前版本中内存泄露问题
2018/04/28 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
细述Javascript的加法运算符的具体使用
2019/10/18 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
[03:09]2014DOTA2国际邀请赛 Mushi前队友送上祝福
2014/07/12 DOTA
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
区域总监的岗位职责
2013/11/21 职场文书
校班主任推荐信范文
2013/12/03 职场文书
清洁工岗位职责
2014/01/29 职场文书
优秀纪检干部材料
2014/08/27 职场文书
小学见习报告
2014/10/31 职场文书
离婚协议书范本
2015/01/26 职场文书
横店影视城导游词
2015/02/06 职场文书
酒店优秀员工推荐信
2015/03/24 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书