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
Dec 14 PHP
提高PHP编程效率的53个要点(经验小结)
Sep 04 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
Dec 29 PHP
php异常处理技术,顶级异常处理器
Jun 13 PHP
php中长文章分页显示实现代码
Sep 29 PHP
php中AES加密解密的例子小结
Feb 18 PHP
PHP开发框架kohana中处理ajax请求的例子
Jul 14 PHP
Apache无法自动跳转却显示目录的解决方法
Nov 30 PHP
PHP实现对二维数组某个键排序的方法
Sep 14 PHP
PHP简单实现模拟登陆功能示例
Sep 15 PHP
php通过pecl方式安装扩展的实例讲解
Feb 02 PHP
PHP基于mcript扩展实现对称加密功能示例
Feb 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
php 生成短网址原理及代码
2014/01/23 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
2013/01/04 Javascript
javascript匿名函数应用示例介绍
2014/03/07 Javascript
简单分析javascript面向对象与原型
2015/05/21 Javascript
javascript省市级联功能实现方法实例详解
2015/10/20 Javascript
JS实现Fisheye效果动感放大菜单代码
2015/10/21 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
webpack4 SplitChunks实现代码分隔详解
2019/05/23 Javascript
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
Python两个内置函数 locals 和globals(学习笔记)
2016/08/28 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
python编写暴力破解zip文档程序的实例讲解
2018/04/24 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
django中模板的html自动转意方法
2018/05/27 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
2020/03/05 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
Python私有属性私有方法应用实例解析
2020/09/15 Python
Django url 路由匹配过程详解
2021/01/22 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
JAVA和C++的区别
2013/10/06 面试题
2014中学教师节广播稿
2014/09/10 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
英文版辞职信
2015/02/28 职场文书
企业党建工作总结2015
2015/05/26 职场文书
党员心得体会范文2016
2016/01/23 职场文书
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers