使用 YouTube 数据 API v3 确定 YouTube 频道的上传速率
Determine a YouTube channel's upload rate using YouTube Data API v3
我正在编写一个使用 YouTube 数据 API v3 的 Java 应用程序。我希望能够确定频道的上传速率。例如,如果一个频道成立一周,并且发布了 2 个视频,我想要一些方法来确定该频道的上传速率是 2 videos/week。我如何使用 YouTube API 执行此操作?
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.youtube.YouTube;
import com.google.api.services.youtube.model.Channel;
import com.google.api.services.youtube.model.ChannelListResponse;
import java.io.IOException;
import java.io.InputStream;
import java.security.GeneralSecurityException;
import java.util.Collection;
import java.util.Collections;
import java.util.Properties;
public class ApiExample {
public static void main(String[] args)
throws GeneralSecurityException, IOException, GoogleJsonResponseException {
Properties properties = new Properties();
try {
InputStream in = ApiExample.class.getResourceAsStream("/" + "youtube.properties");
properties.load(in);
} catch (IOException e) {
System.err.println("There was an error reading " + "youtube.properties" + ": " + e.getCause()
+ " : " + e.getMessage());
System.exit(1);
}
YouTube youtubeService = new YouTube.Builder(new NetHttpTransport(), new JacksonFactory(), new HttpRequestInitializer() {
public void initialize(HttpRequest request) throws IOException {
}
}).setApplicationName("API Demo").build();
// Define and execute the API request
YouTube.Channels.List request = youtubeService.channels()
.list("snippet,contentDetails,statistics");
String apiKey = properties.getProperty("youtube.apikey");
request.setKey(apiKey);
ChannelListResponse response = request.setId("UC_x5XG1OV2P6uZZ5FSM9Ttw").execute();
for (Channel channel : response.getItems()) {
/* What do I do here to get the individual channel's upload rate? /
}
}
}
以上示例使用 YouTube 开发者频道,但我希望能够对任何频道执行此操作。
根据官方文档,一旦您调用 Channels.list
API endpoint -- that returns the specified channel's meta-data, a Channels resource
--,您就可以使用以下 属性:
statistics.videoCount (unsigned long)
The number of public videos uploaded to the channel.
因此,事情几乎是显而易见的:使此 属性 返回的值持久化(例如,将其保存到文件中)并安排您的程序,以便每周发布一次以计算您想要的 上传率.
现在,对于您上面的代码,您应该首先摆脱:
for (Channel channel : response.getItems()) {
/* What do I do here to get the individual channel's upload rate? /
}
因为 items
属性 最多包含 一个 项目。一个好的做法是断言此条件:
assert response.getItems().size() <= 1;
所需videoCount
属性 的值将在方法 getVideoCount
of ChannelStatistics
class:
下访问
response.getItems().get(0).getStatistics().getVideoCount()
.
当然,因为从 API 中只询问真正有用的信息总是好的,我也建议您使用参数 fields
(the method setFields
) 的形式:
request.setFields("items(statistics(videoCount))")
,
插入,例如,在 request.setKey(apiKey)
之后。
这样 API 将只向您发送您需要的 属性。
附录
我还必须提到,只有当您传递到 API 端点(正如您目前在上面的代码中所做的那样)时,上面的断言才是正确的只有一个频道 ID.如果将来您想要 一次性 计算 N
个频道(使用 N <= 50
)的上传速率,那么上面的条件将类似于 size() <= N
.
Channels.list
可以一次调用多个通道,因为这个端点的id
属性允许指定为comma-separated通道列表ID。
我正在编写一个使用 YouTube 数据 API v3 的 Java 应用程序。我希望能够确定频道的上传速率。例如,如果一个频道成立一周,并且发布了 2 个视频,我想要一些方法来确定该频道的上传速率是 2 videos/week。我如何使用 YouTube API 执行此操作?
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.youtube.YouTube;
import com.google.api.services.youtube.model.Channel;
import com.google.api.services.youtube.model.ChannelListResponse;
import java.io.IOException;
import java.io.InputStream;
import java.security.GeneralSecurityException;
import java.util.Collection;
import java.util.Collections;
import java.util.Properties;
public class ApiExample {
public static void main(String[] args)
throws GeneralSecurityException, IOException, GoogleJsonResponseException {
Properties properties = new Properties();
try {
InputStream in = ApiExample.class.getResourceAsStream("/" + "youtube.properties");
properties.load(in);
} catch (IOException e) {
System.err.println("There was an error reading " + "youtube.properties" + ": " + e.getCause()
+ " : " + e.getMessage());
System.exit(1);
}
YouTube youtubeService = new YouTube.Builder(new NetHttpTransport(), new JacksonFactory(), new HttpRequestInitializer() {
public void initialize(HttpRequest request) throws IOException {
}
}).setApplicationName("API Demo").build();
// Define and execute the API request
YouTube.Channels.List request = youtubeService.channels()
.list("snippet,contentDetails,statistics");
String apiKey = properties.getProperty("youtube.apikey");
request.setKey(apiKey);
ChannelListResponse response = request.setId("UC_x5XG1OV2P6uZZ5FSM9Ttw").execute();
for (Channel channel : response.getItems()) {
/* What do I do here to get the individual channel's upload rate? /
}
}
}
以上示例使用 YouTube 开发者频道,但我希望能够对任何频道执行此操作。
根据官方文档,一旦您调用 Channels.list
API endpoint -- that returns the specified channel's meta-data, a Channels resource
--,您就可以使用以下 属性:
statistics.videoCount (unsigned long)
The number of public videos uploaded to the channel.
因此,事情几乎是显而易见的:使此 属性 返回的值持久化(例如,将其保存到文件中)并安排您的程序,以便每周发布一次以计算您想要的 上传率.
现在,对于您上面的代码,您应该首先摆脱:
for (Channel channel : response.getItems()) {
/* What do I do here to get the individual channel's upload rate? /
}
因为 items
属性 最多包含 一个 项目。一个好的做法是断言此条件:
assert response.getItems().size() <= 1;
所需videoCount
属性 的值将在方法 getVideoCount
of ChannelStatistics
class:
response.getItems().get(0).getStatistics().getVideoCount()
.
当然,因为从 API 中只询问真正有用的信息总是好的,我也建议您使用参数 fields
(the method setFields
) 的形式:
request.setFields("items(statistics(videoCount))")
,
插入,例如,在 request.setKey(apiKey)
之后。
这样 API 将只向您发送您需要的 属性。
附录
我还必须提到,只有当您传递到 API 端点(正如您目前在上面的代码中所做的那样)时,上面的断言才是正确的只有一个频道 ID.如果将来您想要 一次性 计算 N
个频道(使用 N <= 50
)的上传速率,那么上面的条件将类似于 size() <= N
.
Channels.list
可以一次调用多个通道,因为这个端点的id
属性允许指定为comma-separated通道列表ID。