1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- <?php
- /**
- * Implementation of MediaInternetBaseHandler.
- *
- * @see hook_media_internet_providers().
- */
- class MediaInternetVimeoHandler extends MediaInternetBaseHandler {
- public function parse($embedCode) {
- // Vimeo has a few URL formats:
- // http://vimeo.com/*
- // http://vimeo.com/video/*
- // http://vimeo.com/groups/*/videos/*
- // http://vimeo.com/channels/*#$ID
- $patterns = array(
- '@vimeo\.com/(\d+)@i',
- '@vimeo\.com/video/(\d+)@i',
- '@vimeo\.com/groups/.+/videos/(\d+)@i',
- '@vimeo\.com/channels/.+#(\d+)@i',
- );
- foreach ($patterns as $pattern) {
- preg_match($pattern, $embedCode, $matches);
- if (isset($matches[1])) {
- return file_stream_wrapper_uri_normalize('vimeo://v/' . $matches[1]);
- }
- }
- }
- public function claim($embedCode) {
- if ($this->parse($embedCode)) {
- return TRUE;
- }
- }
- public function save() {
- $file = $this->getFileObject();
- file_save($file);
- return $file;
- }
- public function getFileObject() {
- $uri = $this->parse($this->embedCode);
- //@todo: this is terribly broken in some ways because the function is really
- // made for local files which are 'real'
- $file = file_uri_to_object($uri, TRUE);
- // Try to default the file name to the video's title.
- if (empty($file->fid) && $info = $this->getOEmbed()) {
- $file->filename = truncate_utf8($info['title'], 255);
- }
- return $file;
- }
- /**
- * Returns information about the media.
- *
- * See http://video.search.yahoo.com/mrss
- *
- * @return
- * If ATOM+MRSS information is available, a SimpleXML element containing
- * ATOM and MRSS elements, as per those respective specifications.
- *
- * @todo Would be better for the return value to be an array rather than a
- * SimpleXML element, but media_retrieve_xml() needs to be upgraded to
- * handle namespaces first.
- */
- public function getMRSS() {
- $uri = $this->parse($this->embedCode);
- $video_id = arg(1, file_uri_target($uri));
- $rss_url = url('http://gdata.vimeo.com/feeds/api/videos/' . $video_id, array('query' => array('v' => '2')));
- // @todo Use media_retrieve_xml() once it's upgraded to include elements
- // from all namespaces, not just the document default namespace.
- $entry = simplexml_load_file($rss_url);
- return $entry;
- }
- /**
- * Returns information about the media.
- *
- * See http://www.oembed.com/ and https://vimeo.com/api/docs/oembed
- *
- * @return
- * If oEmbed information is available, an array containing 'title', 'type',
- * 'url', and other information as specified by the oEmbed standard.
- * Otherwise, NULL.
- */
- public function getOEmbed() {
- $uri = $this->parse($this->embedCode);
- $external_url = drupal_realpath($uri);
- $oembed_url = url('http://vimeo.com/api/oembed.json', array(
- 'query' => array('url' => $external_url))
- );
- $response = drupal_http_request($oembed_url);
- if (!isset($response->error)) {
- return drupal_json_decode($response->data);
- }
- }
- }
|