DBD::iPod - Connect to an iPod via DBI
use DBI; my $dbh = DBI->connect('dbi:iPod:'); #or explicitly give mount path, /mnt/ipod is the default #my $dbh = DBI->connect('dbi:iPod:/mnt/ipod'); #not mounted at /mnt/ipod ? do this: #my $dbh = DBI->connect('dbi:iPod:/mnt/ipod2'); my $sth = $dbh->prepare("SELECT * FROM iPod"); $sth->execute(); my(%artist,$c,$count); print STDERR "\nGenerating stats from iPod, this may take a few minutes...\n"; while(my $row = $sth->fetchrow_hashref){ $artist{ $row->{artist} }++; $c += $row->{time}; $count++; } my($h,$m,$s,$u) = (0,0,0,0); $c /= 1000; #milliseconds to seconds $cs = $c; $cm = int($c / 60); $cs %= 60; $ch = int($cm / 60); $cm %= 60; $cu = $c % 1; $cs += $cu; $cs = sprintf("%.3f",$cs); $cs = '0'.$cs if $cs < 10; my $hmsu = sprintf('%02d:%02d:%s',$ch,$cm,$cs); print "\n\n". "=======================================\n". " This iPod contains:\n". " Artists: ".scalar(keys(%artist))."\n". " Tracks: ".$count."\n". " Total Play Time: ".$hmsu."\n". "=======================================\n\n";
Connect to the iPod using Mac::iPod::GNUpod and present the iTunes database as a DBD datasource. You query the iPod's iTunesDB database using a subset of SQL. iTunesDB is currently read only, and thus only supports the SQL SELECT statement.
We expect the iPod to be mounted at /mnt/ipod. If you've mounted elsewhere (or have multiple iPodia mounted), use an alternate system path. "SYNOPSIS".
/mnt/ipod
There isn't really a table in the iPod. But we can make it look that way thanks to the wonderful GNUpod project. It might look like this:
Column | Type -------------+-------------- bitrate | kb/s time | milliseonds stoptime | milliseconds songs | ? fdesc | text srate | Hertz rating | integer cdnum | ? cds | ? starttime | milliseconds playcount | integer id | GUID prerating | ? volume | integer songnum | integer path | filepath genre | genre filesize | bytes artist | text album | album name comment | comment title | track name uniq | GUID
Not all SELECT functionality is implemented. Actually, almost none of it is implemented. Here are some examples of what you can do:
SELECT * FROM iPod; SELECT artist,title FROM iPod; SELECT * FROM iPod LIMIT 10,20; SELECT * FROM iPod WHERE artist LIKE 'something%'; SELECT * FROM iPod WHERE artist LIKE 'something else%' OR (bitrate = 1024 AND playcount >= 1);
If you need more SQL functionality, please send me a patch. I'd really like to get DISTINCT(), COUNT(), and GROUP BY working.
Allen Day <allenday@ucla.edu>
Mac::iPod::GNUpod, DBI.
GNUpod - http://www.gnu.org/software/gnupod/
iPodLinux - http://www.ipodlinux.org/index.php/Main_Page
* Add playlist support. Should be implemented in Mac::iPod::GNUpod, it is in the original GNUpod project.
* Add more SELECT clause and function support. Especially "GROUP BY", "DISTINCT()", and "COUNT()".
* Add INSERT and UPDATE support.
* Some fields are missing, e.g. BPM (beats/minute) that are present in the iTunesDB. I've also read at iPodLinux, but not personally observed yet, that track ratings may be borked given what I understand about GNUpod.
GPL
The rest of the documentation details each of the object methods. Internal methods are usually preceded with a '_'. Methods are in alphabetical order for the most part.
Usage : Function: Creates a new driver handle, which will be a singleton. Example : Returns : Args :
To install DBD::iPod, copy and paste the appropriate command in to your terminal.
cpanm
cpanm DBD::iPod
CPAN shell
perl -MCPAN -e shell install DBD::iPod
For more information on module installation, please visit the detailed CPAN module installation guide.