【问题标题】:How can I obtain the title of a youtube video from only the url?如何仅从 url 获取 youtube 视频的标题?
【发布时间】:2019-11-16 02:30:35
【问题描述】:

我正在用 java 编写一个程序,其中我的程序只给出了 youtube 视频的 url,但我想输出 url 引用的视频的标题。我可以使用任何 API 或其他方法来解决这个问题吗?谢谢。

【问题讨论】:

标签: java api youtube


【解决方案1】:

根据官方 youtube api docs。首先,您需要获取您的 API_KEY。然后点击以下端点(使用 YOUR_API_KEY 和 YOUR_VIDEO_ID)

https://www.googleapis.com/youtube/v3/videos?id=YOUR_VIDEO_ID&key=YOUR_API_KEY
 &part=snippet,contentDetails,statistics,status

您将收到一个 JSON 对象作为这样的响应

{ 
  "kind": "youtube#videoListResponse",
  "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/sDAlsG9NGKfr6v5AlPZKSEZdtqA\"",
  "videos": [
      {
        "id": "7lCDEYXw3mM",
        "kind": "youtube#video",
        "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/iYynQR8AtacsFUwWmrVaw4Smb_Q\"",
        "snippet": { 
        "publishedAt": "2012-06-20T22:45:24.000Z",
        "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
        "title": "Google I/O 101: Q&A On Using Google APIs",
        "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.",
        "thumbnails": {
        "default": {
        "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg"
     },
  "medium": {
      "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg"
  },
  "high": {
      "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg"
  }
},
   "categoryId": "28"
},
   "contentDetails": {
      "duration": "PT15M51S",
      "aspectRatio": "RATIO_16_9"
},
  "statistics": {
      "viewCount": "3057",
      "likeCount": "25",
      "dislikeCount": "0",
      "favoriteCount": "17",
      "commentCount": "12"
  },
 "status": {
    "uploadStatus": "STATUS_PROCESSED",
    "privacyStatus": "PRIVACY_PUBLIC"
   }
  }
  ]
}

您可以获得所有信息,包括标题。

【讨论】:

    【解决方案2】:

    如果您必须在没有 YouTube 的 API 的情况下执行此操作,我建议您从网页上删除 <title> 标记 - 这可能比找到包含标题的 div 更容易,尽管您可能会错过一些表情符号等。对于纯 Java 解决方案,我只使用 http 请求的内置方法 java.net.HttpURLConnection,然后流式传输响应数据,直到到达 <title> 并使用下一部分作为字符串直到 - YouTube</title>

    这是一个简短的示例(您可能想要进行异常处理等)。

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class YouTubeTitleScraper
    {
      public static void main(String[] args) throws Exception
      {
        URL url = new URL("https://www.youtube.com/watch?v=IYnsfV5N2n8");
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setRequestMethod("GET");
        BufferedReader read = new BufferedReader(new InputStreamReader(con.getInputStream()));
        boolean found = false;
        String line;
        while (!found)
        {
          line = read.readLine();
          if (line.contains("<title>"))
          {
            found = true;
            System.out.println("Title: " + line.substring(7, line.indexOf(" - YouTube</title>")));
          }
        }
        read.close();
      }
    }
    

    【讨论】:

      【解决方案3】:

      如果你正在使用 maven 并想使用 Jsoup,请添加这些添加依赖项

              <dependency>
                  <groupId>org.jsoup</groupId>
                  <artifactId>jsoup</artifactId>
                  <version>1.7.2</version>
              </dependency>
      

      如果没有,只需将您找到的 jar here 添加到您的类路径中,以便您的代码可以使用它。

      那么就这么简单:

      import java.io.IOException;
      
      import org.jsoup.Jsoup;
      import org.jsoup.nodes.Document;
      
      public class Test {
      
        public static void main(String[] args) throws IOException {
          Document document = Jsoup.connect("https://www.youtube.com/watch?v=eIrMbAQSU34").get();
          String title = document.title().replaceAll(" - YouTube$", "");
          System.out.println(title);
        }
      }
      

      在这种情况下,它会打印:

      Java 初学者教程 [2019]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-02
        • 2010-11-16
        • 1970-01-01
        • 2012-05-22
        • 2011-03-28
        • 1970-01-01
        • 2019-12-07
        相关资源
        最近更新 更多