Итак, мы обработали клиентский запрос и в результате получили несколько переменных с интересующей нас информацией.
Удобно записать эти переменные в какой-нибудь файл, который затем легко можно будет обработать, например в csv. Далее его нужно заархивировать для уменьшения траффика и передать по FTP на наш локальный SQL сервер для последующей обработки. Для записи строки в csv файл добавляем: csv.write('%s;%s;%s;%s;%s;%s;%s;%s;%s;%s\n' % (ip, host, date, time, request, status, bytes, referer, browser, country))
(подразумевается, что csv-файловый объект, открытый на запись)
Для копирования файла по протоколу FTP используем модуль ftplib. Так как объем данных может быть очень большим, заархивируем файл:
import os
command = 'bzip2 -z log.csv'
os.system(command)
Затем создаем соединение с FTP сервером и передаем файл:
ftp = FTP('ftp.myhost.ru', 'oartemov', 'secret')
ftp.set_pasv(1)
ftp.cwd('/export')
ftp_command = 'STOR log.csv.bz2'
ftp.storbinary(ftp_command, open('log.csv.bz2'))
ftp.quit()
Удаляем ненужный архив:
os.unlink('log.csv.bz2')
В примере описывается достаточно экзотический случай, когда FTP сервер находится внутри локальной сети, а веб-сервер, стоящий у провайдера, выступает в роли клиента. Обычно же FTP сервер установлен на том же компьютере, что и веб-сервер, поэтому скрипт необходимо запускать с компьютера, находящегося в локальной сети и вместо метода storbinary() использовать retrbinary(). Можно код, ответственный за получение данных по FTP, разместить вначале скрипта, помещающего данные в СУБД.