Вход Регистрация
Файл: aweber/aweber_api/aweber.php
Строк: 324
<?php
require_once('exceptions.php');
require_once(
'oauth_adapter.php');
require_once(
'oauth_application.php');
require_once(
'aweber_response.php');
require_once(
'aweber_collection.php');
require_once(
'aweber_entry_data_array.php');
require_once(
'aweber_entry.php');

/**
 * AWeberServiceProvider
 *
 * Provides specific AWeber information or implementing OAuth.
 * @uses OAuthServiceProvider
 * @package
 * @version $id$
 */
class AWeberServiceProvider implements OAuthServiceProvider {

    
/**
     * @var String Location for API calls
     */
    
public $baseUri 'https://api.aweber.com/1.0';

    
/**
     * @var String Location to request an access token
     */
    
public $accessTokenUrl 'https://auth.aweber.com/1.0/oauth/access_token';

    
/**
     * @var String Location to authorize an Application
     */
    
public $authorizeUrl 'https://auth.aweber.com/1.0/oauth/authorize';

    
/**
     * @var String Location to request a request token
     */
    
public $requestTokenUrl 'https://auth.aweber.com/1.0/oauth/request_token';


    public function 
getBaseUri() {
        return 
$this->baseUri;
    }

    public function 
removeBaseUri($url) {
        return 
str_replace($this->getBaseUri(), ''$url);
    }

    public function 
getAccessTokenUrl() {
        return 
$this->accessTokenUrl;
    }

    public function 
getAuthorizeUrl() {
        return 
$this->authorizeUrl;
    }

    public function 
getRequestTokenUrl() {
        return 
$this->requestTokenUrl;
    }

    public function 
getAuthTokenFromUrl() { return ''; }
    public function 
getUserData() { return ''; }

}

/**
 * AWeberAPIBase
 *
 * Base object that all AWeberAPI objects inherit from.  Allows specific pieces
 * of functionality to be shared across any object in the API, such as the
 * ability to introspect the collections map.
 *
 * @package
 * @version $id$
 */
class AWeberAPIBase {

    
/**
     * Maintains data about what children collections a given object type
     * contains.
     */
    
static protected $_collectionMap = array(
        
'account'              => array('lists''integrations'),
        
'broadcast_campaign'   => array('links''messages''stats'),
        
'followup_campaign'    => array('links''messages''stats'),
        
'link'                 => array('clicks'),
        
'list'                 => array('campaigns''custom_fields''subscribers',
                                        
'web_forms''web_form_split_tests'),
        
'web_form'             => array(),
        
'web_form_split_test'  => array('components'),
    );

    
/**
     * loadFromUrl
     *
     * Creates an object, either collection or entry, based on the given
     * URL.
     *
     * @param mixed $url    URL for this request
     * @access public
     * @return AWeberEntry or AWeberCollection
     */
    
public function loadFromUrl($url) {
        
$data $this->adapter->request('GET'$url);
        return 
$this->readResponse($data$url);
    }

    protected function 
_cleanUrl($url) {
        return 
str_replace($this->adapter->app->getBaseUri(), ''$url);
    }

    
/**
     * readResponse
     *
     * Interprets a response, and creates the appropriate object from it.
     * @param mixed $response   Data returned from a request to the AWeberAPI
     * @param mixed $url        URL that this data was requested from
     * @access protected
     * @return mixed
     */
    
protected function readResponse($response$url) {
        
$this->adapter->parseAsError($response);
        if (!empty(
$response['id'])) {
            return new 
AWeberEntry($response$url$this->adapter);
        } else if (
array_key_exists('entries'$response)) {
            return new 
AWeberCollection($response$url$this->adapter);
        }
        return 
false;
    }
}

/**
 * AWeberAPI
 *
 * Creates a connection to the AWeberAPI for a given consumer application.
 * This is generally the starting point for this library.  Instances can be
 * created directly with consumerKey and consumerSecret.
 * @uses AWeberAPIBase
 * @package
 * @version $id$
 */
