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.
