feat: prepare for 1.53 preview/login
This commit is contained in:
@@ -6,11 +6,15 @@ use serde::{Deserialize, Serialize};
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct GetUserPreviewApi {
|
||||
pub user_id: u32,
|
||||
pub token: Option<String>,
|
||||
}
|
||||
|
||||
impl From<u32> for GetUserPreviewApi {
|
||||
fn from(user_id: u32) -> Self {
|
||||
Self { user_id }
|
||||
Self {
|
||||
user_id,
|
||||
token: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,10 @@ pub struct UserLoginApi {
|
||||
pub acsess_code: String,
|
||||
pub place_id: String,
|
||||
pub client_id: String,
|
||||
|
||||
/// QR Login 结果的 Token
|
||||
pub token: Option<String>,
|
||||
|
||||
/// false 的情况,二维码扫描后半小时可登录。
|
||||
///
|
||||
/// true 的情况,可延长至二维码扫描后的两小时可登录。
|
||||
@@ -36,7 +40,7 @@ pub struct UserLoginApiResp {
|
||||
}
|
||||
|
||||
impl UserLoginApi {
|
||||
pub fn new(user_id: u32, is_continue: bool) -> Self {
|
||||
pub fn new(user_id: u32, is_continue: bool, token: Option<String>) -> Self {
|
||||
let date_time = SystemTime::now()
|
||||
.duration_since(UNIX_EPOCH)
|
||||
.map(|t| t.as_secs())
|
||||
@@ -51,8 +55,10 @@ impl UserLoginApi {
|
||||
region_id: 13,
|
||||
acsess_code: "".to_owned(),
|
||||
place_id: 3223.to_string(),
|
||||
is_continue,
|
||||
generic_flag: 0,
|
||||
|
||||
token,
|
||||
is_continue,
|
||||
client_id: "A63E01E6170".into(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,6 +43,8 @@ pub enum Commands {
|
||||
Preview {
|
||||
#[arg(short, long)]
|
||||
user_id: u32,
|
||||
#[arg(short, long)]
|
||||
token: Option<String>,
|
||||
},
|
||||
/// Get B35 + B15 play records
|
||||
Rating {
|
||||
@@ -79,6 +81,8 @@ pub enum Commands {
|
||||
user_id: u32,
|
||||
#[arg(long)]
|
||||
skip_login: bool,
|
||||
#[arg(short, long)]
|
||||
token: Option<String>,
|
||||
},
|
||||
|
||||
/// Scrape all user, read possible id from stdin
|
||||
|
||||
@@ -165,12 +165,12 @@ async fn main() -> Result<(), Box<dyn snafu::Error>> {
|
||||
json_display(logout)?;
|
||||
}
|
||||
}
|
||||
Commands::Preview { user_id } => {
|
||||
Commands::Preview { user_id, token } => {
|
||||
let preview: GetUserPreviewApiResp = Sdgb1_50::request(
|
||||
&client,
|
||||
APIMethod::GetUserPreviewApi,
|
||||
user_id,
|
||||
GetUserPreviewApi { user_id },
|
||||
GetUserPreviewApi { user_id, token },
|
||||
)
|
||||
.await?;
|
||||
|
||||
@@ -430,6 +430,7 @@ async fn main() -> Result<(), Box<dyn snafu::Error>> {
|
||||
Commands::Userdata {
|
||||
user_id,
|
||||
skip_login,
|
||||
token,
|
||||
} => {
|
||||
let action = async |_| match Sdgb1_50::request::<_, GetUserDataApiResp>(
|
||||
&client,
|
||||
@@ -450,7 +451,7 @@ async fn main() -> Result<(), Box<dyn snafu::Error>> {
|
||||
if skip_login {
|
||||
action(UserLoginApiResp::default()).await;
|
||||
} else {
|
||||
login_action(&client, user_id, action).await?;
|
||||
login_action(&client, user_id, token, action).await?;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,9 +15,10 @@ use spdlog::info;
|
||||
pub async fn login_action<R>(
|
||||
client: &AsyncClient,
|
||||
user_id: u32,
|
||||
token: Option<String>,
|
||||
action: impl AsyncFnOnce(UserLoginApiResp) -> R,
|
||||
) -> Result<R, ApiError> {
|
||||
let login = UserLoginApi::new(user_id, true);
|
||||
let login = UserLoginApi::new(user_id, true, token);
|
||||
let date_time = login.date_time;
|
||||
|
||||
let login_resp: UserLoginApiResp =
|
||||
|
||||
Reference in New Issue
Block a user