Пример #1
0
        public async Task <DplayerWebResult> Get([FromQuery] BiliBiliQuery query)
        {
            HttpContext.Request.Headers["Accept"] = "application/json";
            var result = await Bilibili.GetDanmuAsync(query);

            return(new DplayerWebResult(result.ToDanmuDataBases().ToArray()));
        }
Пример #2
0
        /// <summary>
        ///     获取B站弹幕
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public async Task <DanmuDataBiliBili> GetDanmuAsync(BiliBiliQuery query)
        {
            query = await CheckCid(query);

            return(query.Cid == 0
                    ? new DanmuDataBiliBili()
                    : query.Date.Length == 0 || !_canGetHistory
                            ? new DanmuDataBiliBili(await GetDanmuRawByCidAsync(query.Cid))
                            : await GetDanmuAsync(query.Cid, query.Date));
        }
Пример #3
0
        /// <summary>
        ///     获取B站弹幕
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public async Task <BaseDanmuData[]> GetDanmuAsync(BiliBiliQuery query)
        {
            query = await CheckCid(query);

            return(await _caching.GetAsync($"{nameof(GetDanmuAsync)}{query.Cid}",
                                           async() => query.Cid == 0
                                           ?null
                                           : _canGetHistory && query.Date.Length != 0
                                           ?await GetDanmuAsync(query.Cid, query.Date)
                                           : new BiliBiliDanmuData(await GetDanmuRawAsync(
                                                                       $"/x/v1/dm/list.so?oid={query.Cid}")).ToBaseDanmuDatas().ToArray(),
                                           TimeSpan.FromHours(_setting.DanmuCacheTime)));
        }
Пример #4
0
        /// <summary>
        ///     获取B站弹幕
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public async Task <DanmuDataBiliBili> GetDanmuAsync(BiliBiliQuery query)
        {
            query = await CheckCid(query);

            return(await _cache.GetOrCreateCacheAsync($"{nameof(GetDanmuAsync)}{query.Cid}",
                                                      TimeSpan.FromHours(_setting.DanmuCacheTime), TimeSpan.FromHours(_setting.DanmuCacheTime * 4),
                                                      async() => query.Cid == 0
                                                      ?new DanmuDataBiliBili()
                                                          : _canGetHistory && query.Date.Length != 0
                                                          ?await GetDanmuAsync(query.Cid, query.Date)
                                                          : new DanmuDataBiliBili(await GetDanmuRawAsync(
                                                                                      $"https://api.bilibili.com/x/v1/dm/list.so?oid={query.Cid}"))));
        }
Пример #5
0
        public async Task <dynamic> Get([FromQuery] BiliBiliQuery query, string format)
        {
            var danmu = await Bilibili.GetDanmuAsync(query);

            if (!string.IsNullOrEmpty(format) && format.Equals("json"))
            {
                return(new WebResult <IEnumerable <ArtPlayerDanmuData> >(danmu
                                                                         .Select(s => (ArtPlayerDanmuData)s)));
            }
            if (string.IsNullOrEmpty(format))
            {
                HttpContext.Request.Headers["Accept"] = "application/xml";
            }
            return(danmu);
        }
Пример #6
0
        /// <summary>
        ///     检查Cid
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public async Task <BiliBiliQuery> CheckCid(BiliBiliQuery query)
        {
            if (query.Cid == 0)
            {
                query.P = query.P == 0 ? 1 : query.P;
                if (query.Aid != 0)
                {
                    query.Cid = await GetCidAsync(query.Aid, query.P);
                }
                else if (!string.IsNullOrEmpty(query.Bvid))
                {
                    query.Cid = await GetCidAsync(query.Bvid, query.P);
                }
            }

            return(query);
        }
        public async Task <dynamic> Get([FromQuery] BiliBiliQuery query, string format)
        {
            if (query.Date.Length == 0 && !(!string.IsNullOrEmpty(format) && format.Equals("json")))
            {
                HttpContext.Response.ContentType = "application/xml; charset=utf-8";
                return(await Bilibili.GetDanmuRawByQueryAsync(query));
            }

            var danmu = await Bilibili.GetDanmuAsync(query);

            if (!string.IsNullOrEmpty(format) && format.Equals("json"))
            {
                return(new WebResult <IEnumerable <BaseDanmuData> >(danmu.ToDanmuDataBases()));
            }

            if (string.IsNullOrEmpty(format))
            {
                HttpContext.Request.Headers["Accept"] = "application/xml";
            }
            return(danmu);
        }
Пример #8
0
        /// <summary>
        ///     通过Query获取弹幕
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public async Task <Stream> GetDanmuRawByQueryAsync(BiliBiliQuery query)
        {
            query = await CheckCid(query);

            return(await GetDanmuRawByCidAsync(query.Cid));
        }