Вместо использования регулярных выражений, использование DOMDocument и XPath позволяет вам лучше контролировать выбранные элементы.
Хотя XPath может быть сложным (так же, как регулярное выражение), для некоторых это выглядит более интуитивно понятным. Код использует //script[@type="text/x-component"][contains(text(), "macURL")]
, который разбит на
- // script = любой узел скрипта
- [@ type = "text / x-component"] =, который имеет атрибут с именем введите со спецификацией c значение
- [содержит (текст (), "macURL")] = чей текст содержит строку macURL
Метод query()
возвращает список спичек, так что я oop над ними. Содержимое равно JSON, поэтому расшифруйте его и выведите значения ...
function getbinaryurl ($url)
{
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FRESH_CONNECT, true);
$value1 = curl_exec($curl);
curl_close($curl);
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($value1);
libxml_use_internal_errors(false);
$xp = new DOMXPath($doc);
$srcs = $xp->query('//script[@type="text/x-component"][contains(text(), "macURL")]');
foreach ( $srcs as $src ) {
$content = json_decode( $src->textContent, true);
echo $content['params']['macURL'] . PHP_EOL;
echo $content['params']['windowsURL'] . PHP_EOL;
echo $content['params']['enterpriseURL'] . PHP_EOL;
}
}
$url = "https://www.sourcetreeapp.com/download-archives";
getbinaryurl($url);
, которые выводят
https://product-downloads.atlassian.com/software/sourcetree/ga/Sourcetree_4.0.1_234.zip
https://product-downloads.atlassian.com/software/sourcetree/windows/ga/SourceTreeSetup-3.3.8.exe
https://product-downloads.atlassian.com/software/sourcetree/windows/ga/SourcetreeEnterpriseSetup_3.3.8.msi