recycleactor commited on
Commit
0364164
·
verified ·
1 Parent(s): 927bdee

Upload 3 files

Browse files
Files changed (3) hide show
  1. Cargo.toml +1 -1
  2. src/api.rs +19 -5
  3. src/main.rs +8 -3
Cargo.toml CHANGED
@@ -13,7 +13,7 @@ tracing = "0.1"
13
  tracing-subscriber = "0.3"
14
  tokio = { version = "1", features = ["rt-multi-thread", "macros", "fs"] }
15
  serde = { version = "1.0", features = ["derive"] }
16
- reqwest = { version = "0.11", features = ["json", "rustls-tls", "cookies", "gzip", "stream"], default-features = false }
17
  serde_json = "1.0"
18
  thiserror = "1.0"
19
  bytes = "1"
 
13
  tracing-subscriber = "0.3"
14
  tokio = { version = "1", features = ["rt-multi-thread", "macros", "fs"] }
15
  serde = { version = "1.0", features = ["derive"] }
16
+ reqwest = { version = "0.11", features = ["json", "rustls-tls", "cookies", "gzip", "brotli", "deflate", "stream"], default-features = false }
17
  serde_json = "1.0"
18
  thiserror = "1.0"
19
  bytes = "1"
src/api.rs CHANGED
@@ -145,9 +145,7 @@ impl APIClient {
145
 
146
  let body = serde_json::to_string(params)?;
147
 
148
- let json: DeezerResponse = self
149
- .client
150
- .post(url)
151
  .header("Content-Type", "text/plain;charset=UTF-8")
152
  .body(body)
153
  .query(&[
@@ -174,10 +172,18 @@ impl APIClient {
174
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
175
  )
176
  .send()
177
- .await?
178
- .json()
179
  .await?;
180
 
 
 
 
 
 
 
 
 
 
 
181
  if let Some(error) = json.error.as_object() {
182
  for (code, message) in error {
183
  return Err(APIError::DeezerError {
@@ -258,6 +264,14 @@ impl APIClient {
258
  .header("Content-Type", "application/json")
259
  .header("Origin", "https://www.deezer.com")
260
  .header("Referer", "https://www.deezer.com/")
 
 
 
 
 
 
 
 
261
  .json(&req)
262
  .send()
263
  .await
 
145
 
146
  let body = serde_json::to_string(params)?;
147
 
148
+ let resp = self.client.post(url)
 
 
149
  .header("Content-Type", "text/plain;charset=UTF-8")
150
  .body(body)
151
  .query(&[
 
172
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
173
  )
174
  .send()
 
 
175
  .await?;
176
 
177
+ let status = resp.status().as_u16();
178
+ let text = resp.text().await?;
179
+ let json: DeezerResponse = serde_json::from_str(&text).map_err(|e| {
180
+ let snip: String = text.chars().take(200).collect();
181
+ APIError::DeezerError {
182
+ code: "bad_json".to_string(),
183
+ message: format!("status:{status}; {e}; {snip}"),
184
+ }
185
+ })?;
186
+
187
  if let Some(error) = json.error.as_object() {
188
  for (code, message) in error {
189
  return Err(APIError::DeezerError {
 
264
  .header("Content-Type", "application/json")
265
  .header("Origin", "https://www.deezer.com")
266
  .header("Referer", "https://www.deezer.com/")
267
+ .header("Accept-Language", "en-US,en;q=0.9")
268
+ .header("sec-ch-ua", "\"Chromium\";v=\"124\", \"Google Chrome\";v=\"124\", \"Not-A.Brand\";v=\"99\"")
269
+ .header("sec-ch-ua-mobile", "?0")
270
+ .header("sec-ch-ua-platform", "\"Windows\"")
271
+ .header(
272
+ "User-Agent",
273
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
274
+ )
275
  .json(&req)
276
  .send()
277
  .await
src/main.rs CHANGED
@@ -229,10 +229,15 @@ async fn fetch_media_url(
229
  .map_err(|e| e.to_string())?;
230
 
231
  let status = media_resp.status();
232
- let media_json: serde_json::Value = media_resp
233
- .json()
234
  .await
235
- .map_err(|_| "Bad media response".to_string())?;
 
 
 
 
 
236
 
237
  let url = extract_media_url(&media_json);
238
  if !url.is_empty() {
 
229
  .map_err(|e| e.to_string())?;
230
 
231
  let status = media_resp.status();
232
+ let media_text = media_resp
233
+ .text()
234
  .await
235
+ .map_err(|_| "media:read".to_string())?;
236
+
237
+ let media_json: serde_json::Value = serde_json::from_str(&media_text).map_err(|_| {
238
+ let snip: String = media_text.chars().take(200).collect();
239
+ format!("media_bad_json:{}:{}", status.as_u16(), snip)
240
+ })?;
241
 
242
  let url = extract_media_url(&media_json);
243
  if !url.is_empty() {