Obtendo o parâmetro de URL em java e extrair um texto específico desse URL

Eu tenho um URL e preciso obter o valor de v desse URL. Aqui está o meu URL: http://www.youtube.com/watch?v=_RCIP6OrQrE

Qualquer ajuda útil e proveitosa é muito apreciada.

Eu acho que uma das maneiras mais fáceis seria analisar a string retornada 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; } 

Você pode usar o mapa retornado por essa function para recuperar a chave de valor no nome do parâmetro.

Se você está no Android, você pode fazer isso:

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

Eu escrevi isso no mês passado para o Joomla Module ao implementar vídeos do youtube (com a API do Gdata ). Eu já converti para java.

Importar estas bibliotecas

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

Copiar / Colar esta function

  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 vai trabalhar com

 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) 

Importe essas bibliotecas

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

Semelhante à verossimilhança, mas com a capacidade de lidar com parâmetros de vários valores. Nota: Eu vi solicitações HTTP GET sem um valor, nesse caso, o 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; } 

Exemplo:

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

Supondo que a syntax da URL sempre será http://www.youtube.com/watch?v=

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

ou desconsiderando a syntax do prefixo:

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

Minha solução não é boa

  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 

trabalhe bem com:

isso funcionará para todo tipo de URL do youtube :
se o URL puder 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); 

isso extrairá o ID do vídeo do seu url

referência adicional

Eu tenho algo assim:

 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