虎牙开放平台文档

开放API 接入方式

开放API介绍

开放API是提供给开发者访问虎牙后台数据的API接口,通常由开发者的后台服务发起调用。开放API的通信方式包括 Websocket和HTTPS两种,分别对应不同的接口。

**注:** - **开放API相关的能力,目前只对企业认证的开发者开放。** - **如开发者需要使用开放API相关功能,请提供企业名称、盖章版的企业营业执照、授权书、联系人信息、数据用途和订阅的数据,然后邮件联系平台(hy-ext@huya.com)提交权限申请审核,审核通过后才能成功订阅开放数据。**

Websocket 方式

一、域名

正式环境域名:ws-apiext.huya.com

二、例子

(1)、生成签名

按照统一鉴权说明生成对应的鉴权sToken(即JWT token)

(2)、调用方式:

  • 1.建立webSocket连接
var socket = new WebSocket("ws://ws-apiext.huya.com/index.html?do=comm&roomId=201314&appId=xxxxxxxxxxxx&iat=1556265172&exp=1556265772&sToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTYyNjUxNzIsImV4cCI6MTU1NjI2NTc3MiwiYXBwSWQiOiJ4eHh4eHh4eHh4eHgifQ.1dOIN4nYNxnWawvM5TtOR6tN0Wmb8CvNfwGngpxcRcI");
  • 2.在成功建立连接后,用于向服务器发送订阅通知消息以及取消订阅通知消息两种命令,同时保持与服务器的心跳,同一个websocket连接可以同时订阅多个消息
socket.onopen=function(event) { //发送subscribeNotice command socket.send('{"command":"subscribeNotice","data":["getMessageNotice","getVipEnterBannerNotice","getSendItemNotice","getOnTVAwardNotice", "getOpenNobleNotice", "getOpenGuardianNotice", "getUserMutedNotice"],"reqId":"123456789"}'); //设置定时器以文本数据发送ping,保持与服务器的心跳 setInterval(function(){ socket.send('ping'); },15000); };
  • 3.处理到来的信令
socket.onmessage = function(event){ console.log('onmessage: ',event.data); var json = JSON.parse(event.data); if (json.statusCode == 200) { //TODO处理数据json.data if(json.notice == 'getMessageNotice')//弹幕通知数据 { document.write('<font size="2" color="red"><strong>[<em>'+json.data.sendNick+'</em>]:</strong>'+json.data.content+'</font><br/>'); } else if(json.notice == 'getSendItemNotice')//送礼通知数据 { document.write('<font size="2" color="red"><strong>[<em>'+json.data.sendNick+'</em>]:</strong>'+json.data.itemName+'</font><br/>'); } else if(json.notice == 'getVipEnterBannerNotice')//高级用户进场通知数据 { document.write('<font size="2" color="red"><strong>[<em>'+json.data.userNick+'</em>]:</strong>'+json.data.nobleName+'</font><br/>'); } else if(json.notice == 'getOnTVAwardNotice')//上电视弹幕中奖 { document.write('<font size="2" color="red"><strong>[<em>'+json.data.title+'</em>]:</strong>'+json.data.awardName+'</font><br/>'); } else if(json.notice == 'getOpenNobleNotice')//开通续费贵族 { document.write('<font size="2" color="red"><strong>[<em>'+json.data.userNick+'</em>]:</strong> '+ '开通续费贵族' +'</font><br/>'); } else if(json.notice == 'getOpenGuardianNotice')//开通续费守护 { document.write('<font size="2" color="red"><strong>[<em>'+json.data.userNick+'</em>]:</strong> '+ '开通续费守护' +'</font><br/>'); } else if(json.notice == 'getUserMutedNotice')//房管禁言事件 { document.write('<font size="2" color="red"><strong>[<em>'+'房管'+json.data.auditorNick+'</em>]:</strong> ' + json.data.mutedUserNick +'</font><br/>'); } else if(json.notice == 'command')//发送command的回包数据 { //TODO自己的逻辑 } else { //TODO 错误notice处理 } } else { //TODO 错误处理 } };

HTTPS 方式

一、域名

正式环境域名:https://open-apiext.huya.com

二、例子

(1)、生成签名

按照统一鉴权说明生成对应的鉴权sToken(即JWT token)

(2)、调用接口时加上appId、sToken、iat、exp等必要参数字段

curl "https://open-apiext.huya.com/channel/index?do=getChannelInfoByRoom&roomId=518512&appId=xxxxxxxxxxxx&iat=1556265172&exp=1556265772&sToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTYyNjUxNzIsImV4cCI6MTU1NjI2NTc3MiwiYXBwSWQiOiJ4eHh4eHh4eHh4eHgifQ.1dOIN4nYNxnWawvM5TtOR6tN0Wmb8CvNfwGngpxcRcI"

(3)、返回json数据

{ "code": 200,//200:成功,407:鉴权失败,其他失败 "message": "",//消息提示 "data": {//具体返回数据 } }