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面向对象全攻略 (十二) 抽象方法和抽象类
Sep 30 PHP
php面向对象 字段的声明与使用
Jun 14 PHP
深入理解php的MySQL连接类
Jun 07 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
Nov 04 PHP
写一段简单的PHP建立文件夹代码
Jan 06 PHP
PHP中使用curl伪造IP的简单方法
Aug 07 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
Mar 01 PHP
PHP图片水印类的封装
Jul 06 PHP
PHP设计模式之注册树模式分析
Jan 26 PHP
php支付宝APP支付功能
Jul 29 PHP
PHP使用PDO操作sqlite数据库应用案例
Mar 07 PHP
Thinkphp5 自定义上传文件名的实现方法
Jul 23 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根据身份证号码计算年龄的实例代码
2014/01/18 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
2014/08/08 PHP
PHP大神的十大优良习惯
2016/09/14 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
浅谈laravel 5.6 安装 windows上使用composer的安装过程
2019/10/18 PHP
Javascript 读后台cookie代码
2008/09/15 Javascript
javascript中普通函数的使用介绍
2013/12/19 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
javascript中的replace函数(带注释demo)
2018/01/07 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
使用vue-router在Vue页面之间传递数据的方法
2019/07/15 Javascript
js实现搜索提示框效果
2020/09/05 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
Python中的面向对象编程详解(上)
2015/04/13 Python
python实现的文件同步服务器实例
2015/06/02 Python
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
Python线性回归实战分析
2018/02/01 Python
Python 变量类型详解
2018/10/10 Python
对python模块中多个类的用法详解
2019/01/10 Python
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
查询优化的一般准则有哪些
2015/03/08 面试题
产品质量承诺范本
2014/03/31 职场文书
贺卡寄语大全
2014/04/11 职场文书
化工操作工岗位职责
2014/04/29 职场文书
九华山导游词
2015/02/03 职场文书
保洁员岗位职责
2015/02/04 职场文书
清明节文明祭祀倡议书
2015/04/28 职场文书
爱的教育观后感
2015/06/17 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis
MySQL 服务和数据库管理
2021/11/11 MySQL