Initial commit 0.000_001
authorMarius Gavrilescu <marius@ieval.ro>
Sat, 14 Jun 2014 23:34:40 +0000 (02:34 +0300)
committerMarius Gavrilescu <marius@ieval.ro>
Sat, 14 Jun 2014 23:34:49 +0000 (02:34 +0300)
Changes [new file with mode: 0644]
MANIFEST [new file with mode: 0644]
Makefile.PL [new file with mode: 0644]
README [new file with mode: 0644]
lib/WWW/BackpackTF.pm [new file with mode: 0644]
lib/WWW/BackpackTF/User.pm [new file with mode: 0644]
t/WWW-BackpackTF.t [new file with mode: 0644]

diff --git a/Changes b/Changes
new file mode 100644 (file)
index 0000000..938b56b
--- /dev/null
+++ b/Changes
@@ -0,0 +1,4 @@
+Revision history for Perl extension WWW::BackpackTF.
+
+0.000_001 2014-06-15T02:35+03:00
+ - Initial release
diff --git a/MANIFEST b/MANIFEST
new file mode 100644 (file)
index 0000000..0ec317e
--- /dev/null
+++ b/MANIFEST
@@ -0,0 +1,7 @@
+Changes
+lib/WWW/BackpackTF.pm
+lib/WWW/BackpackTF/User.pm
+Makefile.PL
+MANIFEST
+README
+t/WWW-BackpackTF.t
diff --git a/Makefile.PL b/Makefile.PL
new file mode 100644 (file)
index 0000000..fa272f3
--- /dev/null
@@ -0,0 +1,22 @@
+use 5.014000;
+use ExtUtils::MakeMaker;
+
+WriteMakefile(
+       NAME              => 'WWW::BackpackTF',
+       VERSION_FROM      => 'lib/WWW/BackpackTF.pm',
+       ABSTRACT_FROM     => 'lib/WWW/BackpackTF.pm',
+       AUTHOR            => 'Marius Gavrilescu <marius@ieval.ro>',
+       MIN_PERL_VERSION  => '5.14.0',
+       LICENSE           => 'perl',
+       SIGN              => 1,
+       PREREQ_PM         => {
+               qw/JSON 0
+                  LWP::Simple 0/,
+       },
+       META_MERGE        => {
+               dynamic_config => 0,
+               resources      => {
+                       repository => 'https://git.ieval.ro/?p=www-backpacktf.git',
+               }
+       }
+);
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..ae4459d
--- /dev/null
+++ b/README
@@ -0,0 +1,32 @@
+WWW-BackpackTF version 0.000_001
+================================
+
+WWW-BackpackTF is an interface to the backpack.tf Team Fortress 2 and Dota 2 trading service.
+
+It wraps the API described at http://backpack.tf/api.
+
+INSTALLATION
+
+To install this module type the following:
+
+   perl Makefile.PL
+   make
+   make test
+   make install
+
+DEPENDENCIES
+
+This module requires these other modules and libraries:
+
+* JSON
+* LWP
+
+COPYRIGHT AND LICENCE
+
+Copyright (C) 2014 by Marius Gavrilescu
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself, either Perl version 5.18.2 or,
+at your option, any later version of Perl 5 you may have available.
+
+
diff --git a/lib/WWW/BackpackTF.pm b/lib/WWW/BackpackTF.pm
new file mode 100644 (file)
index 0000000..49e6b3a
--- /dev/null
@@ -0,0 +1,100 @@
+package WWW::BackpackTF;
+
+use 5.014000;
+use strict;
+use warnings;
+use parent qw/Exporter/;
+our $VERSION = '0.000_001';
+our @EXPORT_OK = qw/TF2 DOTA2/;
+
+use constant TF2 => 440;
+use constant DOTA2 => 570;
+
+use JSON qw/decode_json/;
+use LWP::Simple qw/get/;
+use WWW::BackpackTF::User;
+
+sub new{
+       my ($class, $key) = @_;
+       bless {key => $key}, $class
+}
+
+sub get_users{
+       my ($self, @users) = @_;
+       my $response = decode_json get "http://backpack.tf/api/IGetUsers/v3/?compress=1&format=json&steamids=" . join ',', @users;
+       $response = $response->{response};
+       die $response->{message} unless $response->{success};
+       @users = map { WWW::BackpackTF::User->new($_) } values $response->{players};
+       wantarray ? @users : $users[0]
+}
+
+1;
+__END__
+
+=head1 NAME
+
+WWW::BackpackTF - interface to the backpack.tf trading service
+
+=head1 SYNOPSIS
+
+  use WWW::BackpackTF;
+  my $api_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
+  my $user_id = <STDIN>;
+  my $bp = WWW::BackpackTF->new($api_key);
+  my $user = $bp->get_users($user_id);
+  print 'This user is named ', $user->name, ' and has ', $user->notifications, ' unread notification(s)';
+
+=head1 DESCRIPTION
+
+WWW::BackpackTF is an interface to the backpack.tf Team Fortress 2/Dota 2 trading service.
+
+The only call implemented so far is I<IGetUsers>.
+
+=head2 METHODS
+
+=over
+
+=item B<new>(I<[$api_key]>)
+
+Create a new WWW::BackpackTF object. Takes a single optional parameter, the API key.
+
+=item B<get_users>(I<@users>)
+
+Get profile information for a list of users. Takes any number of 64-bit Steam IDs as arguments and returns a list of WWW::BackpackTF::User objects. This method does not require an API key.
+
+=back
+
+=head2 EXPORTS
+
+None by default.
+
+=over
+
+=item B<TF2>
+
+Constant (440) representing Team Fortress 2.
+
+=item B<DOTA2>
+
+Constant (570) representing Dota 2.
+
+=back
+
+=head1 SEE ALSO
+
+L<http://backpack.tf/>, L<http://backpack.tf/api>
+
+=head1 AUTHOR
+
+Marius Gavrilescu, E<lt>marius@ieval.roE<gt>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2014 by Marius Gavrilescu
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself, either Perl version 5.18.2 or,
+at your option, any later version of Perl 5 you may have available.
+
+
+=cut
diff --git a/lib/WWW/BackpackTF/User.pm b/lib/WWW/BackpackTF/User.pm
new file mode 100644 (file)
index 0000000..6120ba4
--- /dev/null
@@ -0,0 +1,147 @@
+package WWW::BackpackTF::User;
+
+use 5.014000;
+use strict;
+use warnings;
+our $VERSION = '0.000_001';
+
+sub new{
+       my ($class, $content) = @_;
+       bless $content, $class
+}
+
+sub steamid          { shift->{steamid} }
+sub name             { shift->{name} }
+sub reputation       { shift->{backpack_tf_reputation} }
+sub group            { shift->{backpack_tf_group} }
+sub positive         { shift->{backpack_tf_trust}->{for} // 0 }
+sub negative         { shift->{backpack_tf_trust}->{against} // 0 }
+sub scammer          { shift->{steamrep_scammer} }
+sub banned_backpack  { shift->{backpack_tf_banned} }
+sub banned_economy   { shift->{ban_economy} }
+sub banned_community { shift->{ban_community} }
+sub banned_vac       { shift->{ban_vac} }
+sub notifications    { shift->{notifications} }
+sub value            { shift->{backpack_value}->{shift // WWW::BackpackTF::TF2} }
+sub update           { shift->{backpack_update}->{shift // WWW::BackpackTF::TF2} }
+
+sub banned {
+       my ($self) = @_;
+       $self->banned_backpack || $self->banned_community || $self->banned_economy || $self->banned_vac
+}
+
+1;
+__END__
+
+=encoding utf-8
+
+=head1 NAME
+
+WWW::BackpackTF::User - Class representing user profile information
+
+=head1 SYNOPSIS
+
+  my $user = $bp->get_users($user_id);
+  say 'Steam ID: ',                             $user->steamid;
+  say 'Name: ',                                 $user->name;
+  say 'Reputation: ',                           $user->reputation;
+  say 'Part of backpack.tf Steam Group: ',     ($user->group ? 'YES' : 'NO');
+  say 'Positive trust ratings: ',               $user->positive;
+  say 'Negative trust ratings: ',               $user->negative;
+  say 'Scammer (according to steamrep.com): ', ($user->scammer ? 'YES' : 'NO');
+  say 'Banned from backpack.tf: ',             ($user->banned_backpack ? 'YES' : 'NO');
+  say 'Economy banned: ',                      ($user->banned_economy ? 'YES' : 'NO');
+  say 'Community banned: ',                    ($user->banned_community ? 'YES' : 'NO');
+  say 'VAC banned: ',                          ($user->banned_vac ? 'YES' : 'NO');
+  say 'Banned on any of the previous: ',       ($user->banned ? 'YES' : 'NO');
+  say 'Unread notifications: ',                 $user->notifications;
+  say 'Value of TF2 backpack: ',                $user->value(WWW::BackpackTF::TF2);
+  say 'Value of Dota 2 backpack: ',             $user->value(WWW::BackpackTF::DOTA2);
+  say 'Last TF2 backpack update: ',             $user->update(WWW::BackpackTF::TF2);
+  say 'Last Dota 2 backpack update: ',          $user->update(WWW::BackpackTF::DOTA2);
+
+
+=head1 DESCRIPTION
+
+WWW::BackpackTF::User is a class representing user profile information.
+
+=head2 METHODS
+
+=over
+
+=item B<steamid>
+
+Returns this user's Steam ID.
+
+=item B<name>
+
+Returns this user's persona name.
+
+=item B<reputation>
+
+Returns this user's backpack.tf reputation.
+
+=item B<group>
+
+Returns true if this user is part of the backpack.tf Steam group.
+
+=item B<positive>
+
+Returns the number of positive trust ratings this user has.
+
+=item B<negative>
+
+Returns the number of negative trust ratings this user has.
+
+=item B<scammer>
+
+Returns true if this user is a scammer according to L<http://steamrep.com/>
+
+=item B<banned_backpack>
+
+Returns true if this user is banned from backpack.tf.
+
+=item B<banned_economy>
+
+Returns true if this user is economy banned.
+
+=item B<banned_community>
+
+Returns true if this user is community banned.
+
+=item B<banned_vac>
+
+Returns true if this user is banned by Valve Anti-Cheat.
+
+=item B<banned>
+
+Returns true if any of the B<banned_*> methods returns true.
+
+=item B<notifications>
+
+Returns the number of unread notifications this user has.
+
+=item B<value>([I<game>])
+
+Returns the total value of this user's backpack for the specified game, in the lowest currency. I<game> defaults to C<WWW::BackpackTF::TF2>.
+
+=item B<update>([I<game>])
+
+Returns the UNIX timestamp of this user's last backpack update for the specified game. I<game> defaults to C<WWW::BackpackTF::TF2>
+
+=back
+
+=head1 AUTHOR
+
+Marius Gavrilescu, E<lt>marius@ieval.roE<gt>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2014 by Marius Gavrilescu
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself, either Perl version 5.18.2 or,
+at your option, any later version of Perl 5 you may have available.
+
+
+=cut
diff --git a/t/WWW-BackpackTF.t b/t/WWW-BackpackTF.t
new file mode 100644 (file)
index 0000000..43e4bf1
--- /dev/null
@@ -0,0 +1,6 @@
+#!/usr/bin/perl -w
+use strict;
+use warnings;
+
+use Test::More tests => 1;
+BEGIN { use_ok('WWW::BackpackTF') };
This page took 0.017579 seconds and 4 git commands to generate.