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内置函数bin() oct()等实现进制转换
Dec 30 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
May 23 Python
selenium python浏览器多窗口处理代码示例
Jan 15 Python
使用PyCharm创建Django项目及基本配置详解
Oct 24 Python
python SQLAlchemy的Mapping与Declarative详解
Jul 04 Python
python创建学生成绩管理系统
Nov 22 Python
python中设置超时跳过,超时退出的方式
Dec 13 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
Feb 16 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
Apr 26 Python
Python命名空间namespace及作用域原理解析
Jun 05 Python
Python 实现国产SM3加密算法的示例代码
Sep 21 Python
python 实现图片特效处理
Apr 03 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
php自动注册登录验证机制实现代码
2011/12/20 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
PHP提取字符串中的手机号正则表达式怎么写
2017/07/17 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
js输出列表实现代码
2010/09/12 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
如何利用Promises编写更优雅的JavaScript代码
2016/05/17 Javascript
js实现楼层导航功能
2017/02/23 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
React Native中NavigatorIOS组件的简单使用详解
2018/01/27 Javascript
JavaScript实现读取与输出XML文件数据的方法示例
2018/06/05 Javascript
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
2019/11/14 Javascript
vue 二维码长按保存和复制内容操作
2020/09/22 Javascript
从Python的源码浅要剖析Python的内存管理
2015/04/16 Python
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
python中Apriori算法实现讲解
2017/12/10 Python
python3学生名片管理v2.0版
2018/11/29 Python
python实现一个简单的udp通信的示例代码
2019/02/01 Python
Linux上使用Python统计每天的键盘输入次数
2019/04/17 Python
使用python获取(宜宾市地震信息)地震信息
2019/06/20 Python
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
使用python实现kNN分类算法
2019/10/16 Python
django-csrf使用和禁用方式
2020/03/13 Python
Python selenium使用autoIT上传附件过程详解
2020/05/26 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
中海讯通笔试题
2015/09/15 面试题
大学生毕业自我鉴定范文
2014/02/03 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
党员活动总结
2015/02/04 职场文书
保护校园环境倡议书
2015/04/28 职场文书
中秋节作文(五年级)之关于月亮
2019/09/11 职场文书
基于docker安装zabbix的详细教程
2022/06/05 Servers