NAME

WWW::Weebly - Perl interface to interact with the Weebly API.

VERSION

Version 0.01

SYNOPSIS

This module provides you with an perl interface to interact with the Weebly API.

use WWW::Weebly;
my $api = WWW::Weebly->new(
	{
		'tid_seed'      => $seed_value_for_generating_tids,
		'weebly_secret' => $weebly_secret,
		'weebly_url'    => $weebly_baseurl,
	}
);
$api->new_user();
$api->login($params_for_login);
$api->enable_account($params_for_enable_account);
$api->disable_account($params_for_disable_account);
$api->delete_account($params_for_delete_account);
$api->undelete_account($params_for_undelete_account);
$api->upgrade_account($params_for_upgrade_account);
$api->downgrade_account($params_for_downgrade_account);
$api->has_service($params_for_has_service);

SUBROUTINES/METHODS

new()

Constructor.

Input takes a hashref that contains:

weebly_secret => The secret key that is used to generate auth tokens.
weebly_url    => Specify the base URL that we should be querying.

One of the following:

tid_seed      => The value that will be appended to the current time() value to generate a transaction id.
tid_sub       => If you wish to generate transaction ids in a different way, you can pass the coderef to the sub you wish to use here.

Optional:
http_opts     => Hashref of options that are passed on to the HTTP::Tiny object that is used internally.
                 Example value: { 'agent' => 'WWW-Weebly', 'timeout' => 20, 'verify_SSL' => 'false', 'SSL_options' => {'SSL_verify_mode' => '0x00'} }

new_user()

Dispatches a newuser call to the URL specified in $self->{weebly_url}.

Input: None.

Croaks on errors.

Returns a hashref with the following keys otherwise:

success => 1 or 0.
new_id  => ID associated with the new account (only present on success).
reason  => If the request fails, this will contain a text explanation of the failure as returned by Weebly.

login()

Dispatches a login call to the URL specified in $self->{weebly_url}.

Passes critical user account information to Weebly, such as the FTP info, account type (Basic/Premium), widget type, etc.

Generates a one-time login url that is passed to the client to allow the client to log-in to the application.

Input: hashref that contains the following information:

user_id        => the user_id of the account.
ftp_url        => FTP URL
ftp_username   => FTP username
ftp_password   => FTP password
ftp_path       => FTP publish path
property_name  => Property name used for the creating the website's foooter. Should be of the form: <a href='URL' target='_blank'>SITE_NAME</a>
upgrade_url    => URL of the purchase manager
publish_domain => Published site's FQDN (ie www.domain.com)
platform       => 'Windows' or 'Unix'
publish_upsell => Publish upsell URL (optional, placed in an 640px wide by 200px tall iframe on publish)

Croaks on errors.

Returns a hashref with the following keys otherwise:

success   => 1 or 0.
login_url => one-time login url for the account.
reason    => If the request fails, this will contain a text explanation of the failure as returned by Weebly.

enable_account()

Dispatches a enableaccount call to the URL specified in $self->{weebly_url}.

This call enables a user account that has been previously disabled.

Input: hashref that contains the following information:

user_id     => the user_id of the account.

Croaks on errors.

Returns a hashref with the following keys otherwise:

success => 1 or 0.
reason  => If the request fails, this will contain a text explanation of the failure as returned by Weebly.

disable_account()

Dispatches a disableaccount call to the URL specified in $self->{weebly_url}.

This call disables login to a user account. This account will be accounted for in user quota numbers.

It is possible to restore login capabilities to this account using enable_account().

Input: hashref that contains the following information:

user_id     => the user_id of the account.

Croaks on errors.

Returns a hashref with the following keys otherwise:

success => 1 or 0.
reason  => If the request fails, this will contain a text explanation of the failure as returned by Weebly.

delete_account()

Dispatches a deleteaccount call to the URL specified in $self->{weebly_url}.

This call deletes a user account. This account will not be accounted for in user quota numbers.

It is possible to restore this account using the Admin interface or via the undelete_account() call.

Input: hashref that contains the following information:

user_id     => the user_id of the account.

Croaks on errors.

Returns a hashref with the following keys otherwise:

success => 1 or 0.
reason  => If the request fails, this will contain a text explanation of the failure as returned by Weebly.

undelete_account()

Dispatches a undeleteaccount call to the URL specified in $self->{weebly_url}.

This call restores a deleted user account.

Input: hashref that contains the following information:

user_id     => the user_id of the account.

Croaks on errors.

Returns a hashref with the following keys otherwise:

success => 1 or 0.
reason  => If the request fails, this will contain a text explanation of the failure as returned by Weebly.

upgrade_account()

Dispatches a upgradeaccount call to the URL specified in $self->{weebly_url}.

This call upgrades a user account with a given service.

Input: hashref that contains the following information:

user_id     => the user_id of the account.
service_id  => the server_id to be added to the account. Current service_ids that Weebly responds are: 'Weebly.proAccount', 'Weebly.eCommerce'
term        => duration of the service in months.
price       => price paid for the service.

Croaks on errors.

Returns a hashref with the following keys otherwise:

success => 1 or 0.
reason  => If the request fails, this will contain a text explanation of the failure as returned by Weebly.

downgrade_account()

