如何使用java从URL获取youtubevideoID?

我想用java从youtube的URL获取v = id

示例Youtube URL格式:

http://www.youtube.com/watch?v=u8nQa1cJyX8&a=GxdCwVVULXctT2lYDEPllDR0LRTutYfW http://www.youtube.com/watch?v=u8nQa1cJyX8 http://youtu.be/0zM3nApSvMg http://www.youtube.com / user / IngridMichaelsonVEVO#p / a / u / 1 / KdwsulMb8EQ http://youtu.be/dQw4w9WgXcQ http://www.youtube.com/embed/dQw4w9WgXcQ http://www.youtube.com/v/dQw4w9WgXcQ http ://www.youtube.com/e/dQw4w9WgXcQ http://www.youtube.com/watch?v=dQw4w9WgXcQ http://www.youtube.com/?v=dQw4w9WgXcQ http://www.youtube.com / watch?feature = player_embedded&v = dQw4w9WgXcQ http://www.youtube.com/?feature=player_embedded&v=dQw4w9WgXcQ http://www.youtube.com/user/IngridMichaelsonVEVO#p/u/11/KdwsulMb8EQ http:// www .youtube-nocookie.com / v / 6L3ZvIMwZFM?版本= 3&HL = EN_US&相对= 0

或任何其他youtube格式包含url中的videoID

我正在尝试: –

Pattern compiledPattern = Pattern.compile("(?<=v=).*?(?=&|$)",Pattern.CASE_INSENSITIVE); Matcher matcher = compiledPattern.matcher(sourceUrl); if(matcher.find()){ setVideoId(matcher.group()); } 

它不仅适用于一个URL: –

http://youtu.be/6UW3xuJinEg

下面的代码将提取以下类型url的videoID。

 http://www.youtube.com/watch?v=dQw4w9WgXcQ&a=GxdCwVVULXctT2lYDEPllDR0LRTutYfW http://www.youtube.com/watch?v=dQw4w9WgXcQ http://youtu.be/dQw4w9WgXcQ http://www.youtube.com/embed/dQw4w9WgXcQ http://www.youtube.com/v/dQw4w9WgXcQ http://www.youtube.com/e/dQw4w9WgXcQ http://www.youtube.com/watch?v=dQw4w9WgXcQ http://www.youtube.com/watch?feature=player_embedded&v=dQw4w9WgXcQ http://www.youtube-nocookie.com/v/6L3ZvIMwZFM?version=3&hl=en_US&rel=0 String pattern = "(?<=watch\\?v=|/videos/|embed\\/|youtu.be\\/|\\/v\\/|\\/e\\/|watch\\?v%3D|watch\\?feature=player_embedded&v=|%2Fvideos%2F|embed%\u200C\u200B2F|youtu.be%2F|%2Fv%2F)[^#\\&\\?\\n]*"; Pattern compiledPattern = Pattern.compile(pattern); Matcher matcher = compiledPattern.matcher(url); //url is youtube url for which you want to extract the id. if (matcher.find()) { return matcher.group(); } 

6UW3xuJinEg (我的意思是youtu.be/之后的字符串)是大部分时间的ID。 但是为了更加确定您可以向该URL发送HTTP GET请求,它将使用HTTP302重定向响应响应您,您可以在其中找到实际的重定向URL。 您可以解析该URL以前的代码。

在此处输入图像描述

要发送和接收请求和响应,您可以使用jsoup等库。 但因为它只是一个简单的GET请求,你可以简单地使用java套接字。

在80端口上连接到youtube.be并在输出流中写入:

 GET /6UW3xuJinEg HTTP/1.1 # Don't forget the blank lines 

我找到了这个解决方案..我扩展了这个url..它的工作..

 public static String expandUrl(String shortenedUrl) { URL url; String expandedURL = ""; try { url = new URL(shortenedUrl); // open connection HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY); // stop following browser redirect httpURLConnection.setInstanceFollowRedirects(false); // extract location header containing the actual destination URL expandedURL = httpURLConnection.getHeaderField("Location"); httpURLConnection.disconnect(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return expandedURL; } 

在这里试试这个代码。

 // (?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11}) final static String reg = "(?:youtube(?:-nocookie)?\\.com\\/(?:[^\\/\\n\\s]+\\/\\S+\\/|(?:v|e(?:mbed)?)\\/|\\S*?[?&]v=)|youtu\\.be\\/)([a-zA-Z0-9_-]{11})"; public static String getVideoId(String videoUrl) { if (videoUrl == null || videoUrl.trim().length() <= 0) return null; Pattern pattern = Pattern.compile(reg, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(videoUrl); if (matcher.find()) return matcher.group(1); return null; } 

你可以在这里找到我的整个解析器代码https://github.com/TheFinestArtist/YouTubePlayerActivity/blob/master/library/src/main/java/com/thefinestartist/ytpa/utils/YoutubeUrlParser.java

这是我用来播放Youtubevideo的有用开源。 https://github.com/TheFinestArtist/YouTubePlayerActivity