예제 #1
0
파일: Youtube.php 프로젝트: patrova/omeka-s
 public function ingest(Media $media, Request $request, ErrorStore $errorStore)
 {
     $data = $request->getContent();
     if (!isset($data['o:source'])) {
         $errorStore->addError('o:source', 'No YouTube URL specified');
         return;
     }
     $uri = new HttpUri($data['o:source']);
     if (!($uri->isValid() && $uri->isAbsolute())) {
         $errorStore->addError('o:source', 'Invalid YouTube URL specified');
         return;
     }
     switch ($uri->getHost()) {
         case 'www.youtube.com':
             if ('/watch' !== $uri->getPath()) {
                 $errorStore->addError('o:source', 'Invalid YouTube URL specified, missing "/watch" path');
                 return;
             }
             $query = $uri->getQueryAsArray();
             if (!isset($query['v'])) {
                 $errorStore->addError('o:source', 'Invalid YouTube URL specified, missing "v" parameter');
                 return;
             }
             $youtubeId = $query['v'];
             break;
         case 'youtu.be':
             $youtubeId = substr($uri->getPath(), 1);
             break;
         default:
             $errorStore->addError('o:source', 'Invalid YouTube URL specified, not a YouTube URL');
             return;
     }
     $fileManager = $this->getServiceLocator()->get('Omeka\\File\\Manager');
     $file = $this->getServiceLocator()->get('Omeka\\File');
     $url = sprintf('http://img.youtube.com/vi/%s/0.jpg', $youtubeId);
     $this->downloadFile($url, $file->getTempPath());
     $hasThumbnails = $fileManager->storeThumbnails($file);
     $media->setData(['id' => $youtubeId, 'start' => $request->getValue('start'), 'end' => $request->getValue('end')]);
     if ($hasThumbnails) {
         $media->setFilename($file->getStorageName());
         $media->setHasThumbnails(true);
     }
 }
예제 #2
0
 /**
  * {@inheritDoc}
  */
 public function hydrate(Request $request, EntityInterface $entity, ErrorStore $errorStore)
 {
     $data = $request->getContent();
     if (Request::CREATE === $request->getOperation()) {
         // Accept the passed ingester only on CREATE to prevent overwriting
         // on subsequent UPDATE requests.
         $ingesterName = $request->getValue('o:ingester');
     } else {
         $ingesterName = $entity->getIngester();
     }
     $ingester = $this->getServiceLocator()->get('Omeka\\MediaIngesterManager')->get($ingesterName);
     if (Request::CREATE === $request->getOperation()) {
         if ($ingester instanceof Fallback) {
             $errorStore->addError('o:ingester', 'Media must set a valid ingester.');
             return;
         }
         $entity->setIngester($ingesterName);
         $entity->setRenderer($ingester->getRenderer());
         if (isset($data['o:item']['o:id'])) {
             $item = $this->getAdapter('items')->findEntity($data['o:item']['o:id']);
             $entity->setItem($item);
         }
         if (isset($data['data'])) {
             $entity->setData($data['data']);
         }
         if (isset($data['o:source'])) {
             $entity->setSource($data['o:source']);
         }
     }
     parent::hydrate($request, $entity, $errorStore);
     if ($this->shouldHydrate($request, 'o:lang')) {
         $entity->setLang($request->getValue('o:lang', null));
     }
     if (Request::CREATE === $request->getOperation()) {
         $ingester->ingest($entity, $request, $errorStore);
     } elseif ($ingester instanceof MutableIngesterInterface) {
         $ingester->update($entity, $request, $errorStore);
     }
 }