Python脚本实现下载合并SAE日志


Posted in Python onFebruary 10, 2015

由于一些原因,需要SAE上站点的日志文件,从SAE上只能按天下载,下载下来手动处理比较蛋疼,尤其是数量很大的时候。还好SAE提供了API可以批量获得日志文件下载地址,刚刚写了python脚本自动下载和合并这些文件

调用API获得下载地址

文档位置在这里

设置自己的应用和下载参数

请求中需要设置的变量如下

api_url = 'http://dloadcenter.sae.sina.com.cn/interapi.php?'

appname = 'xxxxx'

from_date = '20140101'

to_date = '20140116'

url_type = 'http' # http|taskqueue|cron|mail|rdc

url_type2 = 'access' # only when type=http  access|debug|error|warning|notice|resources

secret_key = 'xxxxx'

生成请求地址

请求地址生成方式可以看一下官网的要求:

1.将参数排序
2.生成请求字符串,去掉&
3.附加access_key
4.请求字符串求md5,形成sign
5.把sign增加到请求字符串中

具体实现代码如下

params = dict()

params['act'] = 'log'

params['appname'] = appname

params['from'] = from_date

params['to'] = to_date

params['type'] = url_type
if url_type == 'http':

    params['type2'] = url_type2
params = collections.OrderedDict(sorted(params.items()))
request = ''

for k,v in params.iteritems():

    request += k+'='+v+'&'
sign = request.replace('&','')

sign += secret_key
md5 = hashlib.md5()

md5.update(sign)

sign = md5.hexdigest()
request = api_url + request + 'sign=' + sign
if response['errno'] != 0:

    print '[!] '+response['errmsg']

    exit()
print '[#] request success'

下载日志文件

SAE将每天的日志文件都打包成tar.gz的格式,下载保存下来即可,文件名以日期.tar.gz命名

log_files = list()
for down_url in response['data']:    

    file_name = re.compile(r'\d{4}-\d{2}-\d{2}').findall(down_url)[0] + '.tar.gz'

    log_files.append(file_name)

    data = urllib2.urlopen(down_url).read()

    with open(file_name, "wb") as file:

        file.write(data)
print '[#] you got %d log files' % len(log_files)

合并文件

合并文件方式用trafile库解压缩每个文件,然后把文件内容附加到access_log下就可以了

# compress these files to access_log

access_log = open('access_log','w');
for log_file in log_files:

    tar = tarfile.open(log_file)

    log_name = tar.getnames()[0]

    tar.extract(log_name)

    # save to access_log

    data = open(log_name).read()

    access_log.write(data)

    os.remove(log_name)
print '[#] all file has writen to access_log'

完整代码

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Author: Su Yan <http://yansu.org>

# @Date:   2014-01-17 12:05:19

# @Last Modified by:   Su Yan

# @Last Modified time: 2014-01-17 14:15:41
import os

import collections

import hashlib

import urllib2

import json

import re

import tarfile
# settings

# documents http://sae.sina.com.cn/?m=devcenter&catId=281

api_url = 'http://dloadcenter.sae.sina.com.cn/interapi.php?'

appname = 'yansublog'

from_date = '20140101'

to_date = '20140116'

url_type = 'http' # http|taskqueue|cron|mail|rdc

url_type2 = 'access' # only when type=http  access|debug|error|warning|notice|resources

secret_key = 'zwzim4zhk35i50003kz2lh3hyilz01m03515j0i5'
# encode request

params = dict()

params['act'] = 'log'

params['appname'] = appname

params['from'] = from_date

params['to'] = to_date

params['type'] = url_type
if url_type == 'http':

    params['type2'] = url_type2
params = collections.OrderedDict(sorted(params.items()))
request = ''

for k,v in params.iteritems():

    request += k+'='+v+'&'
sign = request.replace('&','')

sign += secret_key
md5 = hashlib.md5()

md5.update(sign)

sign = md5.hexdigest()
request = api_url + request + 'sign=' + sign
# request api

response = urllib2.urlopen(request).read()

response = json.loads(response)
if response['errno'] != 0:

    print '[!] '+response['errmsg']

    exit()
print '[#] request success'
# download and save files

log_files = list()
for down_url in response['data']:    

    file_name = re.compile(r'\d{4}-\d{2}-\d{2}').findall(down_url)[0] + '.tar.gz'

    log_files.append(file_name)

    data = urllib2.urlopen(down_url).read()

    with open(file_name, "wb") as file:

        file.write(data)
print '[#] you got %d log files' % len(log_files)
# compress these files to access_log

access_log = open('access_log','w');
for log_file in log_files:

    tar = tarfile.open(log_file)

    log_name = tar.getnames()[0]

    tar.extract(log_name)

    # save to access_log

    data = open(log_name).read()

    access_log.write(data)

    os.remove(log_name)
print '[#] all file has writen to access_log'
Python 相关文章推荐
pip 错误unused-command-line-argument-hard-error-in-future解决办法
Jun 01 Python
Python实现对PPT文件进行截图操作的方法
Apr 28 Python
python WindowsError的错误代码详解
Jul 23 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
Mar 22 Python
Python实现修改IE注册表功能示例
May 10 Python
基于python的图片修复程序(实现水印去除)
Jun 04 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
Jul 23 Python
Django 查询数据库并返回页面的例子
Aug 12 Python
Python turtle库绘制菱形的3种方式小结
Nov 23 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
Mar 09 Python
浅析Python中的套接字编程
Jun 22 Python
python解析照片拍摄时间进行图片整理
Jul 23 Python
Python常用内置函数总结
Feb 08 #Python
Python文件和目录操作详解
Feb 08 #Python
Python中操作MySQL入门实例
Feb 08 #Python
Python Web框架Flask下网站开发入门实例
Feb 08 #Python
Python中使用wxPython开发的一个简易笔记本程序实例
Feb 08 #Python
Python常用的日期时间处理方法示例
Feb 08 #Python
Python中使用PIL库实现图片高斯模糊实例
Feb 08 #Python
You might like
不用mod_rewrite直接用php实现伪静态化页面代码
2008/10/04 PHP
php自动获取目录下的模板的代码
2010/08/08 PHP
11个PHP 分页脚本推荐
2011/08/15 PHP
PHP 万年历实现代码
2012/10/18 PHP
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
PHP闭包实例解析
2014/09/08 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
2016/10/08 PHP
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
JavaScript检测字符串中是否含有html标签实现方法
2015/07/01 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
2016/12/05 Javascript
JS库之wow.js使用方法
2017/09/14 Javascript
JavaScript实现新年倒计时效果
2018/11/17 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
Vue中this.$nextTick的作用及用法
2020/02/04 Javascript
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
简单介绍django提供的加密算法
2019/12/18 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
Regatta官网:英国最受欢迎的户外服装和鞋类品牌
2019/05/01 全球购物
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
汽车技术服务英文求职信范文
2014/01/02 职场文书
剪彩仪式主持词
2014/03/19 职场文书
数控机床专业自荐信
2014/05/19 职场文书
人力资源管理系自荐信
2014/05/31 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
Python爬虫基础初探selenium
2021/05/31 Python
使用HttpSessionListener监听器实战
2022/03/17 Java/Android