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简单获取本机计算机名和IP地址的方法
Jun 03 Python
简介Django框架中可使用的各类缓存
Jul 23 Python
利用python求相邻数的方法示例
Aug 18 Python
Python利用正则表达式实现计算器算法思路解析
Apr 25 Python
Python中一些深不见底的“坑”
Jun 12 Python
Python for循环及基础用法详解
Nov 08 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
Mar 10 Python
Django 多对多字段的更新和插入数据实例
Mar 31 Python
python如何实现读取并显示图片(不需要图形界面)
Jul 08 Python
UI自动化定位常用实现方法代码示例
Oct 27 Python
selenium+headless chrome爬虫的实现示例
Jan 08 Python
FP-growth算法发现频繁项集——构建FP树
Jun 24 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 curl的深入解析
2013/06/02 PHP
详解PHP PDO简单教程
2019/05/28 PHP
Smarty模板语法详解
2019/07/20 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
2013/11/12 Javascript
解析jquery中的ajax缓存问题
2013/12/19 Javascript
jQuery中Dom的基本操作小结
2014/01/23 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
2014/02/26 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
JavaScript使用FileReader实现图片上传预览效果
2020/03/27 Javascript
js实现音乐播放控制条
2017/09/09 Javascript
jQuery实现表格隔行换色
2018/09/01 jQuery
Vue通过配置WebSocket并实现群聊功能
2019/12/31 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
JavaScript实现轮播图特效
2020/04/10 Javascript
JS highcharts动态柱状图原理及实现
2020/10/16 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
python爬虫爬取淘宝商品信息
2018/02/23 Python
python对csv文件追加写入列的方法
2019/08/01 Python
pytorch 自定义卷积核进行卷积操作方式
2019/12/30 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
python实例化对象的具体方法
2020/06/17 Python
python中的测试框架
2020/11/13 Python
HTML5实现文件断点续传的方法
2017/01/04 HTML / CSS
澳大利亚在线高跟鞋商店:Shoe Me
2019/11/19 全球购物
2019年Java 最常见的 面试题
2016/10/19 面试题
竞选班长自荐书范文
2014/03/09 职场文书
户籍证明格式
2014/09/15 职场文书
实习协议书
2015/01/27 职场文书
党员个人年度总结
2015/02/14 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书
小爸爸观后感
2015/06/15 职场文书