Skip to content

Commit

Permalink
LCSC: Follow first 'pdfUrl' link to get real datasheet URL (#582)
Browse files Browse the repository at this point in the history
* 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 <[email protected]>
  • Loading branch information
frank-f and jbtronics authored Apr 3, 2024
1 parent da75cca commit 9770ffa
Showing 1 changed file with 25 additions and 1 deletion.
26 changes: 25 additions & 1 deletion src/Services/InfoProviderSystem/Providers/LCSCProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,28 @@ private function queryDetail(string $id): PartDetailDTO
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
* @return PartDetailDTO[]
Expand Down Expand Up @@ -273,7 +295,9 @@ private function getProductDatasheets(?string $url): array
return [];
}

return [new FileDTO($url, null)];
$realUrl = $this->getRealDatasheetUrl($url);

return [new FileDTO($realUrl, null)];
}

/**
Expand Down

0 comments on commit 9770ffa

Please sign in to comment.