Android Obtener enlace de video desde youtube
Hola estoy desarrollando una aplicación android y parte de mi aplicación quiere analizar el título de la canción a youtube y obtener el enlace de vídeo. No importa obtener el video 100% correcto. Así que ¿cómo recuperar datos de youtube?
¿Puede alguien ayudarme a encontrar una solución de su ayuda realmente completa para mí.
- ¿Hay una versión HD (Higher Quality) .3gp de vídeo en youtube para los jugadores de HTML?
- Modo correcto de usar YouTube.Builder
- Error de YouTubePlayerView XML
- API de YouTube de Android "Se ha producido un error al inicializar el reproductor de YouTube"
- Detectar cuándo ha terminado de reproducir un video de YouTube
Gracias
- YouTubePlayerSupportFragment inicia actividad duplicada
- Varios jugadores de Youtube en una actividad
- Cómo utilizar Youtube Player con UI moderna en Android usando YoutubePlayerSupportFragment
- Lista de reproducción de Youtube mostrada en ListView
- La API de Youtube devuelve vídeos no listados
- No se pudo encontrar un error de clase al intentar cargar un video a YouTube usando la API de gdata.
- Swipe Gesture no funciona en YouTubePlayerView en modo de pantalla completa
- Heredando ActionBarSherlock y Android YouTubePlayer
La forma más común de hacerlo es usar la API de datos de Youtube, que devolverá XML / Json que puede analizar para recuperar cosas como la url de vídeo.
Actualizado (2017/01/24) (v3)
Utilice la siguiente llamada para buscar vídeos de YouTube mediante una consulta de búsqueda:
https://www.googleapis.com/youtube/v3/search?part=snippet&q=fun%20video&key=YOUR-API-KEY
Soporta los siguientes parámetros básicos para la búsqueda:
- Parte : Datos de vídeo que desea recuperar en la búsqueda. Para las búsquedas básicas, el valor recomendado es un fragmento .
- Q : El texto que desea buscar
- Clave : Su clave de API de desarrollador de Google. Esta clave se puede obtener en la Consola de la API de Google Developer en la página Credenciales de la aplicación. Asegúrese de habilitar la API de datos de Youtube v3 en la aplicación a la que pertenece su clave.
Para obtener más parámetros, consulte la documentación de la API de Google
Uso de la biblioteca Java
En Android puede hacer una solicitud HTTP a la URL utilizando las clases de solicitud HTTP estándar disponibles en la plataforma o puede utilizar la Biblioteca Java de la API de Google como se muestra a continuación:
YouTube youtube = new YouTube.Builder(Auth.HTTP_TRANSPORT, Auth.JSON_FACTORY, new HttpRequestInitializer() { public void initialize(HttpRequest request) throws IOException { } }).setApplicationName("YOUR-APPLICATION-NAME").build(); String queryTerm = "A fun video" // Define the API request for retrieving search results. YouTube.Search.List search = youtube.search().list("id,snippet"); search.setKey("Your-Api-Key"); search.setQ(queryTerm); // Call the API and print first result. SearchListResponse searchResponse = search.execute(); if(searchResponse.getItems().size() == 0) { //No items found. return; } SearchResult firstItem = searchResponse.getItems().get(0); ResourceId rId = firstItem.getId(); // Confirm that the result represents a video. Otherwise, the // item will not contain a video ID. if (rId.getKind().equals("youtube#video")) { Thumbnail thumbnail = firstItem.getSnippet().getThumbnails().getDefault(); Log.d("YOUTUBE_SAMPLE","Video Id" + rId.getVideoId()); Log.d("YOUTUBE_SAMPLE","Title: " + firstItem.getSnippet().getTitle()); Log.d("YOUTUBE_SAMPLE","Thumbnail: " + thumbnail.getUrl()); }
Debería buscar la API oficial de Youtube:
https://developers.google.com/youtube/code?hl=fr#Java
Te devuelve Json sólo tienes que analizar.
Hola Gracias a todos ustedes por señalarme el camino que quiero en barbecho. Yo había llegado a algo finalmente y también me gusta compartir mi expirance
De acuerdo con el youtube podemos solicitar datos como xml o json. Utilicé el método json para mi implementación
http://gdata.youtube.com/feeds/api/videos?q=title_you_want_to_search&max-results=1&v=2&alt=jsonc
Puede obtener más información de la guía de desarrolladores de youtube
Arriba de la solicitud "title_you_want_to_search" es la palabra clave que desea buscar. Y podemos personalizar el resultado pasando los parámetros adicionales a la url.
- "Max-results": mencione cuántos resultados desea obtener (en mi caso sólo quiero uno)
- "Alt": el formato que desea resultados Json o xml
Primero necesitamos solicitar datos de la API de Youtube y luego tenemos que seleccionar qué parte de la información queremos elegir de matriz. En mi caso utilicé los "datos" y los "artículos" para conseguir el videoid. Después de que pegamos el videoId entonces podemos hacer la URL del video como esta
String mVideoLink = "https://youtu.be/"+videoID;
(Utilicé las siguientes funciones para conseguir esta cosa hecha)
public String readYoutubeFeed(String songTitle) { StringBuilder builder = new StringBuilder(); HttpClient client = new DefaultHttpClient(); String url = "http://gdata.youtube.com/feeds/api/videos?q="+songTitle+"&max-results=1&v=2&alt=jsonc"; try { URLEncoder.encode(url, "UTF-8"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); Log.v(TAG,"encode error"); } HttpGet httpGet = new HttpGet(url); try { HttpResponse response = client.execute(httpGet); StatusLine statusLine = response.getStatusLine(); int statusCode = statusLine.getStatusCode(); if (statusCode == 200) { HttpEntity entity = response.getEntity(); InputStream content = entity.getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(content, "UTF-8")); String line; while ((line = reader.readLine()) != null) { builder.append(line); } } else { Log.v(TAG,"Failed to download file"); } } catch (ClientProtocolException e) { e.printStackTrace(); Log.v(TAG,"readYoutubeFeed exeption1"); } catch (IOException e) { e.printStackTrace(); Log.v(TAG,"readYoutubeFeed exeption2"); } return builder.toString(); } public String getYouTubeVideoId(String songTitle){ String jesonData = readYoutubeFeed(songTitle); Log.i(TAG,jesonData); String title = "123"; try { SONObject jObj = new JSONObject(jesonData); JSONArray ja = jObj.getJSONObject("data").getJSONArray("items"); JSONObject jo = (JSONObject) ja.get(0); title = jo.getString("id"); Log.v(TAG,"id is " +title); } catch (Exception e) { e.printStackTrace(); Log.v(TAG,"error occerd"); } return title;
}
Una cosa importante que quiero mencionar en esta conversión de cadenas a "UTF-8" es lo que quiere hacer porque la creación de JsonArray puede ser lanzar excepciones. Puede ser que hay mejores maneras de hacer esto. Si hay alguna sugerencia
- Error de Proguard, no se puede exportar la aplicación
- Android: uses-sdk minSdkVersion es ignorado por Play Store?