class AWeberAPI extends AWeberAPIBase {

    
/**
     * @var String Consumer Key
     */
    
public $consumerKey    false;

    
/**
     * @var String Consumer Secret
     */
    
public $consumerSecret false;

    
/**
     * @var Object - Populated in setAdapter()
     */
    
public $adapter false;

    
/**
     * Uses the app's authorization code to fetch an access token
     *
     * @param String Authorization code from authorize app page
     */
    
public static function getDataFromAweberID($string) {
        list(
$consumerKey$consumerSecret$requestToken$tokenSecret$verifier) = AWeberAPI::_parseAweberID($string);

        if (!
$verifier) {
            return 
null;
        }
        
$aweber = new AweberAPI($consumerKey$consumerSecret);
        
$aweber->adapter->user->requestToken $requestToken;
        
$aweber->adapter->user->tokenSecret $tokenSecret;
        
$aweber->adapter->user->verifier $verifier;
        list(
$accessToken$accessSecret) = $aweber->getAccessToken();
        return array(
$consumerKey$consumerSecret$accessToken$accessSecret);
    }

    protected static function 
_parseAWeberID($string) {
        
$values explode('|'$string);
        if (
count($values) < 5) {
            return 
null;
        }
        return 
array_slice($values05);
    }

    
/**
     * Sets the consumer key and secret for the API object.  The
     * key and secret are listed in the My Apps page in the labs.aweber.com
     * Control Panel OR, in the case of distributed apps, will be returned
     * from the getDataFromAweberID() function
     *
     * @param String Consumer Key
     * @param String Consumer Secret
     * @return null
     */
    
public function __construct($key$secret) {
        
// Load key / secret
        
$this->consumerKey    $key;
        
$this->consumerSecret $secret;

        
$this->setAdapter();
    }

    
/**
     * Returns the authorize URL by appending the request
     * token to the end of the Authorize URI, if it exists
     *
     * @return string The Authorization URL
     */
    
public function getAuthorizeUrl() {
        
$requestToken $this->user->requestToken;
        return (empty(
$requestToken)) ?
            
$this->adapter->app->getAuthorizeUrl()
                :
            
$this->adapter->app->getAuthorizeUrl() . "?oauth_token={$this->user->requestToken}";
    }

    
/**
     * Sets the adapter for use with the API
     */
    
public function setAdapter($adapter=null) {
        if (empty(
$adapter)) {
            
$serviceProvider = new AWeberServiceProvider();
            
$adapter = new OAuthApplication($serviceProvider);
            
$adapter->consumerKey $this->consumerKey;
            
$adapter->consumerSecret $this->consumerSecret;
        }
        
$this->adapter $adapter;
    }

    
/**
     * Fetches account data for the associated account
     *
     * @param String Access Token (Only optional/cached if you called getAccessToken() earlier
     *      on the same page)
     * @param String Access Token Secret (Only optional/cached if you called getAccessToken() earlier
     *      on the same page)
     * @return Object AWeberCollection Object with the requested
     *     account data
     */
    
public function getAccount($token=false$secret=false) {
        if (
$token && $secret) {
            
$user = new OAuthUser();
            
$user->accessToken $token;
            
$user->tokenSecret $secret;
            
$this->adapter->user $user;
        }

        
$body $this->adapter->request('GET''/accounts');
        
$accounts $this->readResponse($body'/accounts');
        return 
$accounts[0];
    }

    
/**
     * PHP Automagic
     */
    
public function __get($item) {
        if (
$item == 'user') return $this->adapter->user;
        
trigger_error("Could not find "{$item}"");
    }

    
/**
     * Request a request token from AWeber and associate the
     * provided $callbackUrl with the new token
     * @param String The URL where users should be redirected
     *     once they authorize your app
     * @return Array Contains the request token as the first item
     *     and the request token secret as the second item of the array
     */
    
public function getRequestToken($callbackUrl) {
        
$requestToken $this->adapter->getRequestToken($callbackUrl);
        return array(
$requestToken$this->user->tokenSecret);
    }

    
/**
     * Request an access token using the request tokens stored in the
     * current user object.  You would want to first set the request tokens
     * on the user before calling this function via:
     *
     *    $aweber->user->tokenSecret  = $_COOKIE['requestTokenSecret'];
     *    $aweber->user->requestToken = $_GET['oauth_token'];
     *    $aweber->user->verifier     = $_GET['oauth_verifier'];
     *
     * @return Array Contains the access token as the first item
     *     and the access token secret as the second item of the array
     */
    
public function getAccessToken() {
        return 
$this->adapter->getAccessToken();
    }
}

?>
Онлайн: 1
Реклама