2012-01-28 2 views
3

내 채널에서 업로드 한 최신 비디오의 비디오 - 미리보기 이미지를 반환하고 내 웹 사이트에 표시하려고합니다.Youtube API 가져 오기 최신 업로드 미리보기 이미지

최소 연결 물마루 API를 사용하여 미리보기 이미지를 가져 오는 방법을 알고 계신 분도 계실 것입니다.

감사합니다. -Tom

개정 됨 !!

Cakephp를 사용하여, 어떻게 했는가? (젠드를 사용하여 제안 해 주신 덕분에);

컨트롤러 :

App::import('Xml'); 
$channel = 'Blanktv'; 
$url = 'https://gdata.youtube.com/feeds/api/users/'.$channel.'/uploads?v=2&max-results=1&orderby=published'; 
$parsed_xml =& new XML($url); 
$parsed_xml = Set::reverse($parsed_xml); 
//debug($parsed_xml); 
$this->set('parsed_xml',$parsed_xml); 

보기;

$i=0; 
foreach ($parsed_xml as $entry) 
{   
    echo '<a href="/videokanalen" target="_self">      
    <img width="220px" src="'.$entry['Entry']['Group']['Thumbnail'][1]['url'] .'"> 
    </a>';    
} 

이제 남은 것은 피드 호출을 캐시하는 것입니다. 어떤 제안입니까? 여기에 톰

답변

2

정말 API를 전혀 건드리지 않고 그 일의 빠른 더러운 방법입니다.

나는 그것이 더 좋은 방법이라고 제안하지 않으며 더 똑똑한 방법이 있다고 확신하지만 현재의 Youtube 피드 서비스에서 확실히 작동합니다.

제 솔루션은 Zend Framework의 Zend_Feed_Reader 구성 요소를 사용하는 PHP입니다. 익숙하지 않은 경우 손으로 직접 설정해야합니다.

기본적으로 Zend.com here에서 버전 1.11을 다운로드 한 다음 PHP 포함 경로에서 프레임 워크 파일에 액세스 할 수 있는지 확인하십시오.

이미 MVC 패턴에 젠드 프레임 워크를 사용하는 경우는 선택한 컨트롤러 액션이 작업을 수행 할 수 있습니다

$channel = 'Blanktv'; //change this to your channel name 
$url = 'https://gdata.youtube.com/feeds/api/users/'.$channel.'/uploads'; 
$feed = Zend_Feed_Reader::import($url); 
$this->view->feed = $feed; 

그런 다음 당신이보기에이 작업을 수행 할 수 있습니다

<h1>Latest Video</h1> 
<div> 
<?php 
$i=0; 
foreach ($this->feed as $entry) 
{   
    $urlChop = explode ('http://gdata.youtube.com/feeds/api/videos/',$entry->getId()); 
    $videoId = end($urlChop);       
    echo '<h3><a href="http://www.youtube.com/watch?v=' . $videoId .'" target="_blank">' . $entry->getTitle() . '</a></h3>'; 
    echo '<p>Uploaded on: '. $entry->getDateCreated() .'</p>'; 

    echo '<a href="http://www.youtube.com/watch?v=' . $videoId .'" target="_blank">      
    <img src="http://img.youtube.com/vi/' . $videoId .'/hqdefault.jpg"> 
    </a>';     
    $i++; 
    if($i==1) break; 
} 
?> 
</div> 

그렇지 않으면 당신을 할 수있다 :

<?php 
$channel = 'Blanktv'; //change this to your channel 
$url = 'https://gdata.youtube.com/feeds/api/users/'.$channel.'/uploads'; 
$feed = Zend_Feed_Reader::import($url); 
?> 
<h1>Latest Video</h1> 
<div> 
<?php 
$i=0; 
foreach ($feed as $entry) 
{   
    $urlChop = explode ('http://gdata.youtube.com/feeds/api/videos/',$entry->getId()); 
    $videoId = end($urlChop);       
    echo '<h3><a href="http://www.youtube.com/watch?v=' . $videoId .'" target="_blank">' . $entry->getTitle() . '</a></h3>'; 
    echo '<p>Uploaded on: '. $entry->getDateCreated() .'</p>'; 

    echo '<a href="http://www.youtube.com/watch?v=' . $videoId .'" target="_blank">      
    <img src="http://img.youtube.com/vi/' . $videoId .'/hqdefault.jpg"> 
    </a>';     
    $i++; 
    if($i==1) break; 
} 
?> 
</div> 

