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函数
Oct 09 PHP
PHP读取目录下所有文件的代码
Jan 07 PHP
测试php函数的方法
Nov 13 PHP
php生成随机密码自定义函数代码(简单快速)
May 10 PHP
php 过滤英文标点符号及过滤中文标点符号代码
Jun 12 PHP
如何解决PHP无法实现多线程的问题
Sep 25 PHP
PHP上传图片类显示缩略图功能
Jun 30 PHP
YII框架中使用memcache的方法详解
Aug 02 PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 PHP
PHP设计模式之策略模式原理与用法实例分析
Apr 04 PHP
在 Laravel 项目中使用 webpack-encore的方法
Jul 21 PHP
浅析PHP中json_encode与json_decode的区别
Jul 15 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 魔术方法使用说明
2009/10/20 PHP
ThinkPHP中ajax使用实例教程
2014/08/22 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
php微信开发之谷歌测距
2018/06/14 PHP
Javascript Math ceil()、floor()、round()三个函数的区别
2010/03/09 Javascript
EasySlider 基于jQuery功能强大简单易用的滑动门插件
2010/06/11 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
浅谈下拉菜单中的Option对象
2015/05/10 Javascript
详解Node.js模块间共享数据库连接的方法
2016/05/24 Javascript
Jquery表单验证失败后不提交的解决方法
2016/10/18 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
vue组件实现可搜索下拉框扩展
2020/10/23 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
Python统计文件中去重后uuid个数的方法
2015/07/30 Python
解读Python编程中的命名空间与作用域
2015/10/16 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
python matlibplot绘制多条曲线图
2021/02/19 Python
python opencv 批量改变图片的尺寸大小的方法
2019/06/28 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
2020/04/11 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
2020/12/14 Python
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
英国绿色商店:Natural Collection
2019/05/03 全球购物
自荐书模板
2013/12/15 职场文书
市场营销专业毕业生求职信
2014/03/26 职场文书
工作评语大全
2014/04/26 职场文书
应届生求职信范文
2014/05/26 职场文书
工作所在部门证明
2014/09/21 职场文书
医院员工辞职信范文
2015/05/12 职场文书
董事长年会致辞
2015/07/29 职场文书
如何书写民事调解协议书?
2019/06/25 职场文书
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python