Доступ к видеоданным на YouTube с помощью «Клиентской библиотеки API Google для Java» - PullRequest
2 голосов
/ 20 сентября 2011

Я пытаюсь реализовать приложение для Android, которое может просматривать и отображать содержимое YouTube (наиболее важные миниатюры).

В настоящее время обычно можно использовать YouTube API и Gdata, но, к сожалению, они этого не делают.хорошо играть с Android.

Поэтому я попытался использовать клиентскую библиотеку API Google для Java (http://code.google.com/p/google-api-java-client/)

, которая, по-видимому, полностью совместима с Android. К сожалению, пока она еще находится на ранней стадии разработки,не так много информации.

Мне удалось успешно запросить базу данных YouTube и вернуть данные, такие как заголовки и описания, но у меня много проблем с возвратом миниатюр. Честно говоря, я не совсем уверен, как запроспроцесс работает.

вот основная часть кода:

HttpTransport transport = new NetHttpTransport();                  
        final JsonFactory jsonFactory = new JacksonFactory();      
        final JsonCParser parser = new JsonCParser(jsonFactory);

        HttpRequestFactory factory = transport.createRequestFactory(new HttpRequestInitializer() {

            @Override
            public void initialize(HttpRequest request) throws IOException {
                // TODO Auto-generated method stub

                GoogleHeaders headers = new GoogleHeaders();
                headers.setApplicationName("1Google-YouTubeSample/1.0");
                headers.gdataVersion = "2";
                request.setHeaders(headers);
                request.addParser(parser);
            }
        });


        YouTubeUrl url = new YouTubeUrl("https://gdata.youtube.com/feeds/api/videos");
        url.author = "whatever";
        url.maxResults = 2;

        HttpRequest request;
        try {
            request = factory.buildGetRequest(url);

            VideoFeed feed = request.execute().parseAs(VideoFeed.class);

            for (Video video : feed.items) {

                Log.v("ddarz", "video URL" + video.player.defaultUrl + "/default.jpg");
                TextView tv1 = (TextView) findViewById(R.id.textView1);
                tv1.setText(video.title);

                TextView tv2 = (TextView) findViewById(R.id.textView2);
                tv2.setText(video.description);

                ImageView iv = (ImageView) findViewById(R.id.imageView1);
                Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL("http://img.youtube.com/vi/bQVoAWSP7k4/1.jpg").getContent());
                //iv.setImageBitmap(bitmap); 

            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }

И классы:

public static class VideoFeed {
        @Key List<Video> items;
        int totalItems;
      }

      public static class Video {
        @Key String title;
        @Key String description;
        @Key Player player;
        @Key DateTime updated;
      }

      public static class Player {
        @Key("default") String defaultUrl;
      }

      public static class YouTubeUrl extends GenericUrl {
        @Key final String alt = "jsonc";
        @Key String author;
        @Key("max-results") Integer maxResults;

        YouTubeUrl(String url) {
          super(url);
        }
      }

Код довольно сырой, но на данный момент этоработает, не удается при попытке получить изображение с URL.

Есть ли у кого-нибудь понимание и /или предложения о том, как лучше всего получить доступ к данным видео (эскизы и т. д.) или как вообще решить эту проблему?К сожалению, доступ к YouTube на платформе Android редко упоминается.

Большое спасибо заранее!

1 Ответ

2 голосов
/ 25 декабря 2011

Вы используете пример кода со страниц API Google.Они охватывают только несколько основных элементов поста YouTube.Однако при добавлении этой строки вы можете получить гораздо больше информации:

url.alt = "jsonc";

Таким образом API YouTube будет возвращать все запросы в формате JSON-C .Теперь вы можете расширить класс VideoFeed новым классом для миниатюр.Мой выглядит так:

public static class Thumbnail {
    @Key("sqDefault")
    String thumbnail_sq;
    @Key("hqDefault")
    String thumbnail_hq;

    @Override
    public String toString() {
        return thumbnail_sq;
    }
}
  • sqDefault: 120px * 90px
  • hqDefault: 480px * 360px

Пока я просто возвращаюминиатюра стандартного качества.С помощью @Key вы можете назначать переменные, которые будут использоваться Google Api для автоматического анализа их в VideoFeed из отформатированного ответа JSON на ваш запрос.Вы можете использовать возвращенную строку, чтобы загрузить изображение и отобразить его в ImageView.

Надеюсь, это поможет:)

...