$room_id, 'raffle_id' => $de_raw['id'], 'raffle_name' => '节奏风暴', 'wait' => time() ]; Statistics::addPushList($data['raffle_name']); array_push(self::$wait_list, $data); return true; } /** * 格式化日志输出 * @param $id * @param $num * @param $info * @return string */ private static function formatInfo($id, $num, $info): string { return "节奏风暴 {$id} 请求 {$num} 状态 {$info}"; } /** * @use 创建抽奖任务 * @param array $raffles * @return array */ protected static function createLottery(array $raffles): array { $url = 'https://api.live.bilibili.com/lottery/v1/Storm/join'; foreach ($raffles as $raffle) { self::$attempt = empty($attempt = getConf('attempt', 'live_storm')) ? [5, 10] : explode(',', $attempt); $num = mt_rand((int)self::$attempt[0], (int)self::$attempt[1]); $payload = [ 'id' => $raffle['raffle_id'], 'roomid' => $raffle['room_id'], "color" => "16772431", "captcha_token" => "", "captcha_phrase" => "", "token" => getCsrf(), "csrf_token" => getCsrf(), "visit_id" => "" ]; for ($i = 1; $i < $num; $i++) { $raw = Curl::post('app', $url, Sign::common($payload)); if (strpos((string)$raw, 'html') !== false) { Log::notice(self::formatInfo($raffle['raffle_id'], $num, '触发哔哩哔哩安全风控策略(412)')); break; } $de_raw = json_decode($raw, true); // {"code":-412,"message":"请求被拦截","ttl":1,"data":null} if ($de_raw['code'] == -412) { Log::notice(self::formatInfo($raffle['raffle_id'], $num, '触发哔哩哔哩安全风控策略(-412)')); break; } if ($de_raw['code'] == 429 || $de_raw['code'] == -429) { Log::notice(self::formatInfo($raffle['raffle_id'], $num, '节奏风暴未实名或异常验证码')); break; } if ($de_raw['code'] == 0) { $data = $de_raw['data']; Statistics::addSuccessList($raffle['raffle_name']); Log::notice(self::formatInfo($raffle['raffle_id'], $num, $data['mobile_content'])); Statistics::addProfitList($data['title'] . '-' . $data['gift_name'], $data['gift_num']); break; } if (!isset($de_raw['msg'])) { Log::notice(self::formatInfo($raffle['raffle_id'], $num, $de_raw)); break; } if ($de_raw['msg'] == '节奏风暴不存在' || $de_raw['msg'] == '节奏风暴抽奖过期' || $de_raw['msg'] == '没抢到') { Log::notice(self::formatInfo($raffle['raffle_id'], $num, '节奏风暴已经结束')); break; } if ($de_raw['msg'] == '已经领取奖励') { Log::notice(self::formatInfo($raffle['raffle_id'], $num, '节奏风暴已经领取')); break; } if (isset($de_raw['data']) && empty($de_raw['data'])) { Log::debug(self::formatInfo($raffle['raffle_id'], $num, '节奏风暴在小黑屋')); self::pauseLock(); break; } if ($de_raw['msg'] == '你错过了奖励,下次要更快一点哦~') { continue; } Log::notice(self::formatInfo($raffle['raffle_id'], $num, $de_raw['msg'])); continue; } } return []; } /** * @use 解析抽奖信息 * @param array $results * @return void */ protected static function parseLottery(array $results) { foreach ($results as $result) { $data = $result['source']; $content = $result['content']; echo ''; } } }