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编程pygame模块实现移动的小车示例代码
Jan 03 Python
查看Django和flask版本的方法
May 14 Python
解决pycharm界面不能显示中文的问题
May 23 Python
python编程使用协程并发的优缺点
Sep 20 Python
Django2.1.3 中间件使用详解
Nov 26 Python
将pip源更换到国内镜像的详细步骤
Apr 07 Python
python循环输出三角形图案的例子
Nov 22 Python
django框架两个使用模板实例
Dec 11 Python
浅析Python 序列化与反序列化
Aug 05 Python
Python创建简单的神经网络实例讲解
Jan 04 Python
手把手教你用Django执行原生SQL的方法
Feb 18 Python
python munch库的使用解析
May 25 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
在PWS上安装PHP4.0正式版
2006/10/09 PHP
使用Xdebug调试和优化PHP程序之[1]
2007/04/17 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
php实现断点续传大文件示例代码
2020/06/19 PHP
js获取当月最后一天实例代码
2013/11/19 Javascript
javascript模拟枚举的简单实例
2014/03/06 Javascript
jquery form 隐藏的input 选择
2014/04/29 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
2015/03/24 Javascript
javascript常用的方法分享
2015/07/01 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
jQuery EasyUI开发技巧总结
2017/09/26 jQuery
解决vue中无法动态修改jqgrid组件 url地址的问题
2018/03/01 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
vue使用pdfjs显示PDF可复制的实现方法
2018/12/14 Javascript
微信小程序生成二维码的示例代码
2019/03/29 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
python实现将pvr格式转换成pvr.ccz的方法
2015/04/28 Python
使用Python脚本将Bing的每日图片作为桌面的教程
2015/05/04 Python
python处理按钮消息的实例详解
2017/07/11 Python
python机器学习之神经网络(三)
2017/12/20 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
解决python "No module named pip" 的问题
2018/10/13 Python
python计算两个矩形框重合百分比的实例
2018/11/07 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
猫咪家具:CatsPlay
2018/11/03 全球购物
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
求职简历推荐信范文
2013/12/02 职场文书
环保建议书600字
2014/05/14 职场文书
2015元旦联欢晚会结束语
2014/12/14 职场文书
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技