using Newtonsoft.Json.Linq;
using System.Collections.Generic;
static RestClient client = new RestClient();
var result = getLiveStartDateTimeList(4767523, 10413051);
foreach (var pair in result)
if (pair.Value == default)
Console.WriteLine($"{pair.Key}: offline");
Console.WriteLine($"{pair.Key}: {pair.Value:yy-MM-dd HH:mm:ss}");
static IReadOnlyDictionary<int, DateTime> getLiveStartDateTimeList(params int[] roomIds)
var req = new RestRequest("https://api.live.bilibili.com/room/v2/Room/get_by_ids", Method.POST)
.AddJsonBody(new { ids = roomIds });
var data = GetBiliData(req);
var result = data.AsJEnumerable().Select(j => (JProperty)j).ToDictionary(j => int.Parse(j.Name), j =>
if (j.Value["live_status"].ToObject<string>() != "1")
var dateStr = j.Value["live_time"].ToObject<string>();
var date = DateTime.ParseExact(dateStr, "yyyy-MM-dd HH:mm:ss", null);
static DateTime getLiveStartDateTime(int roomId)
var req = new RestRequest("https://api.live.bilibili.com/room/v1/Room/room_init", Method.GET)
.AddQueryParameter("id", roomId.ToString());
var data = GetBiliData(req);
if (data["live_status"].ToObject<string>() != "1")
var timestamp = data["live_time"].ToObject<int>();
var date = DateTimeOffset.FromUnixTimeSeconds(timestamp).ToLocalTime();
static JObject GetBiliData(IRestRequest req)
var rsp = client.Execute(req);
throw new Exception("请求失败:" + rsp.ErrorMessage);
var json = JObject.Parse(rsp.Content);
if (json["code"].ToObject<int>() != 0)
throw new Exception("响应错误:" + json["msg"].ToObject<string>());
return (JObject)json["data"];