У меня есть URL-адрес, и мне нужно получить значение v из этого URL-адреса. Вот мой URL: http://www.youtube.com/watch?v=_RCIP6OrQrE
Любая полезная и плодотворная помощь очень ценится.
У меня есть URL-адрес, и мне нужно получить значение v из этого URL-адреса. Вот мой URL: http://www.youtube.com/watch?v=_RCIP6OrQrE
Любая полезная и плодотворная помощь очень ценится.
Я думаю, что одним из самых простых способов было бы проанализировать строку, возвращаемую 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;
}
Вы можете использовать карту, возвращаемую этой функцией, для получения ключа значения в имени параметра.
Если вы на Android, вы можете сделать это:
Uri uri = Uri.parse(url);
String v = uri.getQueryParameter("v");
Я написал этот последний месяц для модуля 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)
Импортировать эти библиотеки
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%...
Предполагая, что синтаксис 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);
Мое решение не очень хорошее
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
отлично работает с:
это будет работать для всех типов 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
далее ссылка
У меня есть что-то вроде этого:
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("");
}