2017-02-18 15 views
1

Я использую API данных Youtube версии 3. Поиск всех видеороликов в определенном канале с использованием предоставленного java-кода.Youtube data api v3 поиск всех загруженных и размещенных видео по определенному каналу

В youtube.com можно увидеть два вида видео внутри Видео вкладки канала.Возвратов в

  • Размещено Видео (загруженный другими каналы)

  • Добавленных видео (прислали этот канал)

При поиске через api, задав определенный channelId, api возвращает только видео, которые загружаются этим каналом. Есть ли способ опубликовать видео?

public static void main(String[] args) { 
     // Read the developer key from the properties file. 
     Properties properties = new Properties(); 
     try { 
      InputStream in = Search.class.getResourceAsStream("/" + PROPERTIES_FILENAME); 
      properties.load(in); 

     } catch (IOException e) { 
      System.err.println("There was an error reading " + PROPERTIES_FILENAME + ": " + e.getCause() 
        + " : " + e.getMessage()); 
      System.exit(1); 
     } 

     try { 
      // This object is used to make YouTube Data API requests. The last 
      // argument is required, but since we don't need anything 
      // initialized when the HttpRequest is initialized, we override 
      // the interface and provide a no-op function. 
      youtube = new YouTube.Builder(Auth.HTTP_TRANSPORT, Auth.JSON_FACTORY, new HttpRequestInitializer() { 
       public void initialize(HttpRequest request) throws IOException { 
       } 
      }).setApplicationName("youtube-cmdline-search-sample").build(); 

      // Prompt the user to enter a query term. 
      String queryTerm = getInputQuery(); 

      // Define the API request for retrieving search results. 
      YouTube.Search.List search = youtube.search().list("id,snippet"); 

      // Set your developer key from the {{ Google Cloud Console }} for 
      // non-authenticated requests. See: 
      // {{ https://cloud.google.com/console }} 
      String apiKey = properties.getProperty("youtube.apikey"); 
      search.setKey(apiKey); 
      search.setQ(queryTerm); 
      search.setChannelId("UCEgdi0XIXXZ-qJOFPf4JSKw"); 

      // Restrict the search results to only include videos. See: 
      // https://developers.google.com/youtube/v3/docs/search/list#type 
      search.setType("video"); 

      // To increase efficiency, only retrieve the fields that the 
      // application uses. 
      search.setFields("items(id/kind,id/videoId,snippet/title,snippet/thumbnails/default/url)"); 
      search.setMaxResults(NUMBER_OF_VIDEOS_RETURNED); 

      // Call the API and print results. 
      SearchListResponse searchResponse = search.execute(); 
      List<SearchResult> searchResultList = searchResponse.getItems(); 
      if (searchResultList != null) { 
       prettyPrint(searchResultList.iterator(), queryTerm); 
      } 
     } catch (GoogleJsonResponseException e) { 
      System.err.println("There was a service error: " + e.getDetails().getCode() + " : " 
        + e.getDetails().getMessage()); 
     } catch (IOException e) { 
      System.err.println("There was an IO error: " + e.getCause() + " : " + e.getMessage()); 
     } catch (Throwable t) { 
      t.printStackTrace(); 
     } 
    } 

ответ

2

При использовании Search: list с указанием channelId, вы получили 248 результатов. Это означает, что эти результаты - это видео, загруженное пользователем. Но это не значит, что он владеет этим.

Для лучшего объяснения, я использую этот параметр.

https://developers.google.com/apis-explorer/#p/youtube/v3/youtube.search.list?part=snippet&channelId=UCEgdi0XIXXZ-qJOFPf4JSKw&_h=1&

Я использую channelId, что вы задаете ваш вопрос. Мы получим первый результат следующим образом.

"snippet": { 
    "publishedAt": "2015-12-03T17:14:46.000Z", 
    "channelId": "UCEgdi0XIXXZ-qJOFPf4JSKw", 
    "title": "Kobe's Farewell Tour", 
    "description": "Kobe Bryant announced that this season, his 20th, will be his last, and is saying goodbye to fans around the league.", 
    "thumbnails": { 
    "default": { 
     "url": "https://i.ytimg.com/vi/FR0AqkteAYw/default.jpg", 
     "width": 120, 
     "height": 90 
    }, 
    "medium": { 
     "url": "https://i.ytimg.com/vi/FR0AqkteAYw/mqdefault.jpg", 
     "width": 320, 
     "height": 180 
    }, 
    "high": { 
     "url": "https://i.ytimg.com/vi/FR0AqkteAYw/hqdefault.jpg", 
     "width": 480, 
     "height": 360 
    } 
    }, 
    "channelTitle": "Sports", 
    "liveBroadcastContent": "none" 
    } 
    }, 

Вы заметите, что заголовок первого результата «Farewell Tour Кобэ», получив это видео, я узнал, что это список воспроизведения, и если вы проверить его содержимое его составить из различных видео загруженные другим пользователем.

https://www.youtube.com/watch?v=FR0AqkteAYw&list=PL8fVUTBmJhHLB3FW_53W1P0mtmwRTCEK_

enter image description here enter image description here

Так что это видео, которые вы видите на channelId = UCEgdi0XIXXZ-qJOFPf4JSKw. Поэтому, чтобы получить все видео, используйте PlaylistItems: list во всём плейлисте, который вы получили в search.list.

Надеюсь, это поможет вам.

+0

Спасибо, Это не сработает в моем случае, потому что я устанавливаю значение параметра типа как «видео», вы, вероятно, пропустили его в моем коде. Я ищу только видео, а не плейлисты, но ваше решение работает в некотором смысле. – mhshimul