J'ai une URL et j'ai besoin d'obtenir la valeur de v à partir de cette URL . Voici mon URL: http://www.youtube.com/watch?v=_RCIP6OrQrE
Toute aide utile et fructueuse est hautement appréciée.
Je pense que l’une des solutions les plus simples serait d’analyser la chaîne renvoyée par URL.getQuery ()
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;
}
Vous pouvez utiliser la carte renvoyée par cette fonction pour récupérer la valeur saisie dans le nom du paramètre.
Si vous êtes sur Android, vous pouvez faire ceci:
Uri uri = Uri.parse(url);
String v = uri.getQueryParameter("v");
C'est ce que j'ai écrit le mois dernier pour Joomla Module lors de la mise en œuvre de vidéos youtube (avec le API Gdata ). Je l'ai depuis converti en Java.
Importer ces bibliothèques
import Java.net.URL;
import Java.util.regex.*;
Copier/Coller cette fonction
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 cela fonctionnera avec
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)
Importer ces bibliothèques
import org.Apache.http.NameValuePair;
import org.Apache.http.message.BasicNameValuePair;
Semblable à la vraisemblance, mais avec les capacités de gestion des paramètres à valeurs multiples. Remarque: j'ai vu les requêtes HTTP GET sans valeur. Dans ce cas, la valeur sera null.
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;
}
Exemple:
GET /bottom.gif?e235c08=1509896923&%49%6E%...
En supposant que la syntaxe de l'URL sera toujours http://www.youtube.com/watch?v= ...
String v = "http://www.youtube.com/watch?v=_RCIP6OrQrE".substring(31);
ou en ignorant la syntaxe de préfixe:
String url = "http://www.youtube.com/watch?v=_RCIP6OrQrE";
String v = url.substring(url.indexOf("v=") + 2);
Ma solution peut ne pas être bonne
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
fonctionne bien avec:
https://www.youtube.com/watch?param=test&v=XcHJMiSy_1c&lis=test
https://www.youtube.com/watch?v=XcHJMiSy_1c
J'ai quelque chose comme ça:
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("");
}
cela fonctionnera pour toutes sortes d'URL youtube:
si url pourrait être
youtube.com/?v=_RCIP6OrQrE
youtube.com/v/_RCIP6OrQrE
youtube.com/watch?v=_RCIP6OrQrE
youtube.com/watch?v=_RCIP6OrQrE&feature=wther&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);
ceci extraira video id de votre url
plus loin référence