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 相关文章推荐
利用Python绘制数据的瀑布图的教程
Apr 07 Python
Python中规范定义命名空间的一些建议
Jun 04 Python
Python分支结构(switch)操作简介
Jan 17 Python
详解tensorflow训练自己的数据集实现CNN图像分类
Feb 07 Python
python3+PyQt5实现自定义窗口部件Counters
Apr 20 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
Aug 03 Python
python添加模块搜索路径和包的导入方法
Jan 19 Python
详解python中递归函数
Apr 16 Python
Python实现计算长方形面积(带参数函数demo)
Jan 18 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
Jan 18 Python
python程序实现BTC(比特币)挖矿的完整代码
Jan 20 Python
Python利用机器学习算法实现垃圾邮件的识别
Jun 28 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
我常用的几个类
2006/10/09 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
PHP实现git部署的方法教程
2017/12/19 PHP
JavaScript 变量基础知识
2009/11/07 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
2013/11/01 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
javascript移动开发中touch触摸事件详解
2016/03/18 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
2016/12/21 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
实例讲解Python中的私有属性
2014/08/21 Python
Python使用百度API上传文件到百度网盘代码分享
2014/11/08 Python
python实现文件快照加密保护的方法
2015/06/30 Python
Python实现购物车购物小程序
2018/04/18 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
Python拼接字符串的7种方法总结
2018/11/01 Python
解析Python的缩进规则的使用
2019/01/16 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
很酷的HTML5电子书翻页动画特效
2016/02/25 HTML / CSS
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
解释一下抽象方法和抽象类
2016/08/27 面试题
一句话工作感言
2014/03/01 职场文书
《动手做做看》教学反思
2014/04/09 职场文书
党的群众路线教育实践活动总结材料
2014/10/30 职场文书
爱心捐款感谢信
2015/01/20 职场文书
男方家长婚礼致辞
2015/07/27 职场文书
Vue3中的Refs和Ref详情
2021/11/11 Vue.js
GO语言字符串处理函数之处理Strings包
2022/04/14 Golang