2

我正在尝试实现一个可以浏览和显示 youtube 内容(最重要的是缩略图)的 android 应用程序。

现在通常要走的路是通过 Youtube API 和 Gdata,但不幸的是,它们不能很好地与 Android 配合使用。

因此,我尝试使用适用于 Java 的 Google API 客户端库 (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 检索图像时失败。

有没有人对如何最好地访问视频数据(缩略图等?)或一般如何解决这个问题有任何见解和/或建议?不幸的是,Android 平台上的 youtube 访问很少被提及。

提前谢谢了!

4

1 回答 1

2

您正在使用来自 google api 页面的示例代码。它们仅涵盖 YouTube 帖子的一些基本元素。但是,当您添加此行时,您可能会访问更多信息:

url.alt = "jsonc";

这样,YouTube API 将以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
  • hq默认:480px*360px

现在我只是返回标准质量的缩略图。使用@Key,您可以分配变量,google Api 将使用这些变量将它们从 JSON 格式的答案自动解析为 VideoFeed 以响应您的请求。您可以使用返回的字符串下载图像并将其显示在 ImageView 中。

希望这可以帮助 :)

于 2011-12-24T23:55:12.513 回答