아마도 후자의 방법을 사용하면 PHP requi Zend_Feed_Reader 파일 등에 대한 re 문 ....

희망이 있으면 도움이 될 것입니다.

모든 최선을,

데이브

UPDATE : 캐싱에 대한 당신의 의견에 응답

하이 톰, 여기 캐시를 사용 할 수 있지만하지 않는 다른 신속하고 더러운 솔루션입니다 구현이 매우 빠르다.

캐싱 구성 요소를 사용하지 않은 이유는 간단한 db 솔루션으로 상황이 충분하다고 판단했기 때문입니다.나는 또한 새 것이 든 아닌지를 비교하기 위해 사료를 가져와야한다고 생각하여 당신에게 가장 경제적이지는 않을 것입니다.

특정 시간에이 프로세스가 자동으로 실행되도록 자동화 할 수 있지만 프로세스를 자동화하고 링크를 클릭하여 수동으로 비디오를 업데이트 할 필요가없는 경우이 방법으로 트리거 할 수 있습니다.

내 솔루션은 ZF를 기반으로하지만 cakephp와 함께 유용한 정보를 해킹 한 것이므로 여기에서도 동일한 작업을 수행해야합니다.

먼저 새 테이블 (MySQL의 DB를 가정) 설정 :이 템플릿에 사용하기 위해 최신 비디오 정보를 원하시면 그러나 기본값 내가 설정 한을 테이블을 생성합니다

CREATE TABLE `yourdbname`.`latestvid` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique identifier', 
`videoId` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'Video id', 
`videoTitle` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'Video title', 
`uploadDate` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'Video upload date' 
) ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_general_ci; 

INSERT INTO `yourdbname`.`latestvid` (`id`, `videoId`, `videoTitle`, `uploadDate`) VALUES (NULL, '--', '--', '--'); 

것은하지 않을 것이다 명백한 이유로 템플릿을 사용하십시오.

public function updateAction() 
{ 
    $this->_helper->viewRenderer->setNoRender(); // disable view 
    $this->_helper->layout()->disableLayout(); // disable layout 

    $user = 'Blanktv'; // insert your channel name 
    $url = 'https://gdata.youtube.com/feeds/api/users/'.$user.'/uploads'; 
    $feed = Zend_Feed_Reader::import($url); 

    if(!$feed) 
    { 
     die("couldn't access the feed"); // Note: the Zend component will display an error if the feed is not available so this wouldn't really be necessary for ZF 
    } 
    else 
    { 
     $i=0; 
     foreach ($feed as $entry) 
     {   
      $urlChop = explode ('http://gdata.youtube.com/feeds/api/videos/',$entry->getId()); 
      $videoId = end($urlChop);        
      $videoTitle = $entry->getTitle(); 
      $uploadDate = $entry->getDateCreated();   

      // use your preferred method to update the db record where the id = 1    

      $i++; 
      if($i==1) break; 
     } 
    }  
} 

은 아마 이동이 나를 당신이 얻을 방법을 알려 주시기 :

그런 다음이 비슷한을 할 수 있습니까?

축소판 제외하고 데이터베이스에서 Youtube 대신 변수를 가져 오려면 템플릿을 조정해야합니다.

미리보기 이미지가 여전히 YouTube에서 가져와지고 작업 속도가 느려질 수 있으므로 항상이 방법을 사용하고 이미지를 저장하는 것이 좋습니다.

표준 브랜딩이 필요한 일련의 비디오를 실행하는 경우 축소판을 자신의 서버에 복사하고 db에 경로를 저장하거나 표준 축소판을 사용하는 스크립트를 설정할 수 있습니다.

- D

데이브

+0

안녕 데이브! 정말 좋은 제안, 나를 많이 도와 줬어. 나는 cakephp를 사용하고 있으며, 인터넷 검색을 한 후, 귀하의 접근 방식을 사용하여 제 질문에 대한 수정 된 답을 찾았습니다. 이제 남은 것은 누군가가 웹 사이트의 메인 페이지를 방문 할 때마다 피드를받지 않도록 YouTube에 전화를 캐시하는 것입니다. 어떤 제안? – Tom

+0

안녕하세요 톰, 도움이되어 기쁩니다 .-D, 피드 캐싱에 관해서는 빠른 생각을하고 나중에 오늘 밤에 다시 방문하겠습니다. – dkcwd

+0

지금 업데이트되었습니다. – dkcwd

관련 문제