Dispatches a downgradeaccount call to the URL specified in $self->{weebly_url}.

This call can be used to check if the specified user_id has Pro or Ecommerce features enabled.

Input: hashref that contains the following information:

user_id     => the user_id of the account.
service_id  => the server_id to be removed from the account. Current service_ids that Weebly responds are: 'Weebly.proAccount', 'Weebly.eCommerce'

Croaks on errors.

Returns a hashref with the following keys otherwise:

success => 1 or 0.

has_service()

Dispatches a hasservice call to the URL specified in $self->{weebly_url}.

This call can be used to check if the specified user_id has Pro or Ecommerce features enabled.

Input: hashref that contains the following information: user_id => the user_id of the account. service_id => the server_id to check. Current service_ids that Weebly responds are: 'Weebly.proAccount', 'Weebly.eCommerce'

Croaks on errors.

Returns a hashref with the following keys otherwise:

success => 1 or 0.

get_auth_token()

Input: transaction id, action param, and userid param.

Returns the md5_hex hash of the input params concatenated with $self->{weebly_secret}, to be used as the auth token in the API calls.

get_weebly_url()

Returns the base url that will be queried, which is stored in $self->{weebly_url}.

get_weebly_secret()

Returns $self->{weebly_secret}.

get_error()

Returns $self->{'error'}

Internal Subroutines

The following are not meant to be used directly, but are available if 'finer' control is required.

_do_request()

Wraps the call to _make_request and handles error checks.

INPUT Takes the 'action' and sanitized paramaters hashref as input.

Output Returns undef on failure (sets $self->{error} with the proper error). Returns a hashref with the parsed data from the API server if successful.

_parse_output()

Parses the output from Weebly's API call, and returns it as a hash.

_get_url()

Depending on the action passed, it will return part of the URL that you can use along with the _stringify_params method to generate the full GET url.

Input: action param Returns: get_weebly_url().'/weebly/api.php?action='.$action

_add_auth()

Adds the neccessary transaction id (tid) and authentication tokens to the URI

_get_tid()

Input: None.

Returns the tid value generated by the sub referenced in $self->{tid_sub}.

If a 'tid_seed' value was specified when the object was created, then the value returned is the md5_hex hash of the tid_seed value concatenated with the time().

_make_request()

Makes the HTTP request.

Input The full uri to perform the HTTP request on.

Output Returns an array containing the http response, and error.

If the HTTP request was successful, then the error is blank. If the HTTP request failed, then the response is blank and the error is the status line from the HTTP response.

_sanitize_params()

Sanitizes the data in the hashref passed for the action specified.

Input The 'action', and a hashref that has the data that will be sanitized.

Output Boolean value indicating success. The hash is altered in place as needed.

_stringify_params()

Stringifies the content of a hash such that the output can be used as the URI body of a GET request.

Input A hashref containing the sanatizied parameters for an API call.

Output String with the keys and values stringified as so '&key1=value1&key2=value2'

_check_required_keys()

Input First arg: Hashref that contains the data to be checked. Second arg: Hashref that holds the keys to check for.

Output A hash containing the 'missing_params' and 'blank_params', if any are found to be missing. If a required key is missing, it will be present in the missing_params array. If a required key has a blank value, it will be present in the blank_params array. Returns undef, if no issues are found.

_remove_unwanted_keys()

Deletes keys from the provided params hashref, if they are not listed in the hash for wanted keys.

Input First arg: Hashref that contains the data to be checked. Second arg: Hashref that holds the keys to check for.

Output None/undef.

_get_error()

Returns $self->{'error'}

_error()

Internal method that is used to report and set $self->{'error'}.

It will croak if called with a true second argument. Such as:

$self->_error($msg, 1);

AUTHOR

Rishwanth Yeddula, <ryeddula at cpan.org>

ACKNOWLEDGMENTS

Thanks to Hostgator.com for funding the development of this module and providing test resources.

BUGS

Please report any bugs or feature requests to bug-www-weebly at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=WWW-Weebly. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

You can find documentation for this module with the perldoc command.

perldoc WWW::Weebly

You can also look for information at:

ACKNOWLEDGEMENTS

LICENSE AND COPYRIGHT

Copyright 2013 Rishwanth Yeddula.

This program is free software; you can redistribute it and/or modify it under the terms of the the Artistic License (2.0). You may obtain a copy of the full license at:

http://www.perlfoundation.org/artistic_license_2_0

Any use, modification, and distribution of the Standard or Modified Versions is governed by this Artistic License. By using, modifying or distributing the Package, you accept this license. Do not use, modify, or distribute the Package, if you do not accept this license.

If your Modified Version has been derived from a Modified Version made by someone other than you, you are nevertheless required to ensure that your Modified Version complies with the requirements of this license.

This license does not grant you the right to use any trademark, service mark, tradename, or logo of the Copyright Holder.

This license includes the non-exclusive, worldwide, free-of-charge patent license to make, have made, use, offer to sell, sell, import and otherwise transfer the Package with respect to any patent claims licensable by the Copyright Holder that are necessarily infringed by the Package. If you institute patent litigation (including a cross-claim or counterclaim) against any party alleging that the Package constitutes direct or contributory patent infringement, then this Artistic License to you shall terminate on the date that such litigation is filed.

Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.