首页 > 解决方案 > PHP使用页面上块ID找到的链接保存文件

问题描述

在页面https://data.mos.ru/opendata/61241/带有参数“export/get?id=”的第一个 url 包含下载开放数据 csv 文件的最后一个实际链接 //op.mos.ru/ EHDWSREST/catalog/export/get?id=989116。

问题是每次更新后url的数字结尾都不一样,事先不知道。

我有一个有效的脚本,它允许我将文件保存在一个已知的文件 url 中(但它只保存文件的旧版本,而不是当前版本):

<?php
function downloadJs($file_url, $save_to)
{
    $content = file_get_contents($file_url);
    file_put_contents($save_to, $content);
} 
downloadJs('https://op.mos.ru/EHDWSREST/catalog/export/get?id=989116', realpath("./img/feeds") . '/61241.zip');
$zip = new ZipArchive;$zip->open('./img/feeds/61241.zip');$zip->extractTo('./img/feeds/61241');$zip->close();
$directory = './img/feeds/61241/'; if ($handle = opendir($directory)) { while (false !== ($fileName = readdir($handle))) { $dd = explode($fileName); $newfile = '61241.csv'; rename($directory . $fileName, $directory.$newfile); } closedir($handle); }
echo "Ok!";
?>

我需要更改此 PHP 脚本,以便在页面https://data.mos.ru/opendata/61241/上首先通过参数“export/get?id=”确定下载文件的第一个链接,其中链接位于。

标签: php

解决方案


我不确定你是否明白你的意思。我们有:

<a target="_blank" href="//op.mos.ru/EHDWSREST/catalog/export/get?id=989116" onclick="yaCounter29850344.reachGoal('download_csv')...

也许我们会使用一些正则表达式来获取该 ID。假设您已经有了它的 html file_get_contents

preg_match('#get\?id=(\d+)".* onclick="[^"]+csv[^"]+"#', $html, $matches);
echo $matches[1]; // 989116

推荐阅读