YouTube-Web-V2-API

Shorts搜索(原始数据,推荐使用V2)/Shorts search (raw data, recommend V2)

Changed on

[中文]

⚠️ 推荐使用 V2 版本:

  • 本接口返回 YouTube 原始数据结构,需要自行解析
  • 清洗过的数据版本请使用 /get_shorts_search_v2 接口,返回结构化的 Shorts 列表数据,自动过滤非 Shorts 内容

用途:

  • YouTube Shorts短视频专门搜索,使用原生YouTube API接口

特点:

  • 🎬 专门搜索YouTube Shorts短视频(<60秒)
  • 🔍 支持多种过滤条件和排序方式
  • 📱 优化的移动端短视频内容
  • ⚡ 智能过滤:首次请求可能返回混合内容(长视频+短视频),默认自动过滤长视频

重要说明 - YouTube Shorts搜索机制:

根据YouTube的搜索逻辑,Shorts搜索有以下特性:

  1. 首次请求(无continuation_token):可能返回混合内容(部分长视频 + 部分短视频)
  2. 后续请求(有continuation_token):仅返回纯短视频内容
  3. 解决方案:
    • 方案A:使用 filter_mixed_content=true(默认),自动过滤掉长视频
    • 方案B:使用第一次返回的 continuation_token 进行第二次请求,获取纯Shorts内容
    • 方案C:设置 filter_mixed_content=false,获取原始混合内容

参数详解:

📌 必选参数 (Required Parameters):

search_query (string)

  • 作用: 搜索关键字,用于匹配Shorts视频的标题、描述等内容
  • 格式: 任意字符串
  • 示例: "Python编程", "gaming", "cooking tutorial"
  • 注意: 支持中英文及其他语言,空格会被自动处理

⚙️ 可选参数 - 基础设置 (Optional Parameters - Basic Settings):

language_code (string, 可选)

  • 作用: 设置搜索结果的显示语言,影响返回内容的语言偏好
  • 默认值: "en-US"
  • 可用值:
    • "zh-CN" - 简体中文
    • "zh-TW" - 繁体中文
    • "en-US" - 英语(美国)
    • "en-GB" - 英语(英国)
    • "ja-JP" - 日语
    • "ko-KR" - 韩语
    • "es-ES" - 西班牙语
    • "fr-FR" - 法语
    • "de-DE" - 德语
    • 其他符合IETF BCP 47标准的语言代码
  • 示例: language_code=zh-CN
  • 影响: 会影响搜索算法的语言匹配和结果排序

country_code (string, 可选)

  • 作用: 设置地区/国家代码,影响搜索结果的地域相关性和内容可用性
  • 默认值: "US"
  • 可用值:
    • "US" - 美国
    • "CN" - 中国
    • "JP" - 日本
    • "KR" - 韩国
    • "GB" - 英国
    • "DE" - 德国
    • "FR" - 法国
    • "CA" - 加拿大
    • 其他符合ISO 3166-1 alpha-2标准的国家代码
  • 示例: country_code=JP
  • 影响: 某些Shorts可能因地区限制而不可见

time_zone (string, 可选)

  • 作用: 设置时区,影响时间相关过滤器(如"今天"、"本周")的计算
  • 默认值: "America/Los_Angeles"
  • 可用值: 符合IANA时区数据库的时区标识符
    • "America/Los_Angeles" - 美国太平洋时区
    • "America/New_York" - 美国东部时区
    • "Asia/Shanghai" - 中国时区
    • "Asia/Tokyo" - 日本时区
    • "Europe/London" - 英国时区
    • "Europe/Paris" - 法国时区
  • 示例: time_zone=Asia/Shanghai
  • 影响: 结合upload_time参数使用时,决定"今天"等时间段的具体范围

filter_mixed_content (boolean, 可选)

  • 作用: 控制是否自动过滤掉响应中的长视频(非Shorts内容)
  • 默认值: true
  • 可用值:
    • true - 自动过滤长视频,只返回Shorts(推荐)
    • false - 返回原始内容,可能包含长视频
  • 示例: filter_mixed_content=true
  • 使用场景:
    • true: 当你只需要纯Shorts内容时使用(推荐首次请求使用)
    • false: 当你需要分析YouTube原始返回的混合内容时使用(调试用)
  • 注意: 只影响首次请求,使用continuation_token的请求本身就只返回Shorts

🎯 可选参数 - Shorts过滤条件 (Optional Parameters - Shorts Filters):

upload_time (string, 可选)

  • 作用: 按上传时间过滤Shorts,只返回指定时间段内上传的视频
  • 默认值: null (不过滤)
  • 可用值:
    • "hour" - 过去1小时内上传
    • "today" - 今天上传(基于time_zone参数)
    • "week" - 本周上传(最近7天)
    • "month" - 本月上传(最近30天)
    • "year" - 今年上传(最近365天)
  • 示例: upload_time=week
  • 使用场景: 寻找最新、热门的Shorts内容
  • 注意: 与time_zone参数配合使用,时间计算基于设定的时区

