| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 |
- <?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($values, 0, 5);
- }
- /**
- * 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();
- }
- }
- ?>
|