1use crate::request::{CryptoType, RequestOption};
6use std::collections::HashMap;
7
8mod check_music;
10mod like;
11mod likelist;
12mod lyric;
13mod lyric_new;
14mod scrobble;
15mod song_chorus;
16mod song_detail;
17mod song_downlist;
18mod song_download_url;
19mod song_download_url_v1;
20mod song_dynamic_cover;
21mod song_like;
22mod song_like_check;
23mod song_lyrics_mark;
24mod song_lyrics_mark_add;
25mod song_lyrics_mark_del;
26mod song_lyrics_mark_user_page;
27mod song_monthdownlist;
28mod song_music_detail;
29mod song_order_update;
30mod song_purchased;
31mod song_red_count;
32mod song_singledownlist;
33mod song_url;
34mod song_url_match;
35mod song_url_ncmget;
36mod song_url_v1;
37mod song_url_v1_302;
38mod song_wiki_summary;
39
40mod cloudsearch;
42mod search;
43mod search_default;
44mod search_hot;
45mod search_hot_detail;
46mod search_match;
47mod search_multimatch;
48mod search_suggest;
49mod search_suggest_pc;
50
51mod audio_match;
53
54mod playlist_category_list;
56mod playlist_catlist;
57mod playlist_cover_update;
58mod playlist_create;
59mod playlist_delete;
60mod playlist_desc_update;
61mod playlist_detail;
62mod playlist_detail_dynamic;
63mod playlist_detail_rcmd_get;
64mod playlist_highquality_tags;
65mod playlist_hot;
66mod playlist_import_name_task_create;
67mod playlist_import_task_status;
68mod playlist_mylike;
69mod playlist_name_update;
70mod playlist_order_update;
71mod playlist_privacy;
72mod playlist_subscribe;
73mod playlist_subscribers;
74mod playlist_tags_update;
75mod playlist_track_add;
76mod playlist_track_all;
77mod playlist_track_delete;
78mod playlist_tracks;
79mod playlist_update;
80mod playlist_update_playcount;
81mod playlist_video_recent;
82mod user_playlist;
83
84mod artist_album;
86mod artist_desc;
87mod artist_detail;
88mod artist_detail_dynamic;
89mod artist_fans;
90mod artist_follow_count;
91mod artist_list;
92mod artist_mv;
93mod artist_new_mv;
94mod artist_new_song;
95mod artist_songs;
96mod artist_sub;
97mod artist_sublist;
98mod artist_top_song;
99mod artist_video;
100mod artists;
101
102mod album;
104mod album_detail;
105mod album_detail_dynamic;
106mod album_list;
107mod album_list_style;
108mod album_new;
109mod album_newest;
110mod album_privilege;
111mod album_songsaleboard;
112mod album_sub;
113mod album_sublist;
114
115mod comment;
117mod comment_album;
118mod comment_delete;
119mod comment_dj;
120mod comment_event;
121mod comment_floor;
122mod comment_hot;
123mod comment_hug_list;
124mod comment_info_list;
125mod comment_like;
126mod comment_music;
127mod comment_mv;
128mod comment_new;
129mod comment_reply;
130mod comment_playlist;
131mod comment_video;
132
133mod history_recommend_songs;
135mod history_recommend_songs_detail;
136mod personalized;
137mod personalized_djprogram;
138mod personalized_mv;
139mod personalized_newsong;
140mod personalized_privatecontent;
141mod personalized_privatecontent_list;
142mod program_recommend;
143mod recommend_resource;
144mod recommend_songs;
145mod recommend_songs_dislike;
146
147mod activate_init_profile;
149mod login;
150mod login_cellphone;
151mod login_qr_check;
152mod login_qr_create;
153mod login_qr_key;
154mod login_refresh;
155mod login_status;
156mod logout;
157mod register_anonimous;
158mod register_cellphone;
159
160mod captcha_sent;
162mod captcha_verify;
163mod cellphone_existence_check;
164mod nickname_check;
165mod verify_get_qr;
166mod verify_qrcodestatus;
167
168mod follow;
170mod get_userids;
171mod rebind;
172mod setting;
173mod user_account;
174mod user_audio;
175mod user_binding;
176mod user_bindingcellphone;
177mod user_cloud;
178mod user_cloud_del;
179mod user_cloud_detail;
180mod user_comment_history;
181mod user_detail;
182mod user_detail_new;
183mod user_dj;
184mod user_event;
185mod user_follow_mixed;
186mod user_followeds;
187mod user_follows;
188mod user_level;
189mod user_medal;
190mod user_mutualfollow_get;
191mod user_playlist_collect;
192mod user_playlist_create;
193mod user_record;
194mod user_replacephone;
195mod user_social_status;
196mod user_social_status_edit;
197mod user_social_status_rcmd;
198mod user_social_status_support;
199mod user_subcount;
200mod user_update;
201
202mod fm_trash;
204mod personal_fm;
205mod personal_fm_mode;
206
207mod banner;
209
210mod daily_signin;
212mod sign_happy_info;
213mod signin_progress;
214
215mod mv_all;
217mod mv_detail;
218mod mv_detail_info;
219mod mv_exclusive_rcmd;
220mod mv_first;
221mod mv_sub;
222mod mv_sublist;
223mod mv_url;
224
225mod dj_banner;
227mod dj_category_excludehot;
228mod dj_category_recommend;
229mod dj_catelist;
230mod dj_detail;
231mod dj_difm_all_style_channel;
232mod dj_difm_channel_subscribe;
233mod dj_difm_channel_unsubscribe;
234mod dj_difm_playing_tracks_list;
235mod dj_difm_subscribe_channels_get;
236mod dj_hot;
237mod dj_paygift;
238mod dj_personalize_recommend;
239mod dj_program;
240mod dj_program_detail;
241mod dj_program_toplist;
242mod dj_program_toplist_hours;
243mod dj_radio_hot;
244mod dj_radio_top;
245mod dj_recommend;
246mod dj_recommend_type;
247mod dj_sub;
248mod dj_sublist;
249mod dj_subscriber;
250mod dj_today_perfered;
251mod dj_toplist;
252mod dj_toplist_hours;
253mod dj_toplist_newcomer;
254mod dj_toplist_pay;
255mod dj_toplist_popular;
256
257mod simi_artist;
259mod simi_mv;
260mod simi_playlist;
261mod simi_song;
262mod simi_user;
263
264mod top_album;
266mod top_artists;
267mod top_list;
268mod top_mv;
269mod top_playlist;
270mod top_playlist_highquality;
271mod top_song;
272mod toplist;
273mod toplist_artist;
274mod toplist_detail;
275mod toplist_detail_v2;
276
277mod video_category_list;
279mod video_detail;
280mod video_detail_info;
281mod video_group;
282mod video_group_list;
283mod video_sub;
284mod video_timeline_all;
285mod video_timeline_recommend;
286mod video_url;
287
288mod msg_comments;
290mod msg_forwards;
291mod msg_notices;
292mod msg_private;
293mod msg_private_history;
294mod msg_recentcontact;
295
296mod event;
298mod event_del;
299mod event_forward;
300
301mod send_album;
303mod send_playlist;
304mod send_song;
305mod send_text;
306mod share_resource;
307
308mod resource_like;
310
311mod countries_code_list;
313
314mod recent_listen_list;
316mod record_recent_album;
317mod record_recent_dj;
318mod record_recent_playlist;
319mod record_recent_song;
320mod record_recent_video;
321mod record_recent_voice;
322
323mod hot_topic;
325mod topic_detail;
326mod topic_detail_event_hot;
327mod topic_sublist;
328
329mod style_album;
331mod style_artist;
332mod style_detail;
333mod style_list;
334mod style_playlist;
335mod style_preference;
336mod style_song;
337
338mod digital_album_detail;
340mod digital_album_ordering;
341mod digital_album_purchased;
342mod digital_album_sales;
343
344mod sheet_list;
346mod sheet_preview;
347
348mod mlog_music_rcmd;
350mod mlog_to_video;
351mod mlog_url;
352
353mod listen_data_realtime_report;
355mod listen_data_report;
356mod listen_data_today_song;
357mod listen_data_total;
358mod listen_data_year_report;
359
360mod broadcast_category_region_get;
362mod broadcast_channel_collect_list;
363mod broadcast_channel_currentinfo;
364mod broadcast_channel_list;
365mod broadcast_sub;
366
367mod creator_authinfo_get;
369mod threshold_detail_get;
370
371mod summary_annual;
373
374mod musician_cloudbean;
376mod musician_cloudbean_obtain;
377mod musician_data_overview;
378mod musician_play_trend;
379mod musician_sign;
380mod musician_tasks;
381mod musician_tasks_new;
382mod musician_vip_tasks;
383
384mod ugc_album_get;
386mod ugc_artist_get;
387mod ugc_artist_search;
388mod ugc_detail;
389mod ugc_mv_get;
390mod ugc_song_get;
391mod ugc_user_devote;
392
393mod fanscenter_basicinfo_age_get;
395mod fanscenter_basicinfo_gender_get;
396mod fanscenter_basicinfo_province_get;
397mod fanscenter_overview_get;
398mod fanscenter_trend_list;
399
400mod voice_delete;
402mod voice_detail;
403mod voice_lyric;
404mod voicelist_detail;
405mod voicelist_my_created;
406mod voicelist_list;
407mod voicelist_list_search;
408mod voicelist_search;
409mod voicelist_trans;
410
411mod aidj_content_rcmd;
413
414mod music_first_listen_info;
416
417mod listentogether_accept;
419mod listentogether_end;
420mod listentogether_heatbeat;
421mod listentogether_play_command;
422mod listentogether_room_check;
423mod listentogether_room_create;
424mod listentogether_status;
425mod listentogether_sync_list_command;
426mod listentogether_sync_playlist_get;
427
428mod vip_growthpoint;
430mod vip_growthpoint_details;
431mod vip_growthpoint_get;
432mod vip_info;
433mod vip_info_v2;
434mod vip_sign;
435mod vip_sign_info;
436mod vip_tasks;
437mod vip_timemachine;
438
439mod yunbei;
441mod yunbei_expense;
442mod yunbei_info;
443mod yunbei_rcmd_song;
444mod yunbei_rcmd_song_history;
445mod yunbei_receipt;
446mod yunbei_sign;
447mod yunbei_task_finish;
448mod yunbei_tasks;
449mod yunbei_tasks_todo;
450mod yunbei_today;
451
452mod cloud;
454mod cloud_import;
455mod cloud_lyric_get;
456mod cloud_match;
457mod cloud_upload_complete;
458mod cloud_upload_token;
459
460mod eapi_decrypt;
462
463#[allow(clippy::module_inception)]
465mod api;
466mod batch;
467mod calendar;
468mod homepage_block_page;
469mod homepage_dragon_ball;
470mod hug_comment;
471mod inner_version;
472mod pl_count;
473mod playmode_intelligence_list;
474mod playmode_song_vector;
475mod related_allvideo;
476mod related_playlist;
477mod starpick_comments_summary;
478mod weblog;
479
480mod avatar_upload;
482mod voice_upload;
483
484#[derive(Debug, Clone, Default)]
490pub struct Query {
491 pub params: HashMap<String, String>,
492 pub cookie: Option<String>,
493 pub proxy: Option<String>,
494 pub real_ip: Option<String>,
495 pub random_cn_ip: bool,
496 pub ua: Option<String>,
497 pub e_r: Option<bool>,
498 pub domain: Option<String>,
499}
500
501impl Query {
502 pub fn new() -> Self {
503 Self::default()
504 }
505
506 pub fn param(mut self, key: &str, value: &str) -> Self {
508 self.params.insert(key.to_string(), value.to_string());
509 self
510 }
511
512 pub fn cookie(mut self, cookie: &str) -> Self {
514 self.cookie = Some(cookie.to_string());
515 self
516 }
517
518 pub fn get(&self, key: &str) -> Option<&str> {
520 self.params.get(key).map(|s| s.as_str())
521 }
522
523 pub fn get_or(&self, key: &str, default: &str) -> String {
525 self.params
526 .get(key)
527 .cloned()
528 .unwrap_or_else(|| default.to_string())
529 }
530
531 pub fn get_i64(&self, key: &str, default: i64) -> i64 {
535 match self.params.get(key) {
536 Some(v) => v.parse::<i64>().unwrap_or(default),
537 None => default,
538 }
539 }
540
541 pub fn get_bool(&self, key: &str, default: bool) -> bool {
545 match self.params.get(key).map(|s| s.as_str()) {
546 Some("true") | Some("1") => true,
547 Some("false") | Some("0") => false,
548 _ => default,
549 }
550 }
551
552 pub(crate) fn to_option(&self, crypto: CryptoType) -> RequestOption {
554 RequestOption {
555 crypto,
556 cookie: self.cookie.clone(),
557 ua: self.ua.clone(),
558 proxy: self.proxy.clone(),
559 real_ip: self.real_ip.clone(),
560 random_cn_ip: self.random_cn_ip,
561 e_r: self.e_r,
562 domain: self.domain.clone(),
563 check_token: false,
564 }
565 }
566}