Преобразование полей даты и времени в хронологическом файле Chrome (sqlite) в читаемый формат
Работа над скриптом для сбора истории браузера пользователей с отметками времени (образовательная установка). История Firefox 3 хранится в файле sqlite, а штампы находятся в эпоху UNIX … получение их и преобразование в читаемый формат с помощью команды SQL в python довольно просто:
sql_select = """ SELECT datetime(moz_historyvisits.visit_date/1000000,'unixepoch','localtime'), moz_places.url FROM moz_places, moz_historyvisits WHERE moz_places.id = moz_historyvisits.place_id """ get_hist = list(cursor.execute (sql_select))
Chrome также хранит историю в файле sqlite .. но это временная метка истории, по-видимому, отформатирована как количество микросекунд с полуночи UTC от 1 января 1601 года ….
Как эта временная метка может быть преобразована в читаемый формат, как в примере Firefox (например, 2010-01-23 11:22:09) ? Я пишу скрипт с python 2.5.x (версия на OS X 10.5) и импортирую модуль sqlite3 ….
- Python / Django MySQL Обработка времени и времени
- Python – конвертировать время в другой часовой пояс с am / pm
- Можно ли сравнить две строки изотопного времени?
- Преобразование массива numpy в список дат
- Каков стандартный способ добавления N секунд в datetime.time в Python?
Попробуй это:
sql_select = """ SELECT datetime(last_visit_time/1000000-11644473600,'unixepoch','localtime'), url FROM urls ORDER BY last_visit_time DESC """ get_hist = list(cursor.execute (sql_select))
Или что-то вдоль этих линий
кажется, работает для меня.
Это более питонический и удобный для памяти способ делать то, что вы описали (кстати, спасибо за исходный код!):
#!/usr/bin/env python import os import datetime import sqlite3 import opster from itertools import izip SQL_TIME = 'SELECT time FROM info' SQL_URL = 'SELECT c0url FROM pages_content' def date_from_webkit(webkit_timestamp): epoch_start = datetime.datetime(1601,1,1) delta = datetime.timedelta(microseconds=int(webkit_timestamp)) return epoch_start + delta @opster.command() def import_history(*paths): for path in paths: assert os.path.exists(path) c = sqlite3.connect(path) times = (row[0] for row in c.execute(SQL_TIME)) urls = (row[0] for row in c.execute(SQL_URL)) for timestamp, url in izip(times, urls): date_time = date_from_webkit(timestamp) print date_time, url c.close() if __name__=='__main__': opster.dispatch()
Сценарий можно использовать следующим образом:
$ ./chrome-tools.py import-history ~/.config/chromium/Default/History* > history.txt
Конечно, Opster можно выбросить, но мне кажется удобным 🙂
Модуль sqlite
возвращает объекты datetime
для полей datetime, которые имеют метод форматирования для печати читаемых строк, называемых strftime
.
Вы можете сделать что-то подобное, если у вас есть набор записей:
for record in get_hist: date_string = record[0].strftime("%Y-%m-%d %H:%M:%S") url = record[1]
Это может быть не самый пифонический код в мире, но вот решение: обмануто, настраивая для часового пояса (EST здесь), делая это:
utctime = datetime.datetime(1601,1,1) + datetime.timedelta(microseconds = ms, hours =-5)
Вот эта функция: предполагается, что файл истории Chrome был скопирован из другой учетной записи в / Users / someuser / Documents / tmp / Chrome / History
def getcr(): connection = sqlite3.connect('/Users/someuser/Documents/tmp/Chrome/History') cursor = connection.cursor() get_time = list(cursor.execute("""SELECT last_visit_time FROM urls""")) get_url = list(cursor.execute("""SELECT url from urls""")) stripped_time = [] crf = open ('/Users/someuser/Documents/tmp/cr/cr_hist.txt','w' ) itr = iter(get_time) itr2 = iter(get_url) while True: try: newdate = str(itr.next()) stripped1 = newdate.strip(' (),L') ms = int(stripped1) utctime = datetime.datetime(1601,1,1) + datetime.timedelta(microseconds = ms, hours =-5) stripped_time.append(str(utctime)) newurl = str(itr2.next()) stripped_url = newurl.strip(' ()') stripped_time.append(str(stripped_url)) crf.write('\n') crf.write(str(utctime)) crf.write('\n') crf.write(str(newurl)) crf.write('\n') crf.write('\n') crf.write('********* Next Entry *********') crf.write('\n') except StopIteration: break crf.close() shutil.copy('/Users/someuser/Documents/tmp/cr/cr_hist.txt' , '/Users/parent/Documents/Chrome_History_Logs') os.rename('/Users/someuser/Documents/Chrome_History_Logs/cr_hist.txt','/Users/someuser/Documents/Chrome_History_Logs/%s.txt' % formatdate)
- Выполнить скрипт оболочки из python с переменной
- Как unimport модуль python, который уже импортирован?
- Почему Django не возвращает поле datetime из базы данных?
- Фильтрация даты на оси x с помощью matplotlib Python
- Python: конвертировать «дни с 1990 года» в объект datetime
- Ошибка загрузки python numpy loadtxt с датой
- Подмножество с использованием MultiIndex со временем
- Как преобразовать стандартную строку timedelta в объект timedelta
- сравнение datetime python с mysql datetime
- Каков наилучший способ вставить дату и время python в rethinkdb?
- Более быстрый способ группового времени суток в пандах