Java YouTube正则表达式获取视频ID和时间戳

时间:2018-01-29 20:51:22

标签: java regex youtube youtube-api

我正在使用以下功能从YouTube网址获取视频ID。

static String getVideoIdFromUrl(String url) {
    String regex = "http(?:s)?://(?:www\\.)?youtu(?:\\.be/|be\\.com/(?:watch\\?v=|v/\u200C\u200B|embed/|user/(?:[\\w#\u200C\u200B]+/)+))([^&#?\\n]+)";
    String id = null;
    Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(url);
    if (matcher.matches()) {
        id = matcher.group(1);
    }

    return id;
}

这适用于获取几乎所有格式的视频ID。但是,当提供带有时间戳的URL时,它将返回null。

http://www.youtube.com/watch?v=0zM4nApSvMg#t=0m10s
https://www.youtube.com/watch?v=Br5xdYVbcWw&t=50

如何编写一个返回视频ID和时间戳的函数?

1 个答案:

答案 0 :(得分:1)

您无法在java中返回多个变量,但是您可以将idtime加载到HashMap并返回该变量。它可能类似于以下内容:

static Map<String,String> getVideoIdFromUrl(String url) {

  // PATTERN
  String regex = "v=([^#&\n\r]+)|t=([^#&\n\r]+)";

  // INIT RETURN DATA
  String id = "";
  String time = "";

  // RUN REGEX
  Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
  Matcher matcher = pattern.matcher(url);

  // CHECK 
  while (matcher.find()) {

      // SET ID
      if(matcher.group(1) != null)
          id = matcher.group(1);

      // SET TIME
      if(matcher.group(2) != null)
          time = matcher.group(2);

  }

  // BUILD RETURN DATA
  Map<String,String> returnData = new HashMap<String, String>();
  returnData.put("id", id);
  returnData.put("time", time);

  // RETURN
  return returnData;

}

我使用以下输出运行此函数:

// RUN FUNCTION
Map<String,String> returnMap = myObject.getVideoIdFromUrl("http://www.youtube.com/watch?v=0zM4nApSvMg#t=0m10s");

// PRINT OUTPUT
System.out.println(returnMap);

// PRINTS:
// {id=0zM4nApSvMg, time=0m10s}