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 相关文章推荐
生成sessionid和随机密码的例子
Oct 09 PHP
PHP动态变静态原理
Nov 25 PHP
PHP GD 图像处理组件的常用函数总结
Apr 28 PHP
php将数据库导出成excel的方法
May 07 PHP
PHP 数据结构 算法 三元组 Triplet
Jul 02 PHP
php图片加水印原理(超简单的实例代码)
Jan 18 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
Nov 07 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
May 06 PHP
php短址转换实现方法
Feb 25 PHP
php控制文件下载速度的方法
Mar 24 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 PHP
php接口隔离原则实例分析
Nov 11 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
磨咖啡豆的密诀
2021/03/03 冲泡冲煮
ecshop 批量上传(加入自定义属性)
2012/03/20 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
2016/05/09 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
很多人都是用下面的js刷新站IP和PV
2008/09/05 Javascript
JavaScript类库D
2010/10/24 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
关于Vue.nextTick()的正确使用方法浅析
2017/08/25 Javascript
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
vue实现图书管理系统
2020/12/29 Vue.js
Python字符编码与函数的基本使用方法
2017/09/30 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
2018/04/28 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
2020/02/26 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
HTML5教程之html 5 本地数据库(Web Sql Database)
2014/04/03 HTML / CSS
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
师说教学反思
2014/02/07 职场文书
运动会跳远加油稿
2014/02/20 职场文书
小学庆六一活动方案
2014/02/28 职场文书
市场营销战略计划书
2014/05/06 职场文书
工程承诺书怎么写
2014/05/24 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
python爬取豆瓣电影TOP250数据
2021/05/23 Python
前端JavaScript大管家 package.json
2021/11/02 Javascript
通过Python把学姐照片做成拼图游戏
2022/02/15 Python
SQL Server内存机制浅探
2022/04/06 SQL Server