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合并数组array_merge函数运算符加号与的区别
Oct 31 PHP
php从数组中随机抽取一些元素的代码
Nov 05 PHP
深入Nginx + PHP 缓存详解
Jul 11 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
Aug 28 PHP
PHP实现文件下载断点续传详解
Oct 15 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
Jul 31 PHP
PHP中串行化用法示例
Nov 16 PHP
总结一些PHP中好用但又容易忽略的小知识
Jun 02 PHP
Yii2使用表单上传文件的实例代码
Aug 03 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
May 06 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
Oct 16 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蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
php实现插入排序
2015/03/29 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
IE 下的只读 innerHTML
2009/08/21 Javascript
HTML中的setCapture和releaseCapture使用介绍
2012/03/21 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
详解angular2.x创建项目入门指令
2018/10/11 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
Python中除法使用的注意事项
2014/08/21 Python
python中numpy.zeros(np.zeros)的使用方法
2017/11/07 Python
python脚本和网页有何区别
2020/07/02 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
介绍一下grep命令的使用
2015/06/12 面试题
留学自荐信
2013/10/10 职场文书
办公室助理岗位职责
2013/12/25 职场文书
文明寄语大全
2014/04/11 职场文书
责任心演讲稿
2014/05/14 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
爱国主义教育主题班会
2015/08/13 职场文书
高一作文之暖冬
2019/11/09 职场文书
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android