web-dev-qa-db-fra.com

Obtenir le paramètre d'URL en Java et extraire un texte spécifique à partir de cette URL

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.

19
bynu022

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.

51
verisimilitude

Si vous êtes sur Android, vous pouvez faire ceci:

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

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)
4
Killrawr

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%...
3
Jan Miller

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);
2
rtheunissen

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
1
vuhung3990

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("");
    }
0
Tomasz Szymulewski

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

0
Harmeet Singh