VRC ビデオ解析 API 呼び出しと制限ドキュメント
プロジェクト概要
VRC ビデオ解析は、VRChat プレイヤー向けに設計された、無料かつ迅速なビデオおよびオーディオ解析サービスを提供する多ソースビデオ/オーディオ解析プロキシゲートウェイです。
基本情報
インターフェースアドレス
https://api.kipfel.link/v1 と v3 インターフェースのみ
https://api.kipfel.vrchat.org.cn/v1 コア解析インターフェース
ビデオ解析
インターフェース:/v1/vrc?url={ビデオリンク}
パラメータ:
url(必須):ビデオリンク
応答:
- 成功:直リンクアドレスに 302 リダイレクト
- 失敗:JSON 形式のエラー情報を返す
JSON バージョン:/v1/vrc-json - 常に JSON を返す
JSON 応答形式:
成功応答:
{
"code": 0,
"message": "success",
"log_id": "",
"data": {
"video_id": "7636287742653074728",
"avid": "116855574365910",
"bvid": "BV17PTt6fEJJ",
"title": "ビデオのタイトル内容",
"desc": "ビデオの詳細な説明情報",
"duration": 2136,
"cover": "http://example.com/cover.jpg",
"create_time": 1783075293,
"update_time": 0,
"status": 0,
"category": "130",
"category_name": "音楽",
"author": {
"user_id": "1035330202",
"nickname": "作者のニックネーム",
"avatar": "http://example.com/avatar.jpg"
},
"stat": {
"play_count": 36234,
"like": 2089,
"comment": 11,
"share": 32,
"favorite": 3237
},
"content": {
"play_url": "https://example.com/video_no_watermark.mp4",
"cover_url": "http://example.com/cover_original.jpg",
"hashtags": [],
"mentions": [],
"music_info": {}
}
}
}フィールド説明:
code(Number):ビジネスステータスコード、0は成功を示します。message(String):ビジネス応答メッセージ、通常は"success"です。log_id(String):プラットフォームのログリクエストID(ある場合)。data.video_id(String):プラットフォーム内部の固有プロジェクトID(Douyinのaweme_id/item_id、Kuaishouのphoto_idなど)。data.avid(String):Bilibili特有、AV番号ID(他のプラットフォームは空の文字列になる場合があります)。data.bvid(String):Bilibili特有、BV番号(他のプラットフォームは空の文字列になる場合があります)。data.title(String):ビデオまたはオーディオのタイトル。data.desc(String):ビデオまたはオーディオの説明/概要。data.duration(Number):メディアの合計時間、単位:秒。data.cover(String):デフォルトで表示されるカバー画像の直リンク。data.create_time(Number):作品が公開されたタイムスタンプ(秒単位)。data.update_time(Number):作品が更新されたタイムスタンプ(秒単位)。data.status(Number):メディアステータスコード。data.category(String):作品カテゴリID。data.category_name(String):作品カテゴリ名。data.author.user_id(String):プラットフォーム内のクリエイターの固有 UID / sec_uid。data.author.nickname(String):クリエイターのニックネーム。data.author.avatar(String):クリエイターのアバター画像の URL。data.stat.play_count(Number):総再生回数。data.stat.like(Number):総いいね数。data.stat.comment(Number):総コメント数。data.stat.share(Number):総シェア/転送数。data.stat.favorite(Number):総お気に入り数。data.content.play_url(String):コアデータ:ウォーターマークなしのメディア再生直リンク。data.content.cover_url(String):元の品質のカバー直リンク。data.content.hashtags(Array):抽出されたハッシュタグのリスト。data.content.mentions(Array):抽出された @ユーザー のリスト。data.content.music_info(Object):関連するバックグラウンドミュージック情報(オリジナルサウンドなど)。
失敗応答:
{
"error": true,
"status": 400,
"code": "PARSE_ERROR",
"message": "解析に失敗しました。リンクが正しいか確認してください"
}フィールド説明:
error(boolean):エラーが発生したかどうかstatus(number):HTTP ステータスコードcode(string):エラーコードmessage(string):エラーメッセージ
代替ビデオ解析インターフェース
インターフェース:/v1/kfc?url={ビデオリンク}
パラメータ:/v1/vrc と同じ
応答:/v1/vrc と同じ
JSON バージョン:/v1/kfc-json - 応答形式は /v1/vrc-json と同じ
音楽解析
インターフェース:/v1/music?url={音楽リンク}&i={インデックス}
パラメータ:
url(必須):音楽リンクまたはプレイリストリンクi(オプション):プレイリストインデックス(1 から開始)
応答:
- 成功:302 リダイレクト到直リンクアドレス
- 失敗:JSON 形式のエラー情報を返す
JSON バージョン:/v1/music-json
JSON 応答形式:/v1/vrc-json と同じ
代替音楽解析インターフェース
インターフェース:/v1/musickfc?url={音楽リンク}&i={インデックス}
パラメータ:/v1/music と同じ
応答:/v1/music と同じ
JSON バージョン:/v1/musickfc-json - 応答形式は /v1/music-json と同じ
v3 高度なインターフェース
User-Agent 要件
注意
Unity xxxxxxxxを含むものと含まないものの 2 つの User-Agent を送信する必要があります。Unity xxxxxxxxを含む User-Agent を送信して、弾幕/歌詞を取得できます。Unity xxxxxxxxを含まない User-Agent を送信して、ビデオ直リンク/楽曲直リンクを取得できます。
推奨事項
ヒント
- 各マップで異なる User-Agent を使用して、ブロックを防ぎ、リクエスト元を確認することをお勧めします。
- 例えば、私はあるマップの作者ですが、
Unity xiaokongのように名前を付けることをお勧めします。または、弾幕/歌詞を返さない場合は、規則に従って名前の先頭がUnityでなければなりません。もう一つは自由に名前を付けてください。
弾幕インターフェース
インターフェース:/v3/vrc-danmaku?url={ビデオリンク}
パラメータ:
url(必須):ビデオリンクlimit(オプション):弾幕数制限、デフォルト 10000
応答:
Unity Player(User-Agent に Unity を含む):
{
"success": true,
"data": {
"platform": "bilibili",
"comments": [
{
"time": 10.5,
"text": "弾幕内容",
"user": "ユーザー名",
"color": "FFFFFF"
}
]
}
}フィールド説明:
success(boolean):リクエストが成功したかどうかdata.platform(string):プラットフォーム識別子data.comments(array):弾幕リストcomments[].time(number):弾幕時間点(秒)comments[].text(string):弾幕内容comments[].user(string):ユーザー識別子comments[].color(string):弾幕色(16 進数)
非 Unity Player:
- 成功:302 リダイレクト到直リンクアドレス
- 失敗:JSON 形式のエラー情報を返す
歌詞インターフェース
インターフェース:/v3/vrc-lyric?url={音楽リンク}
パラメータ:
url(必須):音楽リンク
応答:
Unity Player(User-Agent に Unity を含む):
{
"success": true,
"data": {
"platform": "netease",
"lyrics": [
{
"time": 0.0,
"text": "歌詞内容"
}
],
"tlyrics": [
{
"time": 0.0,
"text": "翻訳歌詞内容"
}
]
}
}フィールド説明:
success(boolean):リクエストが成功したかどうかdata.platform(string):プラットフォーム識別子data.lyrics(array):元の歌詞リストlyrics[].time(number):歌詞時間点(秒)lyrics[].text(string):歌詞内容
data.tlyrics(array):翻訳歌詞リストtlyrics[].time(number):歌詞時間点(秒)tlyrics[].text(string):翻訳歌詞内容
非 Unity Player:
- 成功:302 リダイレクト到直リンクアドレス
- 失敗:JSON 形式のエラー情報を返す
一般的な応答形式
エラー応答形式
すべてのインターフェースのエラー応答形式は以下のように統一されています:
{
"error": true,
"status": 400,
"code": "ERROR_CODE",
"message": "エラー説明メッセージ"
}一般的なエラーコード:
METHOD_NOT_ALLOWED(405):必要な url リクエストパラメータがありませんIM_A_TEAPOT(418):url パラメータが空ですINVALID_URL(422):提供されたパラメータに有効な URL リンクが含まれていませんFORBIDDEN_URL(403):このリンクには安全でないターゲットアドレスが含まれており、システムによってブロックされていますCONTENT_RESTRICTED(451):著作権またはコンプライアンス上の理由により、このコンテンツの解析は一時的にサポートされていませんPARSE_ERROR(500):解析失敗NO_NODES_AVAILABLE(503):現在利用可能な解析ノードがありません
注意
- アクセス頻度は動的に調整され、絶対的なレート制限を示すものではありません。
アクセス頻度制限
cloudflare と aliyun esa の制限頻度
| 制限タイプ | ウィンドウサイズ | 制限回数 | 凍結時間 |
|---|---|---|---|
| すべてのインターフェース | 10 秒 | 20 回 | 15 秒 |
Nginx 制限
| 制限タイプ | ウィンドウサイズ | 制限回数 | 凍結時間 |
|---|---|---|---|
| 一部のインターフェース | 10 秒 | 20 回 | 15 秒 |
レート制限 (下位層)
| 制限タイプ | ウィンドウサイズ | 制限回数 |
|---|---|---|
| v1 と v3 のすべてのインターフェース | 1 分 | 50 回 |
制限を超えた場合の応答:
{
"error": "API rate limit exceeded",
"message": "解析頻度が高すぎます。少し待ってから再試行してください。",
"code": "API_LIMIT_EXCEEDED"
}404 凍結
| 制限タイプ | ウィンドウサイズ | 制限回数 | 凍結時間 |
|---|---|---|---|
| すべてのインターフェース | 1 分 | 3 回 | 5 分 |
注意
- 通常のアクセスでは 404 エラーは発生しません。私のウェブサイトの API をクラックしようとしている場合を除きます。
- 制限は回数が増えるにつれて凍結時間が増加し、最大で 24 時間凍結されます。
- 私はあなたのリクエストを監視します。
制限されたコンテンツ
以下のプラットフォームのコンテンツは解析をサポートしていません:
- 腾讯视频 (Tencent Video)
- 爱奇艺 (iQiyi)
- 优酷 (Youku)
- 芒果TV (Mango TV)
- 哔哩哔哩番剧 (Bilibili Anime)
- 西瓜视频 (Xigua Video)
- 搜狐视频 (Sohu Video)