#!/usr/bin/perl
use strict;
use DBI;
my $dbh = DBI->connect('DBI:mysql:database=ytunes;host=shaolin.wccnet.org',
"rex", "NO");
my %COLUMN_NAMES;
my $sth = $dbh->prepare('show columns from ytunes_mass');
$sth->execute;
while (my ($col) = $sth->fetchrow_array){
$COLUMN_NAMES{$col} = 1;
}
my @insert_keys = keys %COLUMN_NAMES;
my $sth_insert = $dbh->prepare(
"insert into ytunes_mass (" .
join(',', @insert_keys) .
") values (" .
join(',', map { '?' } @insert_keys). ")"
);
my $file = "/Users/rex/Music/iTunes/iTunes Music Library.xml";
die unless ( -r $file );
open (F, $file) or die $!;
my %data_hash;
while (<F>) {
chomp;
next unless (m!<key>([^<]+)</key><(?:string|integer|date)>([^<]+)</(?:string|integer|date)>!);
my ($key, $value) = ($1, $2);
$key = lc($key);
$key =~ s/ /_/g;
if ( $key =~ m/track_id/ ) {
if ( $data_hash{'kind'} =~ m/MPEG/ ) {
insert_into_db(\%data_hash);
}
undef %data_hash;
}
$data_hash{$key} = $value;
}
close F;
sub insert_into_db {
my $hashref = shift;
my %insert_data;
foreach my $k ( @insert_keys ) {
$insert_data{$k} = undef;
}
foreach my $k ( keys %{$hashref} ) {
$insert_data{$k} = $hashref->{$k};
}
# print $hashref->{track_id}, " --\n";
$sth_insert->execute(@insert_data{@insert_keys});
# foreach my $k ( keys %{$hashref} ) {
# print "$k -> ", $hashref->{$k}, $/;
# }
}
syntax highlighted by Code2HTML, v. 0.9.1