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实现360的字符显示界面
Feb 21 Python
深入理解Python 代码优化详解
Oct 27 Python
老生常谈进程线程协程那些事儿
Jul 24 Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
Nov 14 Python
python实现一组典型数据格式转换
Dec 15 Python
Python3实现定时任务的四种方式
Jun 03 Python
Python企业编码生成系统总体系统设计概述
Jul 26 Python
python自动点赞功能的实现思路
Feb 26 Python
解决pytorch读取自制数据集出现过的问题
May 31 Python
基于Python实现将列表数据生成折线图
Mar 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
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
php替换超长文本中的特殊字符的函数代码
2012/05/22 PHP
PHP输出时间差函数代码
2013/01/28 PHP
php程序内部post数据的方法
2015/03/31 PHP
php判断是否为ajax请求的方法
2016/11/29 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
js读取本地excel文档数据的代码
2010/11/11 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
javaScript知识点总结(必看篇)
2016/06/10 Javascript
js与applet相互调用的方法
2016/06/22 Javascript
JS获取随机数和时间转换的简单实例
2016/07/10 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
2016/07/12 Javascript
js手机号批量滚动抽奖实现代码
2020/04/17 Javascript
javascript定时器取消定时器及优化方法
2017/07/08 Javascript
Parcel 打包示例(React HelloWorld)
2018/01/16 Javascript
vue使用$emit时,父组件无法监听到子组件的事件实例
2018/02/26 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
[05:01]3.19DOTA2发布会 我们都是刀塔人
2014/03/25 DOTA
[01:13]2015国际邀请赛线下观战现场
2015/08/08 DOTA
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
Python运算符重载详解及实例代码
2017/03/07 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
2020/03/16 Python
Python使用扩展库pywin32实现批量文档打印实例
2020/04/09 Python
Python hashlib模块的使用示例
2020/10/09 Python
Overload和Override的区别
2012/09/02 面试题
公务员培训自我鉴定
2013/09/19 职场文书
平面网站制作专科生的自我评价分享
2013/12/11 职场文书
2014年3.15团委活动总结
2014/03/16 职场文书
文明生主要事迹
2014/05/25 职场文书
教师暑期培训感言
2014/08/15 职场文书
“三支一扶”支教教师思想汇报
2014/09/13 职场文书
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技