sort_by (string, 可选)

  • 作用: 设置搜索结果的排序方式
  • 默认值: null (YouTube默认相关性排序)
  • 可用值:
    • "relevance" - 按相关性排序(YouTube默认算法)
    • "upload_date" - 按上传日期排序(最新优先)
    • "view_count" - 按观看次数排序(最多观看优先)
    • "rating" - 按评分排序(最高评分优先)
  • 示例: sort_by=view_count
  • 使用场景:
    • relevance: 寻找最相关的内容
    • upload_date: 寻找最新发布的Shorts
    • view_count: 寻找最受欢迎的Shorts
    • rating: 寻找质量最高的Shorts
  • 优先级: sort_by的优先级高于upload_time,两者同时使用时以sort_by为准

📄 可选参数 - 翻页控制 (Optional Parameters - Pagination):

continuation_token (string, 可选)

  • 作用: 用于获取下一页搜索结果的翻页令牌
  • 默认值: null (获取第一页)
  • 格式: YouTube返回的加密字符串
  • 示例: continuation_token=EqcBEgPkuKzor4YybhmgGk...
  • 获取方式: 从上一次请求的响应中提取(见"翻页机制详解"部分)
  • 使用场景:
    • 首次搜索:不传此参数,获取第一页结果
    • 后续翻页:传入上次返回的token,获取下一页结果
  • 注意:
    • Token有时效性,通常在数小时内有效
    • 使用continuation_token时,必须保持search_query等其他参数一致
    • 使用token的请求会自动返回纯Shorts内容(无需过滤)

翻页机制详解:

如何获取 continuation_token:

从响应JSON中提取,路径通常为以下之一:

# 路径1:在 onResponseReceivedCommands 中
response["data"]["onResponseReceivedCommands"][0]["appendContinuationItemsAction"]["continuationItems"][-1]["continuationItemRenderer"]["continuationEndpoint"]["continuationCommand"]["token"]

# 路径2:在 contents 中
response["data"]["contents"]["twoColumnSearchResultsRenderer"]["primaryContents"]["sectionListRenderer"]["contents"][-1]["continuationItemRenderer"]["continuationEndpoint"]["continuationCommand"]["token"]

使用流程:

  1. 首次请求: 不传 continuation_token
    GET /api/v1/youtube_web/get_shorts_search?search_query=python
    
  2. 提取token: 从响应中找到 continuation_token
  3. 后续请求: 传入 continuation_token 获取下一页
    GET /api/v1/youtube_web/get_shorts_search?search_query=python&continuation_token=xxx
    

响应数据结构:

