2016-02-05 4 views
4

Используя YoutubeApi java, я сделал поиск видео. Он работал хорошо, используя образец следующего.Ответ на запрос youtube-api (java)

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

следующие данные приобретенную.

{ 
    "Items": [ 
     search resource 
    ] 
} 

И я хочу «NextPageToken» и «PrevPageToken». Итак, я добавил следующий код.

searchResponse.getNextPageToken();

Но результат был «null»;

Что я не так?

Ссылка: TTPS: //developers.google.com/youtube/v3/docs/search/list

Это является code.Thanks.


/* * Copyright (с) 2012 Google Inc. * * Лицензия под лицензией Apache, версия 2.0 ("Лицензия"); вы не можете использовать этот файл, кроме * в соответствии с Лицензией. Вы можете получить копию лицензии на * * http://www.apache.org/licenses/LICENSE-2.0 * * Если требуется действующим законодательством или не согласовано в письменной форме, программное обеспечение распространяется под лицензией * распространяется по принципу «КАК ЕСТЬ», БЕЗ ГАРАНТИЙ ИЛИ УСЛОВИЙ ЛЮБОГО ВИДА, либо выразить *, либо подразумевать. См. Лицензию на конкретном языке, регулирующем разрешения и ограничения по лицензии *. */

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

+0

Можете ли вы разместить свой код и файл свойств, которые вы использовали? –

ответ

0

user65415642,

Я не знаю, о YouTube API Явы, но я закончил использования API YouTube в моем приложение, т.е. приложение iPhone (IOS).

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];

по телефону этого адреса вы можете получить ответ с СледующаяСтраницей лексем

0

Вы должны изменить setFields параметр метода, как показано ниже:

search.setFields("items(id/kind,id/videoId,snippet/title,snippet/thumbnails/default/url),nextPageToken,pageInfo,prevPageToken"); 

Затем вызовите выполнить метод:

SearchListResponse searchResponse = search.execute(); 

сейчас вы получите токен следующей страницы:

String nextPageToken = searchResponse.getNextPageToken(); 

Если вы хотите более 50 видеороликов с Youtube, то я создал запрос на перенос на GitHub, проверьте полный файл Search.java.

Смежные вопросы