#!/usr/bin/env perl
use strict;
use warnings;
#################
# CONFIGURATION #
#################
my $user = 'username';
my $passwd = 'password';
my $siteid = '10101010';
my $cookiejar = "$ENV{HOME}/.makebnlinks";
my $template =<<'-EOT-';
<p align="center">
<img src="http://service.bfast.com/bfast/serve?bfmid=<!-- TMPL_VAR NAM
+E="rep_firm_id_in" -->&sourceid=<!-- TMPL_VAR NAME="site_id_in" -->&b
+fpid=<!-- TMPL_VAR NAME="product_field_key_in" -->&bfmtype=<!-- TMPL_
+VAR NAME="mtype_in" -->" border="0" width="1" height="1" nosave="1" /
+>
<a href="http://service.bfast.com/bfast/click?bfmid=<!-- TMPL_VAR NAME
+="rep_firm_id_in" -->&sourceid=<!-- TMPL_VAR NAME="site_id_in" -->&bf
+pid=<!-- TMPL_VAR NAME="product_field_key_in" -->&bfmtype=<!-- TMPL_V
+AR NAME="mtype_in" -->" target="_top">
<img src="<!-- TMPL_VAR NAME="product_image_url_in" -->" border="0" al
+ign="center" alt="<!-- TMPL_VAR NAME="product_name_in" -->" /><br />
<!-- TMPL_VAR NAME="product_name_in" --></a>
</p>
-EOT-
#### NO NEED TO EDIT ANYTHING BELOW THIS LINE ####
use Getopt::Long;
use HTML::Template;
use LWP::UserAgent;
use Pod::Usage;
my $merchantid = '2181';
my $loginurl = 'http://bn.reporting.net/networks/affiliates/bf_login';
my $makelinkurl = 'http://bn.reporting.net/product/search/XmlProdSearc
+hServlet';
my $help = 0;
my $isbn = '';
Getopt::Long::Configure('gnu_getopt');
GetOptions (
'isbn=s' => \$isbn,
'help|h|?' => \$help,
) or pod2usage(-exitstatus => 2, -verbose => 1);
pod2usage(-exitstatus => 0, -verbose => 2) if $help;
die "Must specify ISBN!\n" unless $isbn;
my $params = getlink($isbn);
my $output = HTML::Template->new_scalar_ref(\$template, die_on_bad_par
+ams => 0);
$output->param($params);
print $output->output, "\n";
sub getlink
{
my ($isbn) = @_ or die;
my $ua = LWP::UserAgent->new();
push @{$ua->requests_redirectable}, 'POST';
$ua->cookie_jar({file => $cookiejar, autosave => 1, ignore_discard =
+> 1});
# simulate a login...
my $res = $ua->post($loginurl,
{
merchant_in => $merchantid,
username_in => $user,
password_in => $passwd,
});
#...and get a cookie. We don't need to check the status code.
$res = $ua->post($res->request->uri);
# Get the link
$res = $ua->post($makelinkurl,
{ tag_type_in => 'PRODUCT',
rep_firm_id_in => $merchantid,
merchandise_type_id_in => '102',
site_id_in => $siteid,
product_field_key_in => $isbn,
});
if ($res->is_success)
{
my %params;
my @params = split /&/, $res->request->uri;
foreach my $param (@params)
{
my($key, $value) = split /=/, $param;
$value =~ s/\+/ /g;
$params{$key} = $value unless $key =~ /^http/;
# unescape any URI escape sequences. turn off annoying warnings
+.
no warnings;
$params{$key} =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
use warnings;
}
return \%params;
}
# something must have gone wrong. Display LWPs' error message
die 'Uh-oh!: ' . $res->request->uri . ' - ' . $res->status_line . "
+\n";
}
__END__
=pod
=head1 NAME
makebnlinks -- Allow Affiliates to Create Links to Barnes & Noble Merc
+handise
=head1 SYNOPSIS
B<makebnlinks> B<--isbn=>I<isbn> B<[-?|-h]>
=head1 DESCRIPTION
Given a books' ISBN or number, this script will make a link into the
Barnes & Noble website (L<http://www.barnesandnoble.com>) with your
affiliate information. Then if anyone clicks on the link and buys the
+ book,
you will get credit. This is a replacement for the web form Barnes &
+Noble
have for making links.
=head1 OPTIONS
=over 4
=item B<--isbn>
The ISBN number of the book you wish to make a link for. This option
+is
required.
=item B<--help>, B<-h>, B<-?>
Display this help text.
=head1 INSTALLATION
Make the script executable. You will also need the B<LWP> and
B<HTML::Template> packages from CPAN.
=head1 CONFIGURATION
There are five values you can change in the configuration section at t
+he
top of the script:
=over 4
=item I<$user>
Your Barnes & Noble affiliate user ID.
=item I<$passwd>
Your Barnes & Noble affiliate password.
=item I<$siteid>
Your Barnes & Noble affiliate site id. If you don't know it, you can
+find
out your site id by logging into the affiliate site. The address bar
+of your
browser should display a url with a bit that says I<merchant_in=2181|>
+ and
then some numbers. Those numbers are the site id.
=item I<$cookiejar>
Where you want B<makebnlinks> to store the cookie the website sends.
+You need
the cookie in order to create links without getting a "bad login" erro
+r.
=item I<$template>
A string containing the template for generating output. It is fed
through B<HTML::Template> (See L<HTML::Template>.)
=back
=head2 The Template
The template can contain any text you want but typically it will be HT
+ML for
creating a link to a particular book. Certain variables can be interp
+olated
into the template using B<HTML::Template> syntax. These variables are
+:
=over 4
=item I<merchandise_type_id_in>
Will always be 102 indicating the merchandise is a book.
=item I<product_image_url_in>
A URL to a small image of the books' cover.
=item I<mtype_in>
Will always be 'Book'.
=item I<product_desc_1_in>
=item I<product_desc_2_in>
The first and second lines of the product description. One or both va
+lues may
be empty.
=item I<site_id_in>
Your affiliate site id.
=item I<rep_firm_id_in>
The value 2181 (Barnes & Nobles' firm id.)
=item I<product_name_in>
The title (and possibly subtitle) of the book.
=item I<product_field_key_in>
The ISBN number of the book.
=item I<xml_api_ind>
Probably the link-producing XML APIs' version number. Always 1.
=back
=head1 BUGS
The only type of merchandise supported so far is books.
=head1 AUTHOR
Jaldhar H. Vyas E<lt>jaldhar@braincells.comE<gt>
=head1 LICENSE
This code is free software under the Crowley Public License ("Do what
thou wilt shall be the whole of the license")
=head1 SEE ALSO
L<HTML::Template>, L<http://bn.reporting.net>, L<http://www.barnesandn
+oble.com>
=head1 VERSION
1.0 -- Jul 22, 2003
=cut
|