WWW-Myspace
view release on metacpan or search on metacpan
lib/WWW/Myspace.pm view on Meta::CPAN
This function mainly exists for the internal login method to use,
and for related sub-modules that store their cache files by
default in WWW:Myspace's cache directory.
=cut
sub make_cache_dir {
# Make the cache directory if it doesn't exist.
unless ( -d $self->cache_dir ) {
mkdir $self->cache_dir or croak "Can't create cache directory ".
$self->cache_dir;
}
}
#---------------------------------------------------------------------
# _die_unless_logged_in
sub _die_unless_logged_in {
my ( $method ) = @_;
unless ( $self->logged_in ) {
croak "$method called when not logged in\n";
}
}
#---------------------------------------------------------------------
# _fix_textareas( $tree )
# Takes an HTML::Element node and traverses it, fixing any
# textarea elements so they have a content element.
# Bug workaround - HTTP::Request::Form will die if a textarea
# field has no content (because the parser doesn't add a
# "_content" element). So, we add one.
sub _fix_textareas() {
my $x = $_[0];
# If this is a textarea, push an empty string as the
# content if it doesn't have any.
if ( $x->tag eq "textarea" ) {
$x->{_content} = [] unless defined $x->content;
}
# Recursively traverse the tree on our search.
foreach my $c ($x->content_list) {
_fix_textareas($c) if ref $c; # ignore text nodes
}
}
#---------------------------------------------------------------------
# _get_acct()
# Get and store the login and password. We check the user's preference
# file for defaults, then prompt them.
sub _get_acct {
# Initialize
my %prefs = ();
my $ref = "";
my ( $pref, $value, $res );
my $cache_filepath = catfile( $self->cache_dir, $self->cache_file);
# Read what we got last time.
if ( open ( PREFS, "< ", $cache_filepath ) ) {
while (<PREFS>) {
chomp;
( $pref, $value ) = split( ":" );
$prefs{"$pref"} = $value;
}
close PREFS;
}
# Prompt them for current values
unless ( defined $prefs{"email"} ) { $prefs{"email"} = "" }
print "Email [" . $prefs{"email"} . "]: ";
$res = <STDIN>; chomp $res;
if ( $res ) {
$prefs{"email"} = $res;
}
unless ( defined $prefs{"password"} ) { $prefs{"password"} = "" }
print "Password [". $prefs{"password"} . "]: ";
$res = <STDIN>; chomp $res;
if ( $res ) {
$prefs{"password"} = $res;
}
# Make the cache directory if it doesn't exist.
$self->make_cache_dir;
# Store the new values.
open ( PREFS, ">", $cache_filepath ) or croak $!;
print PREFS "email:" . $prefs{"email"} . "\n" .
"password:" . $prefs{"password"} . "\n";
close PREFS;
# Store the account info.
$self->{account_name}=$prefs{"email"};
$self->{password}=$prefs{"password"};
}
#---------------------------------------------------------------------
# _get_friend_id( $homepage )
# This internal method stores our friend ID. We get this from the
# "View Profile" link on our home page (the page we see when we
# click the "Home" link in the top nav bar)
sub _get_friend_id {
my ( $homepage ) = @_;
# Search the code for the link. This is why we like Perl. :)
my $page_source = $homepage->decoded_content;
$page_source =~ /$regex{'friend_link'}/iosm;
my $friend_id=$2;
( $DEBUG ) && print "Got friend ID: $friend_id\n";
# Store it
$self->{my_friend_id} = $friend_id;
if ( $friend_id ) {
$self->error(0)
} else {
$self->error("Couldn't get friendID from home page")
}
}
#---------------------------------------------------------------------
# _get_friend_page( $page, %attr_ref )
# Examples:
# $self->_get_friend_page( 1, 'group', 100011592 );
# Gets the friends from page 1 (the second page) of the myspace
# group with ID 100011592.
#
# $self->_get_friend_page( 1 )
# Get the the friends from page 1 of the logged in user's friend pages.
#
# $self->_get_friend_page( 1, 'inbox' );
# Gets the friends from page 1 of the logged in user's mail inbox.
#
# Return the content of the friend page. $page is the page number.
# $id
sub _get_friend_page {
my ( $page, $source, $id ) = @_;
my ( $url, $res, $success );
my $verify_re = '';
$source = '' unless defined $source;
my $follow = 1; # Add referer header unless first page
# Set the URL string for the right set of pages
if ( $source eq "group" ) {
$url = "http://groups.myspace.com/index.cfm?fuseaction=".
"groups.viewMembers&groupID=${id}&page=${page}";
$follow = 0 if ( $page == 0 );
( run in 1.910 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )