PageRenderTime 52ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/examples/direct_spore_anonymous.pl

https://bitbucket.org/Mekk/perl-webservice_bitbucket
Perl | 93 lines | 67 code | 13 blank | 13 comment | 7 complexity | 477f42e1c1e754cb20278dc43bd8e495 MD5 | raw file
  1. #!/usr/bin/perl -w
  2. #
  3. # Example directly using spore specs. No auth.
  4. #
  5. use strict;
  6. use warnings;
  7. use feature ('say');
  8. use Net::HTTP::Spore;
  9. use Try::Tiny;
  10. use Data::Dumper;
  11. my $USER = 'Mekk';
  12. sub display_repos_reply {
  13. my $repos = shift;
  14. # print Dumper($repos);
  15. say "next:", $repos->{next} if $repos->{next};
  16. say "size:", $repos->{size};
  17. say "page:", $repos->{page};
  18. foreach my $val (@{$repos->{values}}) {
  19. say "Repo ", $val->{name}, "(scm: $val->{scm}, language: $val->{language}, owner: $val->{owner}->{username}, size: $val->{size}, private: $val->{is_private})";
  20. # say Dumper($val->{owner}); username, uuid, display_name, links
  21. # description
  22. # has_wiki, has_issues, fork_policy
  23. # updated_on, created_on
  24. say " full_name: ", $val->{full_name};
  25. say " fork_parent: ", $val->{parent} if $val->{parent};
  26. print " clone: "; #, Dumper($val->{links}->{clone});
  27. foreach my $link (@{$val->{links}->{clone}}) {
  28. print "[$link->{name}] $link->{href} ";
  29. }
  30. print "\n";
  31. }
  32. }
  33. try {
  34. my $client = Net::HTTP::Spore->new_from_spec(
  35. '../share/bitbucket-spore.json',
  36. # trace=>1, # Or SPORE_TRACE=1 in environment
  37. );
  38. $client->enable('Format::JSON');
  39. $client->enable('Redirection', max_redirect => 3);
  40. # $client->api_useragent->max_redirect(5);
  41. # $client->enable('UserAgent', useragent => 'Mozilla/5.0 (X11; Linux x86_64; rv:2.0b4) Gecko/20100818 Firefox/4.0b4');
  42. $client->enable(sub {
  43. my $self = shift;
  44. my $request = shift;
  45. # say "Issuing request ", ref($request);
  46. say "* Issuing request to: ", $request->uri;
  47. $self->response_cb(sub {
  48. my $res = shift;
  49. say "* Obtained response, status: ", $res->status, ", content type: ", $res->content_type, ", size: ", $res->content_length;
  50. });
  51. });
  52. say "*** PUBLIC REPOSITORIES ***";
  53. my $result;
  54. $result = $client->public_repositories(owner=>$USER);
  55. my $public_repos = $result->body;
  56. display_repos_reply($public_repos);
  57. $result = $client->public_repositories(owner=>$USER, page=>"2");
  58. $public_repos = $result->body;
  59. display_repos_reply($public_repos);
  60. while( $public_repos->{next} ) {
  61. if($public_repos->{next} =~ /page=(\d+)/) {
  62. last if $1 > 10;
  63. $result = $client->public_repositories(owner=>$USER, page=>$1);
  64. $public_repos = $result->body;
  65. display_repos_reply($public_repos);
  66. } else {
  67. last;
  68. }
  69. }
  70. }
  71. catch {
  72. say "Unexpected error caught [" . ref($_) . "]: $_";
  73. if(ref($_) eq 'Net::HTTP::Spore::Response') {
  74. my $error = $_->body->{error};
  75. if(ref($error)) {
  76. $error = $error->{message};
  77. }
  78. say $error;
  79. }
  80. };