mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-20 17:15:51 +02:00
LCSC: Follow first 'pdfUrl' link to get real datasheet URL (#582)
* Follow first 'pdfUrl' link to get real datasheet URL * Fix @param * Fix @param * Remove User-Agent header It's not needed - LCSC was just having some server troubles over the weekend * Added comment explaining the json_decode in getRealDatasheetUrl --------- Co-authored-by: Jan Böhmer <mail@jan-boehmer.de>
This commit is contained in:
parent
da75cca97c
commit
9770ffa46b
1 changed files with 25 additions and 1 deletions
|
@ -90,6 +90,28 @@ class LCSCProvider implements InfoProviderInterface
|
||||||
return $this->getPartDetail($product);
|
return $this->getPartDetail($product);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $url
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
private function getRealDatasheetUrl(?string $url): string
|
||||||
|
{
|
||||||
|
if (!empty($url) && preg_match("/^https:\/\/(datasheet\.lcsc\.com|www\.lcsc\.com\/datasheet)\/.*(C\d+)\.pdf$/", $url, $matches) > 0) {
|
||||||
|
$response = $this->lcscClient->request('GET', $url, [
|
||||||
|
'headers' => [
|
||||||
|
'Referer' => 'https://www.lcsc.com/product-detail/_' . $matches[2] . '.html'
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
if (preg_match('/(pdfUrl): ?("[^"]+wmsc\.lcsc\.com[^"]+\.pdf")/', $response->getContent(), $matches) > 0) {
|
||||||
|
//HACKY: The URL string contains escaped characters like \u002F, etc. To decode it, the JSON decoding is reused
|
||||||
|
//See https://github.com/Part-DB/Part-DB-server/pull/582#issuecomment-2033125934
|
||||||
|
$jsonObj = json_decode('{"' . $matches[1] . '": ' . $matches[2] . '}');
|
||||||
|
$url = $jsonObj->pdfUrl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $url;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $term
|
* @param string $term
|
||||||
* @return PartDetailDTO[]
|
* @return PartDetailDTO[]
|
||||||
|
@ -273,7 +295,9 @@ class LCSCProvider implements InfoProviderInterface
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return [new FileDTO($url, null)];
|
$realUrl = $this->getRealDatasheetUrl($url);
|
||||||
|
|
||||||
|
return [new FileDTO($realUrl, null)];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue