среда, 19 ноября 2008 г.

FireFox 3 + wget

Как многие знают в третьем firefox куки хранятся в виде базы данных sqlite, а wget при подключении куков через --load-cookies хочет видеть старый формат. Поискав в гугле легко найти решение в виде расширения к firefox'у (показавшихся мне крайне неудобными) или скрипт на питоне. Добавим к этим веам еще скрипт на перле, который не использует никаких модулей.


#!/usr/bin/perl

$substr = $ARGV[0]; # Часть имени сайта
$db = `find ~/.mozilla/ -iname cookies.sqlite`; # Получаем имя базы данных
chop $db;
$contents = "host, path, isSecure, expiry, name, value";
$ask = 'sqlite3 -list '.$db.' '."'".'SELECT '.$contents.
' FROM moz_cookies WHERE host LIKE "%'.$substr.'%"'."'";
@answer = `$ask`; # И вытаскиваем из него нужную инфу

for(@answer)
{
@str = split /\|/, $_;
print $str[0], "\t", ($str[0] =~ /^./ ? "TRUE" : "FALSE"),
"\t", $str[1], "\t", ($str[2] ? "TRUE" : "FALSE"),
"\t", $str[3], "\t", $str[4], "\t", $str[5], "\n";
}


И скрипт на баше:


#!/bin/sh

name=USERNAME
profile=PROFILE

for f in `sqlite3 -separator '|' -list /home/$name/.mozilla/firefox/$profile/cookies.sqlite \
"SELECT host, path, isSecure, expiry, name, value
FROM moz_cookies WHERE host LIKE '%$1%'"`
do
echo $f | sed 's/^\(\.[^|]*\)|\([^|]*\)|0|\([^|]*\)|\([^|]*\)|\(.*\)$/\1\tTRUE\t\2\tFALSE\t\3\t\4\t\5/;
s/^\(\.[^|]*\)|\([^|]*\)|[^|]*|\([^|]*\)|\([^|]*\)|\(.*\)$/\1\tTRUE\t\2\tTRUE\t\3\t\4\t\5/;
s/^\([^|]*\)|\([^|]*\)|0|\([^|]*\)|\([^|]*\)|\(.*\)$/\1\tFALSE\t\2\tFALSE\t\3\t\4\t\5/;
s/^\([^|]*\)|\([^|]*\)|[^|]*|\([^|]*\)|\([^|]*\)|\(.*\)$/\1\tFALSE\t\2\tTRUE\t\3\t\4\t\5/;'
done