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页面消耗内存过大的处理办法
Mar 18 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
Jun 27 PHP
PHP中unset,array_splice删除数组中元素的区别
Jul 28 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
Jan 04 PHP
php解析xml方法实例详解
May 12 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
Jul 03 PHP
PHP合并discuz用户脚本的方法
Aug 04 PHP
PHP中如何判断exec函数执行成功?
Aug 04 PHP
浅谈php中变量的数据类型判断函数
Mar 04 PHP
php表单文件iframe异步上传实例讲解
Jul 26 PHP
PHP 计算两个时间段之间交集的天数示例
Oct 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
phplock(php进程锁) v1.0 beta1
2009/11/24 PHP
深入解析php之sphinx
2013/05/15 PHP
PHP整合PayPal支付
2015/06/11 PHP
关于document.cookie的使用javascript
2008/04/11 Javascript
javascript 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
2009/04/07 Javascript
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
javascript真的不难-回顾一下基础知识
2013/01/15 Javascript
jquery实现ajax提交form表单的方法总结
2014/03/03 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
JQUERY简单按钮轮换选中效果实现方法
2015/05/07 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
vue获取dom元素注意事项
2017/12/28 Javascript
使用layui 的layedit定义自己的toolbar方法
2019/09/18 Javascript
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
Python 获取新浪微博的最新公共微博实例分享
2014/07/03 Python
python实现多线程采集的2个代码例子
2014/07/07 Python
python列表操作实例
2015/01/14 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
2018/07/04 Python
Django配置MySQL数据库的完整步骤
2019/09/07 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
django跳转页面传参的实现
2020/09/17 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
畜牧兽医本科生的自我评价
2014/03/03 职场文书
运动会拉拉队口号
2014/06/09 职场文书
企业消防安全责任书
2014/07/23 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
机器人总动员观后感
2015/06/09 职场文书
2017年大学生寒假社会实践活动总结
2016/04/06 职场文书
Java中Quartz高可用定时任务快速入门
2022/04/03 Java/Android
python井字棋游戏实现人机对战
2022/04/28 Python