Java tutorial
/* * Copyright (c) 2017 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package com.google.api.services.samples.youtube.cmdline.live; import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.googleapis.json.GoogleJsonResponseException; import com.google.api.services.samples.youtube.cmdline.Auth; import com.google.api.services.youtube.YouTube; import com.google.api.services.youtube.YouTubeScopes; import com.google.api.services.youtube.model.LiveBroadcast; import com.google.api.services.youtube.model.LiveBroadcastListResponse; import com.google.api.services.youtube.model.Video; import com.google.api.services.youtube.model.VideoListResponse; import com.google.common.collect.Lists; import java.io.IOException; import java.util.List; /** * Gets a live chat id from a video id or current signed in user. * * The videoId is often included in the video's url, e.g.: * https://www.youtube.com/watch?v=L5Xc93_ZL60 * ^ videoId * The video URL may be found in the browser address bar, or by right-clicking a video and selecting * Copy video URL from the context menu. * * @author Jim Rogers */ public class GetLiveChatId { /** * Define a global instance of a Youtube object, which will be used * to make YouTube Data API requests. */ private static YouTube youtube; /** * Poll live chat messages and SuperChat details from a live broadcast. * * @param args videoId (optional). If the videoId is given, live chat messages will be retrieved * from the chat associated with this video. If the videoId is not specified, the signed in * user's current live broadcast will be used instead. */ public static void main(String[] args) { // This OAuth 2.0 access scope allows for read-only access to the // authenticated user's account, but not other types of account access. List<String> scopes = Lists.newArrayList(YouTubeScopes.YOUTUBE_READONLY); try { // Authorize the request. Credential credential = Auth.authorize(scopes, "getlivechatid"); // This object is used to make YouTube Data API requests. youtube = new YouTube.Builder(Auth.HTTP_TRANSPORT, Auth.JSON_FACTORY, credential) .setApplicationName("youtube-cmdline-getlivechatid-sample").build(); // Get the liveChatId String liveChatId = args.length == 1 ? getLiveChatId(youtube, args[0]) : getLiveChatId(youtube); if (liveChatId != null) { System.out.println("Live chat id: " + liveChatId); } else { System.err.println("Unable to find a live chat id"); System.exit(1); } } catch (GoogleJsonResponseException e) { System.err.println("GoogleJsonResponseException code: " + e.getDetails().getCode() + " : " + e.getDetails().getMessage()); e.printStackTrace(); } catch (IOException e) { System.err.println("IOException: " + e.getMessage()); e.printStackTrace(); } catch (Throwable t) { System.err.println("Throwable: " + t.getMessage()); t.printStackTrace(); } } /** * Retrieves the liveChatId from the authenticated user's live broadcast. * * @param youtube The object is used to make YouTube Data API requests. * @return A liveChatId, or null if not found. */ static String getLiveChatId(YouTube youtube) throws IOException { // Get signed in user's liveChatId YouTube.LiveBroadcasts.List broadcastList = youtube.liveBroadcasts().list("snippet") .setFields("items/snippet/liveChatId").setBroadcastType("all").setBroadcastStatus("active"); LiveBroadcastListResponse broadcastListResponse = broadcastList.execute(); for (LiveBroadcast b : broadcastListResponse.getItems()) { String liveChatId = b.getSnippet().getLiveChatId(); if (liveChatId != null && !liveChatId.isEmpty()) { return liveChatId; } } return null; } /** * Retrieves the liveChatId from the broadcast associated with a videoId. * * @param youtube The object is used to make YouTube Data API requests. * @param videoId The videoId associated with the live broadcast. * @return A liveChatId, or null if not found. */ static String getLiveChatId(YouTube youtube, String videoId) throws IOException { // Get liveChatId from the video YouTube.Videos.List videoList = youtube.videos().list("liveStreamingDetails") .setFields("items/liveStreamingDetails/activeLiveChatId").setId(videoId); VideoListResponse response = videoList.execute(); for (Video v : response.getItems()) { String liveChatId = v.getLiveStreamingDetails().getActiveLiveChatId(); if (liveChatId != null && !liveChatId.isEmpty()) { return liveChatId; } } return null; } }