wake-up-neo.net

URL-Parameter in Java abrufen und einen bestimmten Text aus dieser URL extrahieren

Ich habe eine URL und ich muss den Wert von v von dieser URL abrufen .. Hier ist meine URL: http://www.youtube.com/watch?v=_RCIP6OrQrE

Jede nützliche und fruchtbare Hilfe wird sehr geschätzt.

19
bynu022

Ich denke, der einfachste Ausweg wäre, die von URL.getQuery () as zurückgegebene Zeichenfolge zu analysieren

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;  
}

Sie können die von dieser Funktion zurückgegebene Zuordnung verwenden, um die Werteverteilung im Parameternamen abzurufen.

51
verisimilitude

Wenn Sie mit Android arbeiten, können Sie Folgendes tun:

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

Ich habe diesen letzten Monat für Joomla Module geschrieben, als ich Youtube-Videos implementierte (mit der Gdata API ). Ich habe es seitdem in Java konvertiert.

Importiere diese Bibliotheken

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

Kopieren/Einfügen dieser Funktion

    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
    }

URLs funktionieren mit

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

Importiere diese Bibliotheken

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

Ähnlich wie die Verisimilitude, jedoch mit der Fähigkeit, mehrwertige Parameter zu verarbeiten. Hinweis: Ich habe HTTP-GET-Anforderungen ohne Wert gesehen. In diesem Fall ist der Wert 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;
}

Beispiel:

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

Angenommen, die URL-Syntax lautet immer http://www.youtube.com/watch?v= ...  

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

oder die Präfixsyntax ignorieren:

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

Ich glaube, wir haben einen besseren Ansatz, um diese Frage zu beantworten.

1: Definieren Sie eine Funktion, die Kartenwerte zurückgibt.

Auf geht's.

public Map<String, String> getUrlValues(String url) throws UnsupportedEncodingException {
    int i = url.indexOf("?");
    Map<String, String> paramsMap = new HashMap<>();
    if (i > -1) {
        String searchURL = url.substring(url.indexOf("?") + 1);
        String params[] = searchURL.split("&");

        for (String param : params) {
            String temp[] = param.split("=");
            paramsMap.put(temp[0], Java.net.URLDecoder.decode(temp[1], "UTF-8"));
        }
    }

    return paramsMap;
}

2: Rufen Sie Ihre Funktionsumgebung mit einem try catch-Block auf

Auf geht's

try {
     Map<String, String> values = getUrlValues("https://example.com/index.php?form_id=9&page=1&view_id=78");
     String formId = values.get("form_id");
     String page = values.get("page");
     String viewId = values.get("view_id");
     Log.d("FormID", formId);
     Log.d("Page", page);
     Log.d("ViewID", viewId);
} catch (UnsupportedEncodingException e) {
     Log.e("Error", e.getMessage());
} 
2

Wenn Sie Jersey verwenden (was ich war, muss meine Serverkomponente ausgehende HTTP-Anforderungen stellen), enthält sie die folgende öffentliche Methode:

var multiValueMap = UriComponent.decodeQuery(uri, true);

Es ist Teil von org.glassfish.jersey.uri.UriComponent, und der Javadoc ist hier . Vielleicht möchten Sie nicht ganz Jersey, aber es ist Teil des allgemeinen Pakets Jersey , was bei Abhängigkeiten nicht so schlimm ist ...

1
Ian

Meine Lösung mag nicht gut sein

        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

funktioniert gut mit:

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

Ich habe so etwas:

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

dies funktioniert für alle Arten von youtube url:
wenn url sein könnte

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

dadurch wird video id aus Ihrer url extrahiert.

weiter referenz

0
Harmeet Singh