#youtube #google-api #gdata-api #gdata #google-api-java-client
#YouTube #google-api #gdata-api #gdata #google-api-java-client
Вопрос:
Я пытаюсь получить любимые видео пользователя YouTube с помощью клиентской библиотеки java api Google. Это просто настройка youtube-json-sample. Что я в основном хочу сделать, так это распечатать список любимых видео пользователя (в частности, напечатать заголовок, обновленное, описание и т. Д.). Мне удается получить список, но проблема в том, что все (заголовок, описание и т. Д.) Равно нулю! Это происходит только с избранным — я протестировал это с помощью поисковых и наиболее просматриваемых запросов, и это сработало. Это странное поведение относится только к избранному… Вот мой код:
private void run() throws IOException {
YouTubeClient client = new YouTubeClient();
showVideos(client);
}
private VideoFeed showVideos(YouTubeClient client) throws IOException {
TextView textView = (TextView) findViewById(R.id.textView);
View.header(textView, "Get Videos");
YouTubeUrl url = YouTubeUrl.forVideosFeed();
// execute GData request for the feed
VideoFeed feed = client.executeGetVideoFeed(url);
View.display(textView, feed);
return feed;
}
public class YouTubeUrl extends GoogleUrl {
/** Whether to pretty print HTTP requests and responses. */
private static final boolean PRETTY_PRINT = true;
static final String ROOT_URL = "https://gdata.youtube.com/feeds/api";
YouTubeUrl(String encodedUrl) {
super(encodedUrl);
this.alt = "jsonc";
this.prettyprint = PRETTY_PRINT;
}
private static YouTubeUrl root() {
return new YouTubeUrl(ROOT_URL);
}
public static YouTubeUrl forVideosFeed() {
YouTubeUrl result = root();
result.getPathParts().add("users"); //the URL is http://gdata.youtube.com/feeds/api/users/username/favorites?v=2
result.getPathParts().add("liorash1"); //some user name
result.getPathParts().add("favorites");
return resu<
}
}
public class YouTubeClient {
private final JsonFactory jsonFactory = new JacksonFactory();
private final HttpTransport transport = new NetHttpTransport();
private final HttpRequestFactory requestFactory;
public YouTubeClient() {
final JsonCParser parser = new JsonCParser(jsonFactory);
requestFactory = transport.createRequestFactory(new HttpRequestInitializer() {
@Override
public void initialize(HttpRequest request) {
// headers
GoogleHeaders headers = new GoogleHeaders();
headers.setApplicationName("Google-YouTubeSample/1.0");
headers.gdataVersion = "2";
request.setHeaders(headers);
request.addParser(parser);
}
});
}
public VideoFeed executeGetVideoFeed(YouTubeUrl url) throws IOException {
return executeGetFeed(url, VideoFeed.class);
}
private <F extends Feed<? extends Item>> F executeGetFeed(YouTubeUrl url, Class<F> feedClass)
throws IOException {
HttpRequest request = requestFactory.buildGetRequest(url);
return request.execute().parseAs(feedClass);
}
}
public class Item {
@Key
String title;
@Key
DateTime updated;
}
public class Video extends Item {
@Key
String description;
@Key
List<String> tags = new ArrayList<String>();
@Key
Player player;
}
Есть классы, которые я здесь не размещал, чтобы не было слишком беспорядочно.
В любом случае результат, который я получаю,:
============== Get Videos ==============
Showing first 6 of 8 videos:
-----------------------------------------------
Title: null
Updated: null
-----------------------------------------------
Title: null
Updated: null
-----------------------------------------------
Title: null
Updated: null
-----------------------------------------------
Title: null
Updated: null
-----------------------------------------------
Title: null
Updated: null
-----------------------------------------------
Title: null
Updated: null
НЕКОТОРЫЕ ОБНОВЛЕНИЯ:
После некоторого тестирования я обнаружил, что могу получить все протестированные мной каналы (включая загруженные пользователем), кроме канала избранного. Проблема, скорее всего, связана с JsonCParser:
return request.execute().parseAs(feedClass);