【问题标题】:How do I check if a Youtube Video is Embeddable?如何检查 Youtube 视频是否可嵌入?
【发布时间】:2017-05-15 20:24:31
【问题描述】:

我正在开发一个应用程序,如果视频是可嵌入的,它将播放 youtube 视频。否则我想在 Youtube 中打开它。

我的代码如下所示:

holder.mThumbnailImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // Playback in mobile

            Intent sendIntent = new Intent(holder.mContext, YouTubePlayerFragmentActivity.class);
            sendIntent.putExtra("id", video.getId());
            holder.mContext.startActivity(sendIntent);

            // BELOW IS WHAT I WANT TO HAPPEN IF THE VIDEO IS NOT EMBEDDALBE
            // 
            // holder.mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=" + video.getId())));

        }
    });

有人可以帮帮我吗?我需要提供更多代码让您理解吗?

谢谢

【问题讨论】:

  • 看看this。显然,YouTube 数据 API 允许您获取有关视频的信息。返回的数据将有一个名为“videoEmbeddable”的键。我希望这会有所帮助
  • 谢谢你的回答,但你能帮我完成下一个任务吗?我看到它的方式我可以把 GET googleapis.com/youtube/v3/…{vide.getID())}&type=video&videoEmbeddable=true&videoSyndicated=true&key={YOUR_API_KEY} 来获得回报。然后我需要弄清楚我应该用什么替换上面代码中的 {vide.getID())},以及如何检查它是否给了我返回或错误。我在想:如果上面的 GET 返回一个值 Do task 1. Else Do task 2. 你怎么看?
  • 我会再调查一下。可能有更好的方法来做到这一点。 (希望)

标签: android android-studio video youtube


【解决方案1】:

好的,所以我终于,终于想出了如何正确地做到这一点!

要获取此信息,请使用您的 API 密钥和视频 ID 向 YouTube 数据 API v3 发出 HTTP GET 请求:

https://www.googleapis.com/youtube/v3/videos?id=<VIDEO ID>&key=<YOUR API KEY>&part=status

[编辑] 如何使用来自 Android 的 YouTube Data API v3 使用 HTTP 请求检查视频是否可嵌入

第 1 步:
首先,您必须配置项目以使用 Volley API。我们将使用这个库来发送和接收 HTTP 请求。打开您的 build.gradle 文件并粘贴链接:

dependencies {
    ...
    compile 'com.android.volley:volley:1.0.0'
}

第 2 步:
打开您要从中发出请求的活动文件。添加以下变量:

String url_pre = "https://www.googleapis.com/youtube/v3/videos?id=";
String url_mid = "&key=";
String url_suf = "&part=status";
String video_id = "4pTwQKMrTt0"; //set this string be the id of your video
final String API_KEY = "your-api-key";

RequestQueue queue;

第 3 步:
如果您还没有为您的项目创建 API 密钥,请前往 Google Developer Console 生成一个。还要将 android.permission.INTERNET 添加到您的 android 清单权限中。

第 4 步:
现在我们必须初始化我们的RequestQueue 并设置我们的 JSON 对象请求:

queue = Volley.newRequestQueue(this);
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url_pre + video_id + url_mid + API_KEY + url_suf, null, new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response) {
            try {
                JSONObject videoItem = (JSONObject) response.getJSONArray("items").get(0);
                JSONObject status = videoItem.getJSONObject("status");
                boolean isVideoEmbeddable = status.getBoolean("embeddable");
                //isVideoEmbeddable will be equal to true if the video is embeddable, and false if it isn't.
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
}, new Response.ErrorListener() {

    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e("My Class", "Volley Error: ",error);
    }
});
queue.add(jsObjRequest);

【讨论】:

  • 一直在挠头,但仍然无法弄清楚。也不想问太多,因为训练很完美。哈哈。但我需要知道如何制作 Http Get 以及如何使用 Json 解析它。
  • 今晚我会调查一下(大约 11 小时后)我很乐意提供帮助 :)
  • 太棒了!你是最好的! :)
  • 感谢另一个好答案。带我走了很远 :) 但是我在“response.getJSONArray(”items“)”上得到了红色下划线,上面写着“预期的数组类型”。我也不确定最后的 Singleton 部分。我想我在这之后的行为将类似于“if isEmbeddable = "true"; { do stuff} 对吗?你能帮我理解 Mysingleton 部分吗?:)
  • 是的,最后一部分是正确的。我还更新了我的代码,这样你就不再需要单例了。明天我将研究 JSON 错误。
猜你喜欢
  • 2020-07-11
  • 2012-11-07
  • 2011-12-28
  • 2016-10-22
  • 1970-01-01
  • 2016-02-05
  • 2012-01-27
  • 2012-04-19
  • 2015-12-02
相关资源
最近更新 更多