Este artigo foi escrito e enviado por um desenvolvedor externo. A equipe de APIs e ferramentas do YouTube agradece a Martin Legris pelo seu tempo e conhecimento.
Martin Legris
Março de 2008
Introdução
Neste tutorial, você verá como, com menos de 10 linhas de código AS3, é possível recuperar os vídeos mais assistidos no YouTube para os últimos day
, week
, month
ou all_time
. Você pode acessar qualquer um dos feeds padrão:
- Mais assistidos
- Mais recentes
- Mais comentados
- Mais conectados
- Mais respondidos
- Destaques recentes
- Bem avaliados
- Mais adotados como favoritos
- Vídeos para celulares
A biblioteca usada neste exemplo é digitada na íntegra, o que significa que, depois de receber os dados, você pode usar o recurso de preenchimento automático em ambientes de desenvolvimento integrado, como FlashDevelop, Flex IDE, Eclipse w/FDT, IntelliJ Idea e outros.
Recursos importantes
Antes de começarmos, veja a lista de recursos disponíveis para você, o desenvolvedor AS3 interessado em usar dados da API do YouTube.
- A biblioteca AS3 que desenvolvi para consumir esses serviços da Web
- Documentação oficial da API YouTube Data
- Ambiente de desenvolvimento integrado do FlashDevelop para AS3
- Uma lista de quais eventos são disparados por chamada de solicitação feita no YouTubeClient
Explorar
Como fazer sua primeira solicitação
O código a seguir é bem comentado. No entanto, vou descrever a funcionalidade um pouco antes de começar. O ponto de partida para todas as solicitações é uma classe chamada YouTubeClient
. Essa classe é um Singleton ao qual você pode acessar da seguinte maneira:
// first you import it import ca.newcommerce.youtube.webservice.YouTubeClient; // then you get a reference to it var client:YouTubeClient = YouTubeClient.getInstance();
Agora estamos prontos para fazer uma solicitação:
client.getStandardFeed(YouTubeClient.STD_TOP_RATED, YouTubeClient.TIME_MONTH, 1, 10);
Acabei de solicitar os vídeos mais bem avaliados no último mês, com os resultados de 1 a 10. Há um máximo de 50 resultados por chamada. Isso é fácil!
Como processar os resultados
Agora, como faço para acessar esses resultados? Como o paradigma do tipo de serviço da Web REST é assíncrono, é mais fácil usar eventos para processar os resultados em vez de interromper o código enquanto os resultados são buscados. Nesse caso, precisamos declarar um listener de eventos para o evento StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED
. Nossa função será chamada sempre que o YouTubeClient
receber uma resposta para um feed padrão.
client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, doVideosReceived);
A função a ser chamada será doVideosReceived
. Será necessário um parâmetro, uma variável do tipo StandardVideoFeedEvent
. Isso segue o padrão no AS3. Vamos fazer a declaração e rastrear alguns dados sobre os vídeos que recebemos. Rastrearemos na saída padrão:
- o título do vídeo,
- o URL do SWF para incorporar o vídeo,
- a contagem de visualizações;
- a contagem de comentários;
- a duração do vídeo;
- e o nome do autor.
function doVideosReceived(evt:StandardVideoFeedEvent):void { // get a reference to the feed containing the videos var feed:VideoFeed = evt.feed; // variable to hold each video retreived on the feed var video:VideoData; // iterate through the availabe results while(video = feed.next()) { // trace a newline followed by the video title trace("\nvideo title:"+video.title); // trace the url to use to embed the flash player with this video playing in it.. trace("player url:"+video.swfUrl); // the view count trace("viewCount:"+video.viewCount); // the comment count trace("commentCount:"+video.commentCount); // the duration trace("duration:"+video.duration); // the author trace("author:"+video.authors.first().name); } }
Algumas observações sobre a biblioteca e os feeds
Quase todos os eventos têm uma propriedade .feed
. ProfileEvent
é a única exceção. Ele tem uma propriedade .profile
, já que há apenas um registro retornado por essa chamada.
Existem muitos tipos de feed, todos eles implementam os seguintes métodos:
first()
: recupera o primeiro registro e aponta para ele.next()
: recupera o próximo registro disponível.last()
: recupera o último registro e aponta para ele.previous()
: recupera o registro anterior no feed.getAt()
: acessa um resultado em uma posição específica.count()
: o número de resultados disponíveis para este feed, diferente do número detotalResults
Quando você chegar ao fim dos resultados, next()
retornará um valor nulo. O mesmo que no caso anterior, quando você chegar ao primeiro resultado, a próxima chamada para previous()
retornará null
.
Os dados dentro dos feeds (por exemplo, categorias) são encapsulados dentro de Iterators
. Assim, é possível usar as mesmas funções para percorrer as categorias disponíveis.
Código-fonte completo
Veja a seguir o código-fonte completo deste exemplo. Você pode fazer o download de um zip que contém tudo o que você precisa para executar o exemplo dentro do Flash CS3. No entanto, é melhor atualizar a biblioteca, caso tenhamos corrigido os bugs ou os recursos da atualização. Clique aqui para fazer o download da biblioteca.
package { // first import dependencies (You can be more specific than this if you want) import ca.newcommerce.youtube.data.*; import ca.newcommerce.youtube.events.*; import ca.newcommerce.youtube.feeds.*; import ca.newcommerce.youtube.iterators.*; import ca.newcommerce.youtube.webservice.YouTubeClient; public class ytTest() { // some class variables protected var _ws:YouTubeClient; protected var _requestId:Number; public function ytTest() { // now inside of an init function _ws = YouTubeClient.getInstance(); // register to list to the events you are interested in _ws.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, doVideosReceived); // do your call.. get the Top Rated videos for the last month // results 1 to 10; it returns a requestId _requestId = _ws.getStandardFeed(YouTubeClient.STD_TOP_RATED, YouTubeClient.TIME_MONTH, 1, 10); } protected function doVideosReceived(evt:StandardVideoFeedEvent):void { // get a reference to the feed containing the videos var feed:VideoFeed = evt.feed; // variable to hold each video retrieved on the feed var video:VideoData; while(video = feed.next()) { // trace a newline followed by the video title trace("\nvideo title:"+video.title); // trace the swf URL (used for embedding) trace("player url:"+video.swfUrl); // the view count trace("viewCount:"+video.viewCount); // the comment count trace("commentCount:"+video.commentCount); // the duration trace("duration:"+video.duration); // the author trace("author:"+video.authors.first().name); } } } }
Conclusão
Embora este artigo mal toque na ponta do iceberg, você terá uma boa ideia de como é simples consultar a API de dados do YouTube usando essa biblioteca. Como eu dediquei muito tempo para digitar tudo, é muito fácil explorar quais dados estão disponíveis em cada resposta do feed. Ela ainda não oferece suporte à nova funcionalidade de gravação e upload. Se você quiser contribuir com a biblioteca, acesse a página do projeto.
Biografia do autor

Martin Legris conta com 12 anos de desenvolvimento ativo de software. Atualmente, ele se concentra principalmente na pesquisa de interface do usuário, e sua ferramenta favorita é o Flash, com ActionScript. Confira o blog dele em blog.martinlegris.com e o site (pode estar desatualizado) em www.newcommerce.ca.
Este trabalho está licenciado sob a
Licença Creative Commons Attribution 3.0 Estados Unidos.