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%...