diff options
Diffstat (limited to 'includes/apiclient.inc')
-rw-r--r-- | includes/apiclient.inc | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/includes/apiclient.inc b/includes/apiclient.inc new file mode 100644 index 0000000..4caad24 --- /dev/null +++ b/includes/apiclient.inc @@ -0,0 +1,134 @@ +<?php +/** + * @file + * Some functions for using video hosting providers api (Youtube, Google Video, etc..) + * Part of this code has been inspired by the video_cck module and adapted + * for the video module by jyamada1 + * + * @author Fabio Varesano <fvaresano at yahoo dot it> + * porting to Drupal 6 + * @author Heshan Wanigasooriya <heshan at heidisoft.com><heshanmw@gmail.com> + * @todo + */ + + +/** +* When an include file requires to read an xml to receive information, such as for thumbnails, +* this script can be used to request the xml and return it as an array. +* Note that this is a modified function from the flickr.module, made to handle this type of +* call more generically. also, i suspect it could be done easier (and more quickly) in php 5. +* @param $provider +* the string of the third party provider, such as 'youtube' or 'google' +* @param $url +* the url for the xml request +* @param $args +* an array of args to pass to the xml url +* @param $cacheable +* optional; if true, the result of this xml request will be cached. good to play nice w/ +* the third party folks so they don't stop providing service to your site... +* @return +* the xml results returned as an array +*/ +function _video_apiclient_request_xml($provider, $url, $args = array(), $cacheable = true) { + ksort($args); + + // build an argument hash that we'll use for the cache id and api signing + $arghash = $provider . ':'; + foreach($args as $k => $v){ + $arghash .= $k . $v; + } + + // build the url + foreach ($args as $k => $v){ + $encoded_params[] = urlencode($k).'='.urlencode($v); + } + $url .= '?'. implode('&', $encoded_params); + + // if it's a cachable request, try to load a cached value + if ($cacheable) { + if ($cache = cache_get($arghash, 'cache')) { + return unserialize($cache->data); + } + } + + // connect and fetch a value + $result = drupal_http_request($url); + + if ($result->code == 200) { + $parser = drupal_xml_parser_create($result->data); + $vals = array(); + $index = array(); + xml_parse_into_struct($parser, $result->data, $vals, $index); + xml_parser_free($parser); + + $params = array(); + $level = array(); + $start_level = 1; + foreach ($vals as $xml_elem) { + if ($xml_elem['type'] == 'open') { + if (array_key_exists('attributes',$xml_elem)) { + list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']); + } else { + $level[$xml_elem['level']] = $xml_elem['tag']; + } + } + if ($xml_elem['type'] == 'complete') { + $php_stmt = '$params'; + while($start_level < $xml_elem['level']) { + $php_stmt .= '[$level['.$start_level.']]'; + $start_level ++; + } + $php_stmt .= '[$xml_elem[\'tag\']][] = $xml_elem[\'value\'];'; + eval($php_stmt); + $start_level--; + } + } + + // save a cacheable result for future use + if ($cacheable) { + cache_set($arghash, 'cache', time() + 3600, serialize($params)); + } + return $params; + } + return array(); +} + + +/** +* Create a file object from thumbnail images from providers +* to allow for automatic thumbnailing of videos from providers +* @param $node +* the video node being called +* @return +* a file object containing the thumbnail file +*/ +/* +function _video_apiclient_provider_auto_thumbnail($node) { + // get thumbnail url + if(_video_get_filetype($node->vidfile) == 'youtube') { + $thumbnail = _video_apiclient_youtube_thumbnail($node->vidfile); + } + else { + $thumbnail = _video_apiclient_google_thumbnail($node->vidfile); + } + + // save image to temp directory for processing + $image = image_gd_open($thumbnail, 'jpeg'); + $location = file_directory_temp() .'/'. $node->vidfile .'.jpg'; + image_gd_close($image, $location, 'jpeg'); + + + // get info and build a file object + $filepath = file_create_path($location, file_directory_temp()); + $info = image_get_info($filepath); + + $file = new stdClass(); + $file->filepath = realpath($filepath); + $file->filename = basename($file->filepath); + $file->filesize = $info['file_size']; + $file->filemime = $info['mime_type']; + + return $file; +} +*/ + |