example ejemplo java url text-extraction

java - example - httpurlconnection android ejemplo



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

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 maneras más fáciles de salir sería analizar la cadena devuelta por URL.getQuery() como

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

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


Escribí este último mes para el Módulo Joomla 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.*;

Copiar / Pegar 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)


Mi solución puede no 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

trabajar bien con:

  • https://www.youtube.com/watch?param=test&v=XcHJMiSy_1c&lis=test
  • https://www.youtube.com/watch?v=XcHJMiSy_1c

Si estás en Android, puedes hacer esto:

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


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

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

o ignorando la sintaxis del prefijo:

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


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<NameValuePair> queryParams = new URIBuilder(link).getQueryParams(); return queryParams.stream() .filter(param -> param.getName().equalsIgnoreCase(paramName)) .map(NameValuePair::getValue) .findFirst() .orElse(""); }


esto funcionará para todo tipo de url de youtube :
si la url pudiera 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

reference adicional


Importar estas bibliotecas

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

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

public static List<NameValuePair> getQueryMap(String query) { List<NameValuePair> queryMap = new ArrayList<NameValuePair>(); 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%...