Stuff with the Perl Foundation. A couple of patches in the Perl core. A few CPAN modules. That about sums it up.
I'm trying to use Net::Twitter with the following code:
#!/usr/bin/perl
use strict;
use warnings;
use Net::Twitter;
# because LoudTwitter requires a user/pass...
my %twitter = (
username => 'OvidPerl',
password => 'some_password',
);
my $twitter = Net::Twitter->new(%twitter);
my @timeline = $twitter->user_timeline;
use Data::Dumper;
print Dumper(\@timeline);
But I get the following error:
JSON text must be an object or array (but found number, string, true, false or null, use allow_nonref to allow this) at
/Library/Perl/5.8.6/JSON/Any.pm line 377
That's from the following code:
sub user_timeline {
my ( $self, $args ) = @_;
my $url = $self->{apiurl} . "/statuses/user_timeline";
$url.= (defined $args->{id}) ? "/" . $args->{id} . ".json" : ".json";
if ((defined $args->{since}) || (defined $args->{count})) {
$url.= "?";
$url.= (defined $args->{since}) ? 'since=' . $args->{since} . "&" : "";
$url.= (defined $args->{count}) ? 'count=' . $args->{count} : "";
}
my $req = $self->{ua}->get($url);
$self->{response_code} = $req->code;
$self->{response_message} = $req->message;
return ($req->is_success) ? JSON::Any->jsonToObj($req->content) : undef;
}
In debugging, I see that it's trying to get the correct URL, but the $req->content returns a ten digit integer instead of JSON, the same thing which is returned if I've failed to authenticate (but it returns a '200 OK' status, dang it). Has anyone made this work before? I've double-checked my password and have the latest versions of LWP::UserAgent and Net::Twitter installed.
Reducing it down to something easier to run ... (Score:1)
This
perl -MData::Dumper -MNet::Twitter -sle'BEGIN{ print "$user => $pass" } print Dumper( Net::Twitter->new( user => $u, pass => $pass)->user_timeline() )' -- -user=perigrin -pass=ImSol33tgives me the same error while
perl -MData::Dumper -MNet::Twitter -sle'BEGIN{ print "$user => $pass" } print Dumper( Net::Twitter->new( user => $u, pass => $pass)->user_timeline({count => 3) )' -- -user=perigrin -pass=StillL33tdoes not (although it doesn't return usable data eithe
Re: (Score:1)
broken? (Score:1)
http://twitter.com/statuses/friends_timeline.json [twitter.com] prompts for authentication in a browser but
http://twitter.com/statuses/user_timeline.json [twitter.com] doesn't.
I'm stumped (Score:1)
Re: (Score:2)
Thanks for the update. I was going to file a bug report, but wanted to make sure I wasn't doing something stupid, first. I've filed a bug with Twitter. Hopefully I'll hear something, too.
Re: (Score:1)
use MIME::Base64;
$conf{ua}->default_header( "Authorization" => "Basic " . encode_base64( $conf{"username"} . ":" . $conf{"password"} ) );
Re: (Score:1)
Familiar (Score:2)
I use the module for the "cpan_linked" Twitter-bot that spools out CPAN upload notices with links to the page and (when findable) the Changelog. I've had a lot of problems that when examined closely were pretty clearly not the fault of Net::Twitter, but rather the, err, twits themselves.
For example, when the bot tries to send an update while Twitter is down, it gets a response of "500 Server Error".
In the message body.
The response code/message is not indicative of an error.
--rjray
dunno if you had success with this (Score:2)
But I found two things:
1) user_timeline() returns an arrayref, not an array (docs are unclear)
2) If you pass an ID explicitly to user_timeline() it seems to work, even if the ID is the same as the authenticating user and is therefore redundant. For instance, this works: