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中使用XML
Oct 09 PHP
APMServ使用说明
Oct 23 PHP
php class中public,private,protected的区别以及实例分析
Jun 18 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
Jan 22 PHP
php实现比较全的数据库操作类
Jun 18 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
Jun 07 PHP
php利用ob_start()清除输出和选择性输出的方法
Jan 18 PHP
PHP设计模式之单例模式原理与实现方法分析
Apr 25 PHP
PHP chr()函数讲解
Feb 11 PHP
PHP操作路由器实现方法示例
Apr 27 PHP
PHP7.3.10编译安装教程
Oct 08 PHP
PHP unset函数原理及使用方法解析
Aug 14 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学习教程之第1天
2008/06/15 PHP
php验证码生成代码
2015/11/11 PHP
ThinkPHP实现附件上传功能
2017/04/27 PHP
JavaScript获取GridView中用户点击控件的行号,列号
2009/04/14 Javascript
javascript最常用与实用的创建类的代码
2010/08/12 Javascript
JavaScript类属性的访问方式详解
2014/02/11 Javascript
Node.js实现的简易网页抓取功能示例
2014/12/05 Javascript
js验证上传图片的方法
2015/05/12 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
2015/08/06 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
基于jQuery ligerUI实现分页样式
2016/09/18 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
解决LayUI表单获取不到data的问题
2018/08/20 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
jQuery 动态粒子效果示例代码
2020/07/07 jQuery
Python中逗号的三种作用实例分析
2015/06/08 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
2016/01/20 Python
用yum安装MySQLdb模块的步骤方法
2016/12/15 Python
Python 含参构造函数实例详解
2017/05/25 Python
python基础之入门必看操作
2017/07/26 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
python使用scrapy发送post请求的坑
2018/09/04 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
python实现3D地图可视化
2020/03/25 Python
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
艺术爱好者的自我评价分享
2013/10/08 职场文书
初一英语教学反思
2014/01/11 职场文书
文化宣传方案
2014/03/13 职场文书
企业家王石演讲稿:坚持与放下
2014/04/27 职场文书
情人节活动总结范文
2015/02/05 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python