Se você está precisando comunicar com o youtube através da sua API v3 está no lugar certo. Recentemente tive que fazer essa integração da API com um serviço Rest onde seria enviado a URL contendo o ID do vídeo e então era necessário carregar as informações desse vídeo e fazer a persistência no banco de dados.
Antes de estudar e utilizar os recursos que a própria API v3 oferece eu criei as classes modelos “na raça” para serializar os objetos via Json através de uma chamada de uma URL(https://www.googleapis.com/youtube/v3/videos?). Então estou deixando duas formas de buscar informações de um vídeo através da sua URL do youtube.
Mas o que é API v3 Youtube?
A API v3 youtube permite aos usuários integrar seu programa com o YouTube e deixe-a executar muitas das operações disponíveis no site. Ele fornece a capacidade de procurar por vídeos, recuperar feeds padrão, e ver o conteúdo relacionado, também pode autenticar como usuário para fazer upload de vídeos, modificar listas de usuários, e muito mais.
Esta integração pode ser usado para uma variedade de usos, tais como o desenvolvimento de uma aplicação web que permite aos usuários fazer upload de vídeo para o YouTube, ou um aplicativo de dispositivo ou desktop que traz a experiência do YouTube para uma nova plataforma.
A API de dados dá aos usuários acesso programático para o vídeo e informações do usuário armazenadas no YouTube. Isso pode ser usado para personalizar um site ou aplicação com informação existente do usuário, bem como realizar ações como comentar e vídeos de rating.
Vamos lá, mãos a obra!
Toda documentação sobre a API V3 youtube pode ser encontrada nesse link . O retorno dessas chamadas é em Json, caso não conheça sobre essa notação veja esse link e estude isso é muito importante!
Opção 1 – Chamada HTTP
Nesse código não utilizaremos a API em si no nosso código java e sim efetuaremos uma chamada HTTP para uma url onde será retornada o Json e então iremos serializar através das nossas classes modelo. A url para a chamada é a seguinte:
https://www.googleapis.com/youtube/v3/videos?id={IDVIDEO={SUACHAVE}&part=snippet,contentDetails,statistics,status
package br.com.kelvinsantiago.servicos; import com.google.gson.Gson; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.util.ArrayList; import java.util.List; /** * @author Kelvin Santiago */ public class Youtube { private static final String API_URL = "https://www.googleapis.com/youtube/v3/videos?"; private static final String KEY = "SUACHAVE"; private static final String PART = "snippet,contentDetails,statistics,status"; public static void main(String[] args) throws Exception { Youtube youtube = new Youtube(); RespostaYoutube respostaYoutube = youtube.obterDadosVideo("https://www.youtube.com/watch?v=jdqsiFw74Jk"); System.out.println(respostaYoutube.items.get(0).id); } public RespostaYoutube obterDadosVideo(String URL){ Gson gson = new Gson(); String retornoJson = null; try { // Faz o split para obter o ID do video String ID = URL.split("v=")[1]; retornoJson = lerUrl(API_URL + "id="+ID +"&"+ "key=" + KEY + "&" + "part=" + PART); } catch (Exception e) { e.printStackTrace(); return null; } return gson.fromJson(retornoJson, RespostaYoutube.class); } private static String lerUrl(String urlString) throws Exception { BufferedReader leitor = null; try { URL url = new URL(urlString); leitor = new BufferedReader(new InputStreamReader(url.openStream())); StringBuffer buffer = new StringBuffer(); int read; char[] chars = new char[1024]; while ((read = leitor.read(chars)) != -1) buffer.append(chars, 0, read); return buffer.toString(); } finally { if (leitor != null) leitor.close(); } } public class RespostaYoutube{ public List<Items> items = new ArrayList<Items>(); } public class Items{ public Snippet snippet; public Statistics statistics; public String id; } public class Snippet{ public String title; public String description; public Thumbnails thumbnails; public List<String> tags = new ArrayList<String>(); } public class Statistics{ public long likeCount; public long viewCount; } public class Thumbnails{ Medium medium; High high; } public class Medium{ String url; long width; long height; } public class High{ String url; long width; long height; } }
Opção 2 – Chamada através da API v3
Já neste código é utilizado a a API do youtube, nós utilizamos a dependência “google-api-services-youtube”, que poderá ser encontrada no repositório do maven e inserida no seu arquivo pom.xml do seu projeto.
Dependência Maven
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-youtube</artifactId>
<version>v3-rev178-1.22.0</version>
</dependency>
package br.com.kelvinsantiago.servicos; import com.google.api.client.googleapis.json.GoogleJsonResponseException; import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpRequestInitializer; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.services.youtube.YouTube; import com.google.api.services.youtube.model.Video; import org.springframework.stereotype.Repository; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.List; /** * @author Kelvin Santiago */ @Repository public class YoutubeAPI { public final String API_KEY = "SUACHAVE"; private YouTube youtube; /** * Método responsável por buscar dados do video passando o ID. * * @param idVideo * @return */ public Video buscarPeloIdVideo(String idVideo) { try { youtube = new YouTube.Builder(new NetHttpTransport(), new JacksonFactory(), new HttpRequestInitializer() { public void initialize(HttpRequest request) throws IOException { } }).setApplicationName("appAmaYoutube").build(); // Definindo objeto com os atributos de retorno da busca. YouTube.Videos.List busca = youtube.videos().list("id,snippet,statistics"); // Setando ID do video busca.setId(idVideo); // Setando KEY do Youtube. busca.setKey(API_KEY); // Executando busca. List<Video> respostaBuscaYoutube = busca.execute().getItems(); // Imprimindo dado de resposta System.out.println(respostaBuscaYoutube); return respostaBuscaYoutube.get(0); } catch (GoogleJsonResponseException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Throwable t) { t.printStackTrace(); } return null; } /** * Método responsável por retornar apenas o ID da URL do Youtube * * @param URL * @return */ public String splitURL(String URL) { try { return URL.split("v=")[1]; } catch (Exception e) { e.printStackTrace(); return null; } } /** * Método responsável por converter imagem de URL para Byte[] * @param linkURL * @return */ public byte[] getBytesImagemURL(String linkURL) { URL imageURL = null; try { imageURL = new URL(linkURL); // Lendo imagem diretamente da URL BufferedImage originalImage = ImageIO.read(imageURL); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(originalImage, "jpg", baos); baos.flush(); byte[] imageBytes = baos.toByteArray(); return imageBytes; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } }
Concluindo
Espero que você tenha conseguido efetuar sua integração com a API v3 do youtube, caso você tenha alguma dúvida ou até mesmo queira deixar algum feedback, utilize o formulário de comentários abaixo.