70 lines
2.1 KiB
Perl
Executable file
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();
|
|
|
|
}
|
|
}
|