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 相关文章推荐
利用js调用后台php进行数据处理原码
Oct 09 PHP
如何在PHP中使用Oracle数据库(5)
Oct 09 PHP
php 文章采集正则代码
Dec 28 PHP
php.ini中date.timezone设置分析
Jul 29 PHP
php中使用临时表查询数据的一个例子
Feb 03 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
Javascript与PHP验证用户输入URL地址是否正确
Oct 09 PHP
smarty模板引擎从php中获取数据的方法
Jan 22 PHP
php简单解析mysqli查询结果的方法(2种方法)
Jun 29 PHP
Laravel 批量更新多条数据的示例
Nov 27 PHP
php常用的工具开发整理
Sep 26 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 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
PHP7+Nginx的配置与安装教程详解
2016/05/10 PHP
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
js图片预加载示例
2014/04/30 Javascript
nodejs的10个性能优化技巧
2014/07/15 NodeJs
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
2015/02/28 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
使用mock.js随机数据和使用express输出json接口的实现方法
2018/01/07 Javascript
微信小程序实现列表下拉刷新上拉加载
2020/07/29 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
pycharm 使用心得(四)显示行号
2014/06/05 Python
Python3基础之基本数据类型概述
2014/08/13 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
详细分析python3的reduce函数
2017/12/05 Python
Python通过Pygame绘制移动的矩形实例代码
2018/01/03 Python
python中pytest收集用例规则与运行指定用例详解
2019/06/27 Python
使用python实现男神女神颜值打分系统(推荐)
2019/10/31 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
windows、linux下打包Python3程序详细方法
2020/03/17 Python
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
投标人法定代表人授权委托书格式
2014/09/28 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
2015小学教师德育工作总结
2015/05/12 职场文书
2015年音乐教师个人工作总结
2015/05/20 职场文书
检察院起诉书
2015/05/20 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS