URL があり、この URL から v の値を取得する必要があります。これが私のURLです:http://www.youtube.com/watch?v=_RCIP6OrQrE
どうやってやるの?
URL があり、この URL から v の値を取得する必要があります。これが私のURLです:http://www.youtube.com/watch?v=_RCIP6OrQrE
どうやってやるの?
最も簡単な方法の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;
}
この関数によって返されるマップを使用して、パラメーター名の値のキーイングを取得できます。
Android を使用している場合は、次の操作を実行できます。
Uri uri = Uri.parse(url);
String v = uri.getQueryParameter("v");
先月、YouTube ビデオを ( Gdata APIを使用して) 実装するときに、Joomla モジュールについてこれを書きました。それ以来、私はそれを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)
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);
私はこのような問題を解決しました
public static String getUrlParameterValue(String url, String paramName) {
String value = "";
List<NameValuePair> result = null;
try {
result = URLEncodedUtils.parse(new URI(url), UTF_8);
value = result.stream().filter(pair -> pair.getName().equals(paramName)).findFirst().get().getValue();
System.out.println("--------------> \n" + paramName + " : " + value + "\n");
} catch (URISyntaxException e) {
e.printStackTrace();
}
return value;
}
Jerseyを使用している場合(私のサーバー コンポーネントは送信 HTTP リクエストを作成する必要があります)、次のパブリック メソッドが含まれています。
var multiValueMap = UriComponent.decodeQuery(uri, true);
これは の一部でorg.glassfish.jersey.uri.UriComponent
あり、javadoc はここにあります。Jersey のすべてが必要なわけではないかもしれませんが、Jersey 共通パッケージの一部であり、依存関係がそれほど悪くありません...
これは、あらゆる種類のyoutube 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
さらなる参照