NAME
WWW::Myspace::Data - WWW::Myspace database interaction
VERSION
Version 0.04
SYNOPSIS
This module is the database interface for the WWW::Myspace modules. It imports methods into the caller's namespace which allow the caller to bypass the loader object by calling the methods directly. This module is intended to be used as a back end for the Myspace modules, but it can also be called directly from a script if you need direct database access.
my %db = (
dsn => 'dbi:mysql:database_name',
user => 'username',
password => 'password',
);
# create a new object
my $data = WWW::Myspace::Data->new( $myspace, { db => \%db } );
# set up a database connection
my $loader = $data->loader();
# initialize the database with MySpace login info
my $account_id = $data->set_account( $username, $password );
# now do something useful...
my $update = $data->update_friend( $friend_id );
CONSTRUCTOR AND STARTUP
new()
new() creates a WWW::Myspace::Data object, based on parameters which are passed to it. You can (optionally) pass a valid WWW::Myspace object to new as the first argument. If you just want database access, there is no need to pass the myspace object. However, most update methods require a valid login, so it's not a bad idea to pass it if you don't mind the login overhead.
my %db = (
dsn => 'dbi:mysql:database_name',
user => 'username',
password => 'password',
);
my $data = WWW::Myspace::Data->new( $myspace, { db => \%db } );
Required Parameters
All parameters must be passed in the form of a hash reference.
db => HASHREF
The db HASHREF can made up of the following 3 parameters:
Required Parameters
dsn => $value
The dsn is passed directly to Class::DBI::Loader, so whatever qualifies as a valid dsn for Class::DBI is valid here.
# for a MySQL database 'dbi:mysql:database_name' # Or # if you are using SQLite 'dbi:SQLite:dbname=/path/to/dbfile'
Optional Parameters
user => $value
This is your database username. If you're running the script from the command line, it will default to the user you are logged in as.
password => $value
Your database password (if any). If you don't need a password to access your database, just leave this blank.
time_zone => $value
This is any valid DateTime time zone designation. eg:
time_zone => 'America/Toronto'
Optional Parameters
config_file => $value
If you prefer to keep your startup parameters in a file, pass a valid filename to new.
Your startup file may contain any of the parameters that can be passed to new() (except the $myspace object). Your config file will be used to set the default parameters for startup. Any other parameters which you also pass to new() will override the corresponding values in the config file. So, if you have a default setting for exclude_my_friends in your config file but also pass exclude_my_friends directly to new(), the config file value will be overriden. The default behaviour is not to look for a config file. Default file format is YAML.
my $adder = WWW::Myspace::FriendAdder->( $myspace, { config_file => '/path/to/adder_config.cfg', }, );
config_file_format => [YAML|CFG]
If you have chosen to use a configuration file, you may state explicitly which format you are using. You may choose between YAML and Config::General. If you choose not to pass this parameter, it will default to YAML.
loader( )
Before you do anything, call the loader() method. This returns the Class::DBI::Loader object. Handy if you want to access the database directly. If a loader object does not already exist, loader() will try to create one.
my $loader = $data->loader();
# get a list of all your friends
my @friend_objects = WWW::Myspace::Data::Friends->retrieve_all;
set_account ( $account, $password )
In order to use the database, you'll need to store your account login information in the accounts table. This method attempts to log in to Myspace first. If successful, your login information will be stored. If your account already exists in the accounts table, your password will be updated to the password supplied to the method.
In order to use this module, you'll have to call this function at least once. Once your account has been added to the database, there's no need to call set_account again, provided you always use the same Myspace account and you don't change your password information.
This mutator will also allow you to switch accounts within the same object. So, if you can switch from user A to user B, without creating a new object. In order to prevent you from shooting yourself in the foot, set_account() will die if it is unable to log in to MySpace with the username/password you provide.
To prevent any problems, be sure to check the return value. If successful, it returns the id of the account. That is, the id which has been assigned to this account in the accounts table. Returns 0 if there was a problem creating or updating the account.
get_account( )
Returns the account id assigned by the database for the account under which $myspace is currently logged in. Mostly useful for internal stuff, but it's available if you need it.
cache_friend( $friend_id )
Add this friend id to the friends table. cache_friend will not create a relationship between the friend_id and any account. It just logs the friend information in order to speed up various other operations. It's basically an internal method, but you could use it to cache information about any friend_id that isn't tied to any specific account. ie if you are spidering myspace and you just want to collect info on anyone, you can call this method.
update_friend( $friend_id )
The "friends" table in your local database stores information about myspace friends, shared among all accounts using your database. This lets you store additional information about them, such as their first name, and is also used by WWW::Myspace methods and modules to track information related to friends.
Basically this method calls cache_friend() and then creates a friend to account relationship.
update_friend takes a single friend id and makes sure it is represented in the local "friends" table. Returns 1 if the entry was successfully updated. (Returns Class::DBI return value for the update).
my $data = new WWW::Myspace::Data( \%config );
$data->update_friend( $friend_id );
update_all_friends( )
update_all_friends is really just a wrapper around update_friend This method fetches a complete list of your friends currently listed at MySpace and makes sure that all myspace users that are friends of your account are represented in the local "friends" table. It does not delete friends which may have been removed from your MySpace account since your last update.
date_stamp( )
A wrapper around DateTime which provides a date stamp to be used when entries are updated. This is essentially an internal routine. When called internally the time zone is supplied from the value passed to new().
Optional Parameters
time_zone => $value
Any valid DateTime time zone, like 'America/Toronto' or 'America/Chicago'. Defaults to GMT.
epoch => $value
Any positive number representing seconds since the epoch. Defaults to current system time
my $date_stamp = $data->date_stamp( { time_zone => 'America/Toronto', epoch => time(), } );
is_band( )
Calls is_band_from_cache to see if the friend id is a band profile. If it returns undef, the function will look up the info using Myspace.pm's is_band function, cache the info and return the result.
is_band_from_cache( )
Checks the database to see if the friend id is a band profile. Returns undef if the id could not be found or band info is not cached for this id.
get_last_lookup_id ( )
Returns the friend id of the last id for which a Myspace.pm lookup was performed. This is used by FriendAdder.pm to determine whether to sleep after skipping a profile. If the lookup did not extend beyond the database, there's no reason to sleep. May be useful for troubleshooting as well.
is_cached( $friend_id )
Returns 1 if this friend is in the database, 0 if not.
_loader( )
This is a private method, which creates a Class::DBI::Loader object, based on configuration parameters passed to new() To access the loader object directly, use loader()
_die_pretty( )
Internal method that deletes the Myspace object from $self and then prints $self via Data::Dumper. The Myspace object is so big, that when you get it out of the way it can be easier to debug set parameters.
$adder->_die_pretty;
DATABASE SCHEMA
You'll find the database schema in a file called mysql.txt in the top directory after untarring WWW::Myspace. This is a dump of the MySQL db from phpMyAdmin. It can easily be altered for other database formats (like SQLite). You can import the schema directly from the command line:
mysql -u username -p databasename < mysql.txt
You may also use a utility like phpMyAdmin to import this file as SQL.
Keep in mind that the schema hasn't been 100% finalized and is subject to change.
AUTHOR
Olaf Alders, <olaf at wundersolutions.com>
BUGS
Please report any bugs or feature requests to bug-www-myspace at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=WWW-Myspace. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
NOTES
This module is still in its infancy. It does a lot of cool stuff, but the interface is still subject to change. Please keep this in mind when upgrading
TO DO
This module is in developer mode. We still need to finalize a database schema and integrate it fully with the other WWW::Myspace modules.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc WWW::Myspace::Data
You can also look for information at:
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
RT: CPAN's request tracker
Search CPAN
ACKNOWLEDGEMENTS
Many thanks to Grant Grueninger for giving birth to WWW::Myspace and for his help and advice in the development of this module.
COPYRIGHT & LICENSE
Copyright 2006 Olaf Alders, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.