class AddThis in Drupal Most Popular 6
@file Provides a connector to the AddThis.com API.
See http://www.addthis.com/help/analytics-api
@author Andrew Marcus @since Dec 30, 2009
Hierarchy
- class \AddThis
 
Expanded class hierarchy of AddThis
File
- modules/
mostpopular_addthis/ mostpopular_addthis.classes.inc, line 18  - Provides a connector to the AddThis.com API.
 
View source
class AddThis {
  const data_scheme = 'http://';
  const data_url = 'api.addthis.com/analytics/1.0/pub/shares';
  protected $username;
  protected $password;
  protected $pubid;
  protected $result;
  /**
   * Constructs a new AddThis class.
   *
   * It will use the configured username and password.
   */
  public function AddThis() {
    $this->username = variable_get('addthis_username', NULL);
    $this->password = variable_get('addthis_password', NULL);
    $addthisConfig = variable_get('addthis_config', array());
    $this->pubid = $addthisConfig['pubid'];
  }
  /**
   * Makes a generic call to the AddThis.com server.
   *
   * See http://www.addthis.com/help/analytics-api
   *
   * @param string $dimension
   *   The dimension we're interested in.  It must be null or one of:
   *   - content
   *   - continent
   *   - country
   *   - domain
   *   - service
   * @param string $format
   *   The format to return results, either 'csv' or 'json'.
   * @param string $params
   *   Additional parameters to send.  The following are allowed:
   *   - pubid: The publisher profile for which you're requesting data.
   *            Can be omitted if you have only one profile.
   *            * Modified in Settings form
   *   - period: 'day', 'week' or 'month'
   *   - domain: any URL domain
   *   - service: 'email'
   *   - url: Collect response data only for the specified url.
   */
  public function fetch($dimension = '', $format = 'csv', $params = array()) {
    if (empty($this->username) || empty($this->password)) {
      drupal_set_message(t('You must configure the AddThis.com username and password'), 'error');
      return NULL;
    }
    if (isset($this->pubid)) {
      // add pubid to params
      $params['pubid'] = $this->pubid;
    }
    // Create the URL
    $auth = $this->username . ':' . $this->password . '@';
    $url = self::data_url;
    if (!empty($dimension)) {
      $url .= '/' . $dimension;
    }
    $url .= '.' . $format;
    // Clean up the URL and add query parameters
    $request_url = url(self::data_scheme . $auth . $url, array(
      'query' => $params,
    ));
    $this->result = drupal_http_request($request_url);
    if (isset($this->result->error)) {
      drupal_set_message(t("Error connecting to AddThis.com service.<br/>!url<br/>@code @error", array(
        '!url' => url(self::data_scheme . $url, array(
          'query' => $params,
        )),
        '@code' => $this->result->code,
        '@error' => $this->result->error,
      )), 'error');
      return NULL;
    }
    return $this->result->data;
  }
  /**
   * Makes a call to the AddThis.com server and parses the CSV response.
   *
   * @param string $dimension
   *   The dimension we're interested in.  It must be null or one of:
   *   - content
   *   - continent
   *   - country
   *   - domain
   *   - service
   * @param string $params
   *   Additional parameters to send.  The following are allowed:
   *   - period: 'day', 'week' or 'month'
   *   - domain: any URL domain
   *   - service: 'email'
   *
   * @return array
   *   An array of associative arrays, each containing:
   *     - shares: The number of times the page was shared.
   *     - url: The URL of the page.
   */
  public function fetchCSV($dimension = '', $params = array()) {
    $out = array();
    $this
      ->fetch($dimension, 'csv', $params);
    // If we got a result, parse the CSV fields
    if (empty($this->result->error)) {
      $lines = preg_split('(\\r|\\n|\\r\\n)', $this->result->data);
      $headers = array();
      foreach ($lines as $line) {
        $line = trim($line);
        if (!empty($line)) {
          // If this is the first row, use it as the headers
          if (empty($headers)) {
            $parts = split(',', $line);
            $headers = $parts;
          }
          else {
            $parts = split(',', $line, count($headers));
            $data = array();
            foreach ($parts as $i => $part) {
              $data[$headers[$i]] = $part;
            }
            $out[] = $data;
          }
        }
      }
    }
    else {
      // Get the message type
      if (preg_match("/<b>message<\\/b> <u>(.+?)<\\/u>/", $this->result->data, $matches)) {
        drupal_set_message($matches[1], 'error');
      }
    }
    return $out;
  }
  /**
   * Gets the most emailed nodes from AddThis.com for the given period of time.
   *
   * @param integer $ts
   *   The timestamp that starts the desired period of time that ends now.
   *   We use this to calculate whether we're interested in the last day,
   *   week or month.   Note that year is not yet supported by AddThis.com.
   *
   * @return array
   *   An array of associative arrays, each containing:
   *     - shares: The number of times the page was shared.
   *     - url: The URL of the page.
   */
  public function getNodeEmailCount($ts = 0) {
    $params = array(
      'service' => 'email',
    );
    $now = time();
    if (strtotime('-1 day -10 minutes') <= $ts) {
      $params['period'] = 'day';
    }
    elseif (strtotime('-1 week -10 minutes') <= $ts) {
      $params['period'] = 'week';
    }
    elseif (strtotime('-1 month -10 minutes') <= $ts) {
      $params['period'] = 'month';
    }
    else {
      return FALSE;
    }
    return $this
      ->fetchCSV('content', $params);
  }
}Members
| 
            Name | 
                  Modifiers | Type | Description | Overrides | 
|---|---|---|---|---|
| 
            AddThis:: | 
                  protected | property | ||
| 
            AddThis:: | 
                  protected | property | ||
| 
            AddThis:: | 
                  protected | property | ||
| 
            AddThis:: | 
                  protected | property | ||
| 
            AddThis:: | 
                  public | function | Constructs a new AddThis class. | |
| 
            AddThis:: | 
                  constant | |||
| 
            AddThis:: | 
                  constant | |||
| 
            AddThis:: | 
                  public | function | Makes a generic call to the AddThis.com server. | |
| 
            AddThis:: | 
                  public | function | Makes a call to the AddThis.com server and parses the CSV response. | |
| 
            AddThis:: | 
                  public | function | Gets the most emailed nodes from AddThis.com for the given period of time. |