You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android应用中通过Youtube Data Api v3获取视频标题与缩略图

Android端使用YouTube Data API v3获取视频标题与缩略图实现方案

1. 前置准备

  • 首先在Google Cloud Console创建项目,启用YouTube Data API v3服务,生成专属API密钥。注意不要将API密钥硬编码在客户端代码中,生产环境建议走后端服务代理请求,避免密钥泄露被滥用。
  • 从输入的YouTube URL中提取11位长度的视频ID:常见URL格式包括https://www.youtube.com/watch?v=xxxx、https://youtu.be/xxxx,可通过正则匹配或者字符串截取获取ID,示例匹配规则如下:
    // Kotlin正则示例
    val videoIdRegex = "^(?:https?://)?(?:www\\.)?(?:youtube\\.com/(?:watch\\?v=|embed/|v/)|youtu\\.be/)([a-zA-Z0-9_-]{11})".toRegex()
    // 匹配结果的group 1即为视频ID
    val videoId = videoIdRegex.find(youtubeUrl)?.groups?.get(1)?.value
    

2. 项目依赖配置

  • 在模块级build.gradle文件中添加网络请求、JSON解析相关依赖,以OkHttp+Gson为例:
    dependencies {
        implementation 'com.squareup.okhttp3:okhttp:4.11.0'
        implementation 'com.google.code.gson:gson:2.10.1'
        // 加载缩略图可以额外引入图片加载框架,比如Glide
        implementation 'com.github.bumptech.glide:glide:4.15.1'
    }
    
  • 在AndroidManifest.xml中添加网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    

3. 功能实现代码

  • 组装API请求地址,格式为https://www.googleapis.com/youtube/v3/videos?part=snippet&id=填入提取到的视频ID&key=填入你的API密钥
  • 异步发起网络请求,禁止在主线程执行网络操作,推荐使用Kotlin协程实现,示例代码如下:
    // 建议在ViewModel中执行,避免页面销毁时请求泄漏
    viewModelScope.launch(Dispatchers.IO) {
        val client = OkHttpClient()
        val request = Request.Builder()
            .url("https://www.googleapis.com/youtube/v3/videos?part=snippet&id=$videoId&key=$yourApiKey")
            .build()
        val response = client.newCall(request).execute()
        if (response.isSuccessful) {
            val responseBody = response.body?.string() ?: return@launch
            val rootJson = JSONObject(responseBody)
            val itemsArray = rootJson.getJSONArray("items")
            if (itemsArray.length() > 0) {
                val snippet = itemsArray.getJSONObject(0).getJSONObject("snippet")
                // 获取视频标题
                val title = snippet.getString("title")
                // 获取缩略图地址,支持default/medium/high/standard/maxres多种分辨率
                val thumbnailUrl = snippet.getJSONObject("thumbnails")
                    .getJSONObject("high")
                    .getString("url")
                // 切回主线程更新UI
                withContext(Dispatchers.Main) {
                    // 标题直接赋值给TextView
                    titleTv.text = title
                    // 缩略图用Glide加载到ImageView
                    Glide.with(context)
                        .load(thumbnailUrl)
                        .into(thumbnailIv)
                }
            }
        }
    }
    

4. 注意事项

  • YouTube Data API有配额限制,默认每个项目每日有10000单位配额,单次videos.list请求消耗1单位配额,建议对已获取的视频信息做本地缓存,减少重复请求。
  • 生产环境不要直接在客户端携带API密钥请求YouTube接口,很容易被反编译提取密钥导致配额被盗刷,建议将请求逻辑封装到自行部署的后端服务,Android端仅请求自有后端接口,由后端代理返回结果。
  • 部分无高清资源的视频可能不存在高分辨率缩略图,需要做降级处理,获取不到高分辨率时自动切换到medium或者default分辨率的缩略图。

内容的提问来源于stack exchange,提问作者Zu Haib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:06:06