{
  "code": 200,
  "data": {
    "contents": {
      "twoColumnSearchResultsRenderer": {
        "primaryContents": {
          "sectionListRenderer": {
            "contents": [
              {
                "itemSectionRenderer": {
                  "contents": [
                    {
                      "gridShelfViewModel": {
                        // Shorts视频列表
                        "items": [...]
                      }
                    }
                  ]
                }
              },
              {
                "continuationItemRenderer": {
                  "continuationEndpoint": {
                    "continuationCommand": {
                      "token": "xxx"  // 下一页的token
                    }
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
}

返回:

  • 专门针对Shorts的搜索结果,包含视频列表和翻页token

[English]

Purpose:

  • YouTube Shorts specialized search using native YouTube API

Features:

  • 🎬 Specialized search for YouTube Shorts (<60 seconds)
  • 🔍 Support for multiple filter conditions and sorting options
  • 📱 Optimized for mobile short-form content
  • ⚡ Smart filtering: First request may return mixed content (long+short videos), automatically filters long videos by default

Important - YouTube Shorts Search Mechanism:

According to YouTube's search logic, Shorts search has these characteristics:

  1. First request (no continuation_token): May return mixed content (some long videos + some short videos)
  2. Subsequent requests (with continuation_token): Returns only pure Shorts content
  3. Solutions:
    • Solution A: Use filter_mixed_content=true (default) to automatically filter long videos
    • Solution B: Use continuation_token from first response for second request to get pure Shorts
    • Solution C: Set filter_mixed_content=false to get original mixed content

Parameters:

  • search_query: Search keyword
  • language_code: Language code (zh-CN for Chinese, en-US for English)
  • country_code: Country code affecting regional relevance
  • time_zone: Time zone (e.g., America/Los_Angeles, Asia/Shanghai)
  • filter_mixed_content: Whether to filter long videos from mixed content (default true)

Shorts-specific Filters:

Upload Time (upload_time):

  • hour: Shorts uploaded in the past hour
  • today: Shorts uploaded today
  • week: Shorts uploaded this week
  • month: Shorts uploaded this month
  • year: Shorts uploaded this year

Sort By (sort_by):

  • relevance: Relevance (default)
  • upload_date: Upload date
  • view_count: View count
  • rating: Rating

Pagination Mechanism Explained:

How to get continuation_token:

Extract from response JSON, typically at one of these paths:

# Path 1: In onResponseReceivedCommands
response["onResponseReceivedCommands"][0]["appendContinuationItemsAction"]["continuationItems"][-1]["continuationItemRenderer"]["continuationEndpoint"]["continuationCommand"]["token"]

# Path 2: In contents
response["contents"]["twoColumnSearchResultsRenderer"]["primaryContents"]["sectionListRenderer"]["contents"][-1]["continuationItemRenderer"]["continuationEndpoint"]["continuationCommand"]["token"]

Usage Flow:

  1. First request: Don't pass continuation_token
    GET /api/v1/youtube_web/get_shorts_search?search_query=python
    
  2. Extract token: Find continuation_token in response
  3. Next requests: Pass continuation_token to get next page
    GET /api/v1/youtube_web/get_shorts_search?search_query=python&continuation_token=xxx
    

Response Data Structure:

{
  "code": 200,
  "data": {
    "contents": {
      "twoColumnSearchResultsRenderer": {
        "primaryContents": {
          "sectionListRenderer": {
            "contents": [
              {
                "itemSectionRenderer": {
                  "contents": [
                    {
                      "gridShelfViewModel": {
                        // Shorts video list
                        "items": [...]
                      }
                    }
                  ]
                }
              },
              {
                "continuationItemRenderer": {
                  "continuationEndpoint": {
                    "continuationCommand": {
                      "token": "xxx"  // Token for next page
                    }
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
}

⚠️ Recommend using V2 version:

  • This endpoint returns raw YouTube data structure that requires manual parsing
  • For cleaned/structured data, use /get_shorts_search_v2 endpoint, which returns structured Shorts list and automatically filters non-Shorts content

Returns:

  • Shorts-specific search results with video list and pagination token

[示例/Examples]

基础Shorts搜索(自动过滤长视频)

GET /youtube_web/get_shorts_search?search_query=Python编程

获取原始混合内容(包含长视频)

GET /youtube_web/get_shorts_search?search_query=Python编程&filter_mixed_content=false

搜索本周上传的Python相关Shorts

GET /youtube_web/get_shorts_search?search_query=python&upload_time=week

搜索观看次数最多的技术Shorts

GET /youtube_web/get_shorts_search?search_query=技术&sort_by=view_count

翻页获取更多Shorts

GET /youtube_web/get_shorts_search?search_query=编程&continuation_token=EqcBEgPkuKzor4YybhmgGk...

get/api/v1/youtube/web_v2/get_shorts_search

Request

  • Base URL
    https://api.tikhub.io (the document declares no server; this is the origin it was published from)
  • Auth
    HTTP bearer

Query parameters

search_querystring required

搜索关键字/Search keyword

language_codestring

语言代码(如zh-CN, en-US等)/Language code

country_codestring

国家代码(如US, CN等)/Country code

time_zonestring

时区(如America/Los_Angeles, Asia/Shanghai等)/Time zone

upload_time'hour' | 'today' | 'week' | 'month' | 'year'

YouTube上传时间过滤 - API显示版本

上传时间过滤 | Upload time filter for Shorts

sort_by'relevance' | 'upload_date' | 'view_count' | 'rating'

YouTube搜索排序方式 - API显示版本

排序方式 | Sort by for Shorts

continuation_tokenstring nullable

翻页令牌/Pagination token

filter_mixed_contentboolean

是否过滤混合内容(长视频),默认True / Filter mixed content (long videos), default True

Response

Successful Response

codeinteger

HTTP status code | HTTP状态码

request_idstring nullable

Unique request identifier | 唯一请求标识符

messagestring

Response message (EN-US) | 响应消息 (English)

message_zhstring

Response message (ZH-CN) | 响应消息 (中文)

supportstring

Support message | 支持消息

timestring

The time the response was generated | 生成响应的时间

time_stampinteger

The timestamp the response was generated | 生成响应的时间戳

time_zonestring

The timezone of the response time | 响应时间的时区

docsstring nullable

Link to the API Swagger documentation for this endpoint | 此端点的 API Swagger 文档链接

cache_messagestring nullable

Cache message (EN-US) | 缓存消息 (English)

cache_message_zhstring nullable

Cache message (ZH-CN) | 缓存消息 (中文)

cache_urlstring nullable

The URL to access the cached result | 访问缓存结果的 URL

routerstring

The endpoint that generated this response | 生成此响应的端点

paramsunknown
dataunknown

Changes

    • info

      added the optional property // to the response with the status

    • info

      added the optional property // to the response with the status

    • info

      the response's property default value changed from This request will be cached. You can access the cached result directly using the URL below valid for 24 hours. Accessing the cache will not incur additional charges. to This response is cached and accessible via the URL below for 24 hours at no extra cost. The cache is for request tracing only — it doesn't affect the API's data freshness and won't be returned through the API again. for the status

    • info

      the response's property default value changed from 本次请求将被缓存,你可以使用下面的 URL 直接访问缓存结果,有效期为 24 小时,访问缓存不会产生额外费用。 to 本次响应已缓存,可通过下方 URL 直接查看,有效期 24 小时,访问缓存链接无额外费用。缓存仅用于请求溯源,不影响接口数据的时效性,也不会再次通过接口返回。 for the status