#!/usr/bin/perl
use strict;
use LWP::UserAgent;
my $silent = 0; # set to 1 for no output on stdout
my $logindata = {
'username' => 'fill in your username',
'password' => 'fill in your password',
};
my $loginurl = 'http://snipplr.com/login/';
my $backupurl = 'http://snipplr.com/zipbackup.php';
my $backupdir = '.';
my $ua = LWP::UserAgent->new;
$ua->cookie_jar({ file => "cookies.txt" });
print qq{get cookie from frontpage...} unless $silent;
my $devnull = $ua->get('http://snipplr.com/'); #get cookie
print qq{done.\n} unless $silent;
print qq{login as $$logindata{'username'}...} unless $silent;
my $loginresponse = $ua->post($loginurl, $logindata);
print qq{done.\n} unless $silent;
print qq{exporting snipplr_backup.zip...} unless $silent;
my $backupfile = $ua->get($backupurl);
open (KI, ">$backupdir/snipplr_backup.zip");
binmode KI;
print KI $backupfile->content;
close (KI);
print qq{done.\n} unless $silent;
sub date_mysql2sec {
#takes: date in "yyyy-mm-dd hh:mm:ss" format (with some freedom)
#returns: date in seconds since 1970 format
use Time::Local;# 'timelocal_nocheck';
my $mysqldate = shift;
$mysqldate =~ /(\d{4}).(\d{2}).(\d{2}).(\d{2}).(\d{2}).(\d{2})/;
my ($sec,$min,$hour,$mday,$mon,$year) = ($6,$5,$4,$3,$2,$1);
if ($mon != 0) {$mon--};
return timelocal($sec,$min,$hour,$mday,$mon,$year);
}
sub date_sec2mysql {
#takes: date in seconds since 1970 format
#returns: date in yyyy-mm-dd hh:mm:ss format
my $secdate = shift;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime($secdate);
$year += 1900;
$mon++;
$mon = $mon < 10 ? "0$mon" : $mon;
$mday = $mday < 10 ? "0$mday" : $mday;
$sec = $sec < 10 ? "0$sec" : $sec;
$min = $min < 10 ? "0$min" : $min;
$hour = $hour < 10 ? "0$hour" : $hour;
return qq{$year-$mon-$mday $hour:$min:$sec};
}
sub date_mysql_now {
#Takes: nothing
#Returns: current date and time in yyyy-mm-dd hh:mm:ss format
return date_sec2mysql(time);
}
sub db_connect {
my ($dbname, $dbuser, $dbpass) = @_;
my $dbh = DBI->connect("DBI:mysql:$dbname",$dbuser,$dbpass);
#$dbh->do(qq{set character set 'utf8';});
return $dbh;
}
sub do_sql {
# Takes: $dbh, $sql
# Returns: status
my $dbh = shift || die "Database not connected!\n";
my $sql = shift || die "Missing SQL statement???\n";
return $dbh->do($sql);
}
sub execute_sql {
# Takes: $dbh, $sql
# Returns: $result_arrayref
my $dbh = shift || die "Database not connected!\n";
my $sql = shift || die "Missing SQL statement???\n";
my $sth = $dbh->prepare($sql);
$sth->execute;
my $result = $sth->fetchall_arrayref({}); # {} => Return arrayref of hashrefs
return $result;
}
sub do_insert {
#takes: $dbh, $table, $datahash
#returns: status
my $dbh = shift || die "Database not connected!\n";
my $table = shift || die "Missing table!\n";
my $datahash = shift || die "Nothing to insert!\n";
my $insert = "INSERT INTO $table (" . join(',', keys %$datahash) . ') VALUES (' . join(',', values %$datahash) . ');';
return &do_sql($dbh, $insert);
}