Подтвердить что ты не робот

Получение параметра URL в java и извлечение определенного текста из этого URL-адреса

У меня есть URL-адрес, и мне нужно получить значение v из этого URL-адреса. Вот мой URL: http://www.youtube.com/watch?v=_RCIP6OrQrE

Любая полезная и плодотворная помощь очень ценится.

4b9b3361

Ответ 1

Я думаю, что одним из самых простых способов было бы проанализировать строку, возвращаемую 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;  
}

Вы можете использовать карту, возвращаемую этой функцией, для получения ключа значения в имени параметра.

Ответ 2

Если вы на Android, вы можете сделать это:

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

Ответ 3

Я написал этот последний месяц для модуля Joomla при реализации видео YouTube (с API Gdata). С тех пор я преобразовал его в java.

Импортировать эти библиотеки

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

Скопировать/Вставить эту функцию

    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 будет работать с

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

Импортировать эти библиотеки

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

Подобно правдоподобие, но с возможностями обработки многозначных параметров. Примечание. Я видел HTTP GET-запросы без значения, в этом случае значение будет равно 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;
}

Пример:

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

Ответ 5

Предполагая, что синтаксис URL всегда будет http://www.youtube.com/watch?v=...

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

или без синтаксиса префикса:

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

Ответ 6

Мое решение не очень хорошее

        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

отлично работает с:

Ответ 7

это будет работать для всех типов youtube. url:
если URL может быть

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

это извлечет видео id из вашего url

далее ссылка

Ответ 8

У меня есть что-то вроде этого:

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