Obtener el parámetro URL en java y extraer un texto específico de esa URL

Tengo una URL y necesito obtener el valor de v de esta URL. Aquí está mi URL: http://www.youtube.com/watch?v=_RCIP6OrQrE

Cualquier ayuda útil y fructífera es muy apreciada.

Creo que una de las formas más fáciles sería analizar la cadena devuelta por URL.getQuery () como

 public static Map getQueryMap(String query) { String[] params = query.split("&"); Map map = new HashMap(); for (String param : params) { String name = param.split("=")[0]; String value = param.split("=")[1]; map.put(name, value); } return map; } 

Puede usar el mapa devuelto por esta función para recuperar el valor de clave en el nombre del parámetro.

Si estás en Android, puedes hacer esto:

 Uri uri = Uri.parse(url); String v = uri.getQueryParameter("v"); 

Escribí esto el mes pasado para Joomla Module al implementar videos de youtube (con la API de Gdata ). Desde entonces lo he convertido a Java.

Importar estas bibliotecas

  import java.net.URL; import java.util.regex.*; 

Copie / Pegue esta función

  public String getVideoId( String videoId ) throws Exception { String pattern = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"; Pattern p = Pattern.compile(pattern); Matcher m = p.matcher(videoId); int youtu = videoId.indexOf("youtu"); if(m.matches() && youtu != -1){ int ytu = videoId.indexOf("http://youtu.be/"); if(ytu != -1) { String[] split = videoId.split(".be/"); return split[1]; } URL youtube = new URL(videoId); String[] split = youtube.getQuery().split("="); int query = split[1].indexOf("&"); if(query != -1){ String[] nSplit = split[1].split("&"); return nSplit[0]; } else return split[1]; } return null; //throw something or return what you want } 

URL’s funcionará con

 http://www.youtube.com/watch?v=k0BWlvnBmIE (General URL) http://youtu.be/k0BWlvnBmIE (Share URL) http://www.youtube.com/watch?v=UWb5Qc-fBvk&list=FLzH5IF4Lwgv-DM3CupM3Zog&index=2 (Playlist URL) 

Importar estas bibliotecas

 import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; 

Similar a la verosimilitud, pero con la capacidad de manejar parámetros multivalores. Nota: He visto solicitudes HTTP GET sin un valor, en este caso el valor será nulo.

 public static List getQueryMap(String query) { List queryMap = new ArrayList(); String[] params = query.split(Pattern.quote("&")); for (String param : params) { String[] chunks = param.split(Pattern.quote("=")); String name = chunks[0], value = null; if(chunks.length > 1) { value = chunks[1]; } queryMap.add(new BasicNameValuePair(name, value)); } return queryMap; } 

Ejemplo:

 GET /bottom.gif?e235c08=1509896923&%49%6E%... 

Suponiendo que la syntax de la URL siempre será http://www.youtube.com/watch?v=

 String v = "http://www.youtube.com/watch?v=_RCIP6OrQrE".substring(31); 

o sin tener en cuenta la syntax del prefijo:

 String url = "http://www.youtube.com/watch?v=_RCIP6OrQrE"; String v = url.substring(url.indexOf("v=") + 2); 

Mi solución no puede ser buena

  String url = "https://www.youtube.com/watch?param=test&v=XcHJMiSy_1c&lis=test"; int start = url.indexOf("v=")+2; // int start = url.indexOf("list=")+5; **5 is length of ("list=")** int end = url.indexOf("&", start); end = (end == -1 ? url.length() : end); System.out.println(url.substring(start, end)); // result: XcHJMiSy_1c 

funciona bien con:

esto funcionará para todo tipo de url de youtube :
si url podría ser

youtube.com/?v=_RCIP6OrQrE
youtube.com/v/_RCIP6OrQrE
youtube.com/watch?v=_RCIP6OrQrE
youtube.com/watch?v=_RCIP6OrQrE&feature=whatever&this=that

 Pattern p = Pattern.compile("http.*\\?v=([a-zA-Z0-9_\\-]+)(?:&.)*"); String url = "http://www.youtube.com/watch?v=_RCIP6OrQrE"; Matcher m = p.matcher(url.trim()); //trim to remove leading and trailing space if any if (m.matches()) { url = m.group(1); } System.out.println(url); 

esto extraerá la identificación del video de tu url

referencia adicional

Tengo algo como esto:

 import org.apache.http.NameValuePair; import org.apache.http.client.utils.URIBuilder; private String getParamValue(String link, String paramName) throws URISyntaxException { List queryParams = new URIBuilder(link).getQueryParams(); return queryParams.stream() .filter(param -> param.getName().equalsIgnoreCase(paramName)) .map(NameValuePair::getValue) .findFirst() .orElse(""); } 
Intereting Posts