【发布时间】:2019-11-16 02:30:35
【问题描述】:
我正在用 java 编写一个程序,其中我的程序只给出了 youtube 视频的 url,但我想输出 url 引用的视频的标题。我可以使用任何 API 或其他方法来解决这个问题吗?谢谢。
【问题讨论】:
-
请参阅以下链接了解如何使用 youtube api。 Youtuve api-samples
我正在用 java 编写一个程序,其中我的程序只给出了 youtube 视频的 url,但我想输出 url 引用的视频的标题。我可以使用任何 API 或其他方法来解决这个问题吗?谢谢。
【问题讨论】:
根据官方 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"
}
}
]
}
您可以获得所有信息,包括标题。
【讨论】:
如果您必须在没有 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();
}
}
【讨论】:
如果你正在使用 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]
【讨论】: