Live::getMillisecond(), ]; $raw = Curl::get('app', $url, Sign::common($payload)); return json_decode($raw, true); } /** * @use Web User * @param null $room_id * @return mixed */ public static function webGetUserInfo($room_id = null) { $url = 'https://api.live.bilibili.com/xlive/web-room/v1/index/getInfoByUser'; $payload = [ 'room_id' => $room_id ?? getenv('ROOM_ID') ]; $raw = Curl::get('pc', $url, $payload); return json_decode($raw, true);; } /** * @use App User * @param null $room_id * @return mixed */ public static function appGetUserInfo($room_id = null) { $url = 'https://api.live.bilibili.com/xlive/app-room/v1/index/getInfoByUser'; $payload = [ 'room_id' => $room_id ?? getenv('ROOM_ID') ]; $raw = Curl::get('app', $url, Sign::common($payload)); return json_decode($raw, true);; } /** * @use 转换信息 * @return array */ public static function parseCookies(): array { $cookies = getenv('COOKIE'); preg_match('/bili_jct=(.{32})/', $cookies, $token); $token = isset($token[1]) ? $token[1] : ''; preg_match('/DedeUserID=(\d+)/', $cookies, $uid); $uid = isset($uid[1]) ? $uid[1] : ''; preg_match('/DedeUserID__ckMd5=(.{16})/', $cookies, $sid); $sid = isset($sid[1]) ? $sid[1] : ''; return [ 'token' => $token, 'uid' => $uid, 'sid' => $sid, ]; } /** * @use 获取关注列表 * @return array */ public static function fetchFollowings(): array { $user_info = User::parseCookies(); $uid = $user_info['uid']; $followings = []; for ($i = 1; $i < 100; $i++) { $url = "https://api.bilibili.com/x/relation/followings"; $payload = [ 'vmid' => $uid, 'pn' => $i, 'ps' => 50, ]; $headers = [ 'referer' => "https://space.bilibili.com/{$uid}/fans/follow?tagid=-1", ]; $raw = Curl::get('pc', $url, $payload, $headers); $de_raw = json_decode($raw, true); if ($de_raw['code'] == 0 && isset($de_raw['data']['list'])) { foreach ($de_raw['data']['list'] as $user) { array_push($followings, $user['mid']); } if (count($followings) == $de_raw['data']['total']) { break; } continue; } break; } return $followings; } /** * @use 设置用户关注 * @param int $follow_uid * @param bool $un_follow * @return bool */ public static function setUserFollow(int $follow_uid, $un_follow = false): bool { $user_info = User::parseCookies(); $url = 'https://api.live.bilibili.com/relation/v1/Feed/SetUserFollow'; $payload = [ 'uid' => $user_info['uid'], 'type' => $un_follow ? 0 : 1, 'follow' => $follow_uid, 're_src' => 18, 'csrf_token' => $user_info['token'], 'csrf' => $user_info['token'], 'visit_id' => '' ]; $headers = [ 'origin' => 'https://live.bilibili.com', 'referer' => 'https://live.bilibili.com/', ]; $raw = Curl::post('pc', $url, $payload, $headers); // {"code":0,"msg":"success","message":"success","data":[]} $de_raw = json_decode($raw, true); if ($de_raw['code'] == 0) { return true; } return false; } /** * @use 创建关注分组 * @param string $tag_name * @return bool */ public static function createRelationTag(string $tag_name): bool { $user_info = User::parseCookies(); $url = 'https://api.bilibili.com/x/relation/tag/create?cross_domain=true'; $payload = [ 'tag' => $tag_name, 'csrf' => $user_info['token'], ]; $headers = [ 'content-type' => 'application/x-www-form-urlencoded; charset=UTF-8', 'origin' => 'https://live.bilibili.com', 'referer' => 'https://link.bilibili.com/iframe/blfe-link-followIframe' ]; $raw = Curl::post('pc', $url, $payload, $headers); $de_raw = json_decode($raw, true); // {"code":0,"message":"0","ttl":1,"data":{"tagid":244413}} if ($de_raw['code'] == 0) { return true; } return false; } /** * @use 添加用户到分组 * @param int $fid * @param int $tid * @return bool */ public static function tagAddUsers(int $fid, int $tid): bool { $user_info = User::parseCookies(); $url = 'https://api.bilibili.com/x/relation/tags/addUsers?cross_domain=true'; $payload = [ 'fids' => $fid, 'tagids' => $tid, 'csrf' => $user_info['token'], ]; $headers = [ 'content-type' => 'application/x-www-form-urlencoded; charset=UTF-8', 'origin' => 'https://live.bilibili.com', 'referer' => 'https://link.bilibili.com/iframe/blfe-link-followIframe' ]; $raw = Curl::post('pc', $url, $payload, $headers); $de_raw = json_decode($raw, true); // {"code":0,"message":"0","ttl":1} if ($de_raw['code'] == 0) { return true; } return false; } }