You are here

imageshack.inc in Embedded Media Field 6.3

Same filename and directory in other branches
  1. 6 contrib/emimage/providers/imageshack.inc

This include processes imageshack.com image files for use by emfield.module.

@TODO: Use imageshack's API? Requires letting web users know re hosting.

File

contrib/emimage/providers/imageshack.inc
View source
<?php

/**
 * @file
 * This include processes imageshack.com image files for use by emfield.module.
 *
 * @TODO: Use imageshack's API? Requires letting web users know re hosting.
 */
define('EMIMAGE_IMAGESHACK_MAIN_URL', 'http://www.imageshack.us/');
define('EMIMAGE_IMAGESHACK_DATA_VERSION', 1);

/**
 * hook emimage_PROVIDER_info
 * this returns information relevant to a specific 3rd party image provider
 * @return
 *   an array of strings requested by various admin and other forms
 *   'name' => the translated name of the provider
 *   'url' => the url to the main page for the provider
 *   'settings_description' => a description of the provider that will be posted in the admin settings form
 *   'supported_features' => an array of rows describing the state of certain supported features by the provider.
 *      These will be rendered in a table, with the columns being 'Feature', 'Supported', 'Notes'.
 */
function emimage_imageshack_info() {
  $features = array();
  return array(
    'provider' => 'imageshack',
    'name' => t('ImageShack'),
    'url' => EMIMAGE_IMAGESHACK_MAIN_URL,
    'settings_description' => t('These settings specifically affect images displayed from <a href="@imageshack" target="_blank">ImageShack</a>.', array(
      '@imageshack' => EMIMAGE_IMAGESHACK_MAIN_URL,
    )),
    'supported_features' => $features,
  );
}

/**
 *  Implement hook emvideo_PROVIDER_data_version().
 */
function emimage_imageshack_data_version() {
  return EMIMAGE_IMAGESHACK_DATA_VERSION;
}
function emimage_imageshack_data($field, $item) {
  $data = array();
  $url = stristr($item['embed'], 'my.php?image=') ? _emimage_imageshack_scrape_image_url($item['embed']) : $item['embed'];
  if (preg_match('!([^/.:@]+)\\.imageshack\\.us/([^/]+)/([^/]+)/(.+)$!i', $url, $matches)) {
    $data = array(
      'server' => $matches[1],
      'a1' => $matches[2],
      'a2' => $matches[3],
      'file' => $matches[4],
      'title' => '',
    );
    $data['emimage_data_version'] = EMIMAGE_IMAGESHACK_DATA_VERSION;
  }
  return $data;
}
function emimage_imageshack_extract($embed = '') {

  // http://img255.imageshack.us/my.php?image=dscn0036ky1.jpg
  // http://img255.imageshack.us/img255/7682/dscn0036ky1.jpg
  if (preg_match('!([^/.:@]+)\\.imageshack\\.us/(([^/]+)/([^/]+)/|my.php\\?image=)?(.+)$!i', $embed, $matches)) {
    return $matches[5];
  }
  return array();
}

/**
 * hook emimage_PROVIDER_embedded_link($code)
 * returns a link to view the content at the provider's site
 *  @param $code
 *    the string containing the content to watch
 *  @return
 *    a string containing the URL to view the image at the original provider's site
 */
function emimage_imageshack_embedded_link($code, $data) {
  return "http://{$data['server']}.imageshack.us/my.php?image={$code}";
}

/**
 *  Implements emimage_PROVIDER_image_url.
 *
 *  @param $code
 *    The provider code of the image.
 *  @param $width
 *  @param $height
 *    The dimensions of the photo to display.
 *  @return
 *    The url directly to the image to display.
 */
function emimage_imageshack_image_url($code, $width, $height, $formatter = NULL, $field = NULL, $item = NULL, $node = NULL) {
  if (is_array($item)) {
    $file = $item['data']['file'];
    $data = $item['data'] ? unserialize($arg['data']) : $arg['data'];
    return "http://{$data['server']}.imageshack.us/{$data['a1']}/{$data['a2']}/{$file}";
  }
}

/**
 *  implement emimage_PROVIDER_image_title
 *
 *  @param $code
 *    the code of the image
 *  @param $data
 *    any stored data for the image, which may already have the title
 *  @return
 *    the title as the 3rd party provider knows it, if accessible to us. otherwise, ''
 */
function emimage_imageshack_image_title($code, $data) {
  return '';

  // Not provided by on ImageShack.
}

/**
 * Scrape the actual image URL from the ImageShack page.
 *
 * @param String $url
 *   ImageShack page.
 * @param boolean $reset
 *   If TRUE, then reset the cache.
 * @return String
 *   ImageShack image URL.
 */
function _emimage_imageshack_scrape_image_url($url, $reset = FALSE) {
  static $urls;
  if (!isset($urls) || $reset) {
    $urls = array();
  }
  if (isset($urls[$url])) {
    return $urls[$url];
  }
  if (!$reset && ($cache = cache_get('emimage:imageshack:' . $url))) {
    $urls[$url] = $cache->data;
    return $urls[$url];
  }
  $request = drupal_http_request($url);
  if ($html = $request->data) {
    if (preg_match('!<img id="thepic" .+? src="(.+?)"!is', $html, $matches)) {
      cache_set('emimage:imageshack:' . $url, $urls[$url] = $matches[1]);
      return $urls[$url];
    }
  }
}

Functions

Namesort descending Description
emimage_imageshack_data
emimage_imageshack_data_version Implement hook emvideo_PROVIDER_data_version().
emimage_imageshack_embedded_link hook emimage_PROVIDER_embedded_link($code) returns a link to view the content at the provider's site
emimage_imageshack_extract
emimage_imageshack_image_title implement emimage_PROVIDER_image_title
emimage_imageshack_image_url Implements emimage_PROVIDER_image_url.
emimage_imageshack_info hook emimage_PROVIDER_info this returns information relevant to a specific 3rd party image provider
_emimage_imageshack_scrape_image_url Scrape the actual image URL from the ImageShack page.

Constants

Namesort descending Description
EMIMAGE_IMAGESHACK_DATA_VERSION
EMIMAGE_IMAGESHACK_MAIN_URL @file This include processes imageshack.com image files for use by emfield.module.