Koha/misc/amazonratings/get_ratings.pl

70 lines
2.1 KiB
Perl
Executable file

#!/usr/bin/perl
# get_ratings.pl
#
# A script to fetch the ratings of a given title, using the isbn number
# Initially just books, but ill expand to handle dvd's and cd's as well
# uses a new table, ratings, pipe the ratings.sql script into mysql to create the table.
use warnings;
use strict;
use HTTP::Cookies;
use LWP::UserAgent;
use C4::Context;
my $dbh = C4::Context->dbh();
my $query =
"SELECT isbn,biblioitemnumber,biblionumber FROM biblioitems where isbn is NOT NULL and isbn <> ''
group by isbn";
my $sth = $dbh->prepare($query);
$sth->execute();
while ( my $data = $sth->fetchrow_hashref() ) {
$data->{'isbn'} =~ s/\-//g;
$data->{'isbn'} =~ s/ +//g;
# append isbn
# isbn must appear without spaces or -
my $url = "http://www.amazon.com/exec/obidos/search-handle-url/index%3Dbooks%26field-isbn%3D";
$url .= $data->{'isbn'};
my $ua = LWP::UserAgent->new;
my $content = $ua->get($url)->content;
#print $content;
my $rating;
if ( $content =~ /alt="(.*?) out of 5 stars"/ ) {
$rating = $1;
}
if ($rating) {
# first check we dont already have a rating, if so, and its different update it
# otherwise insert a new rating
my $query2 = "SELECT * FROM ratings WHERE biblioitemnumber=?";
my $sth2 = $dbh->prepare($query2);
$sth2->execute( $data->{'biblioitemnumber'} );
if ( my $ratings = $sth2->fetchrow_hashref() ) {
if ( $rating ne $ratings->{'rating'} ) {
my $query3 =
"UPDATE ratings SET rating=? WHERE biblioitemnumber=?";
my $sth3 = $dbh->prepare($query3);
$sth3->execute( $rating, $data->{'biblioitemnumber'} );
$sth3->finish();
}
}
else {
my $query3 =
"INSERT INTO ratings (rating,biblioitemnumber,biblionumber) VALUES (?,?,?)";
my $sth3 = $dbh->prepare($query3);
$sth3->execute(
$rating, $data->{'biblioitemnumber'},
$data->{'biblionumber'}
);
$sth3->finish();
}
$sth2->finish();
}
}