如何在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
相关产品推荐
相关产品推荐

