首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >youtube-api搜索响应(java)

youtube-api搜索响应(java)
EN

Stack Overflow用户
提问于 2016-02-05 17:07:03
回答 2查看 2.1K关注 0票数 4

使用java的YoutubeApi,我做了一个视频搜索。通过使用下面的示例,它工作得很好。

ttps://developers.google.com/youtube/v3/code_samples/java#search_by_keyword

获得了以下数据。

代码语言:javascript
复制
{
    "Items": [
        search resource
    ]
}

我要"NextPageToken“和"PrevPageToken”。所以我添加了下面的代码。

searchResponse.getNextPageToken();

但结果是“无效”;

我错什么了?

参考资料: ttps://developers.google.com/youtube/v3/docs/search/list

这是code.Thanks。

/* *版权(c) 2012 Google .**使用Apache,Version2.0( " License ");除了*与许可相一致外,您不得使用此文件。除非适用法律要求或书面同意,否则您可以在** http://www.apache.org/licenses/LICENSE-2.0 **获得许可证的副本,根据许可证**分发的软件是在“原样”的基础上分发的,没有任何形式的保证或条件,无论是明示的*还是隐含的。请参阅特定语言的许可证,该语言在*许可下管理权限和限制。*/

代码语言:javascript
复制
package com.google.api.services.samples.youtube.cmdline.youtube_cmdline_search_sample;

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.HttpTransport;
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.YouTube.Search;
import com.google.api.services.youtube.model.ResourceId;
import com.google.api.services.youtube.model.SearchListResponse;
import com.google.api.services.youtube.model.SearchResult;
import com.google.api.services.youtube.model.Thumbnail;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;

/**
 * Prints a list of videos based on a search term.
 *
 * @author Jeremy Walker
 */
public class Youtube_sample_2 {

  /** Global instance properties filename. */
  private static String PROPERTIES_FILENAME = "youtube.properties";

  /** Global instance of the HTTP transport. */
  private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();

  /** Global instance of the JSON factory. */
  private static final JsonFactory JSON_FACTORY = new JacksonFactory();

  /** Global instance of the max number of videos we want returned (50 = upper limit per page). */
  private static final long NUMBER_OF_VIDEOS_RETURNED = 25;

  /** Global instance of Youtube object to make all API requests. */
  private static YouTube youtube;


  /**
   * Initializes YouTube object to search for videos on YouTube (Youtube.Search.List). The program
   * then prints the names and thumbnails of each of the videos (only first 50 videos).
   *
   * @param args command line args.
   */
  public static void main(String[] args) {
    // Read the developer key from youtube.properties

    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 {
      /*
       * The YouTube object is used to make all API requests. The last argument is required, but
       * because 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(HTTP_TRANSPORT, JSON_FACTORY, new HttpRequestInitializer() {
        public void initialize(HttpRequest request) throws IOException {}
      }).setApplicationName("youtube-cmdline-search-sample").build();

      // Get query term from user.
      String queryTerm = getInputQuery();

      YouTube.Search.List search = youtube.search().list("id,snippet");
//      System.out.println(search);

      /*
       * It is important to set your developer key from the Google Developer Console for
       * non-authenticated requests (found under the API Access tab at this link:
       * code.google.com/apis/). This is good practice and increased your quota.
       */
      String apiKey = properties.getProperty("youtube.apikey");

      search.setKey(apiKey);
      search.setQ(queryTerm);
      /*
       * We are only searching for videos (not playlists or channels). If we were searching for
       * more, we would add them as a string like this: "video,playlist,channel".
       */
      search.setType("video");
      /*
       * This method reduces the info returned to only the fields we need and makes calls more
       * efficient.
       */
      search.setFields("items(id/kind,id/videoId,snippet/title,snippet/thumbnails/default/url)");
      search.setMaxResults(NUMBER_OF_VIDEOS_RETURNED);
      SearchListResponse searchResponse = search.execute();
      System.out.println(searchResponse);
//      System.out.println(searchResponse.getNextPageToken());
//      System.out.println(searchResponse.getPageInfo());

      List<SearchResult> searchResultList = searchResponse.getItems();
//      System.out.println(searchResultList);

      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();
    }
  }

  /*
   * Returns a query term (String) from user via the terminal.
   */
  private static String getInputQuery() throws IOException {

    String inputQuery = "";

    System.out.print("Please enter a search term: ");
    BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
    inputQuery = bReader.readLine();

    if (inputQuery.length() < 1) {
      // If nothing is entered, defaults to "YouTube Developers Live."
      inputQuery = "YouTube Developers Live";
    }
    return inputQuery;
  }

  /*
   * Prints out all SearchResults in the Iterator. Each printed line includes title, id, and
   * thumbnail.
   *
   * @param iteratorSearchResults Iterator of SearchResults to print
   *
   * @param query Search query (String)
   */
  private static void prettyPrint(Iterator<SearchResult> iteratorSearchResults, String query) {

    System.out.println("\n=============================================================");
    System.out.println(
        "   First " + NUMBER_OF_VIDEOS_RETURNED + " videos for search on \"" + query + "\".");
    System.out.println("=============================================================\n");

    if (!iteratorSearchResults.hasNext()) {
      System.out.println(" There aren't any results for your query.");
    }

    while (iteratorSearchResults.hasNext()) {

      SearchResult singleVideo = iteratorSearchResults.next();
      ResourceId rId = singleVideo.getId();

      // Double checks the kind is video.
      if (rId.getKind().equals("youtube#video")) {
        Thumbnail thumbnail = (Thumbnail) singleVideo.getSnippet().getThumbnails().get("default");

        System.out.println(" Video Id" + rId.getVideoId());
        System.out.println(" Title: " + singleVideo.getSnippet().getTitle());
        System.out.println(" Thumbnail: " + thumbnail.getUrl());
        System.out.println("\n-------------------------------------------------------------\n");
      }
    }
  }
}

这是propety文件。

youtube.properties

youtube.apikey=AIzaSyDLnvt0SJRc4hLUWQBiLxkGFLWbsjsRvjQ

EN

回答 2

Stack Overflow用户

发布于 2016-12-28 12:44:27

您必须更改setFields方法参数,如下所示:

代码语言:javascript
复制
search.setFields("items(id/kind,id/videoId,snippet/title,snippet/thumbnails/default/url),nextPageToken,pageInfo,prevPageToken");

然后调用execute方法:

代码语言:javascript
复制
SearchListResponse searchResponse = search.execute();

现在,您将得到下一个页面标记:

代码语言:javascript
复制
String nextPageToken = searchResponse.getNextPageToken();

如果你想从Youtube上获得超过50个视频,那么我已经在GitHub上创建了一个拉请求,请查看完整的Search.java文件。

票数 1
EN

Stack Overflow用户

发布于 2016-02-09 11:16:22

user65415642,

我不知道java的youtube api,但我已经在我的应用程序,即iphone应用程序(Ios)中完成了youtube api。

searchString = [NSString stringWithFormat:@"https://www.googleapis.com/youtube/v3/search?part=snippet&contentdetails&q=%@&type=video&videoSyndicated=true&key=%@&maxResults=%d",searchKey,YOUTUBE_API_KEY,RESULTS_PER_CALL];

通过调用这个url,您可以使用nextpage令牌获得响应。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35229695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档