@html_student
Молодой и глупый.

Как пересобрать ссылку php?

Есть прямая ссылка на трек в яндекс музыке
https://music.yandex.ru/album/24249332/track/111305877

Как можно распарсить строку в php чтоб на выходе собрать такую?
https://music.yandex.ru/iframe/#track/111305877/24249332
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
Enokin
@Enokin
Full-stack разработчик
$old_line = "https://music.yandex.ru/album/24249332/track/111305877";
$parts = explode("/", $old_line);
$new_line = "https://music.yandex.ru/iframe/#track/".$parts[5]."/".$parts[4]."/";

echo $new_line;
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
if (preg_match("@^https?://music\.yandex\.ru/album/([0-9]+)/track/([0-9]+)/?$@si", $url, $re))
{
    $new = "https://music.yandex.ru/iframe/#track/{$re[1]}/{$re[2]}";
}
Ответ написан
Комментировать
@alexalexes
Вот способ с parse_url, вместе с вариантами обработки ошибок.
$url_comps = parse_url($url, PHP_URL_HOST | PHP_URL_PATH);
if(!isset($url_comps['host']) || $url_comps['host'] !== 'music.yandex.ru')
{
  echo 'Не Яндекс.Музыка!';
   exit;
}
if(!isset($url_comps['path']) || strllen($url_comps['path']) == 0 || strpos($url_comps['path'], 'album') === false || strpos($url_comps['path'], 'track') === false)
{
  echo 'Нет параметров альбома и трека!';
}
$url_path_params = explode('/', $url_comps['path']);
$url_path_params_count = count($url_path_params);
$album = null; $track = null;

for($i = 0; $i < $url_path_params_count; $i += 2)
{
  if(isset($url_path_params[$i]) && isset($url_path_params[$i + 1]) && is_numeric($url_path_params[$i + 1]))
  {
    if($url_path_params[$i] === 'album')
       $album = $url_path_params[$i + 1];
     if($url_path_params[$i] === 'track')
       $track = $url_path_params[$i + 1];
  }
}
if(is_null($album))
{
  echo 'Не задан числовой параметр альбома!';
  exit;
}
if(is_null($track))
{
  echo 'Не задан числовой параметр трека!';
  exit;
}
$output = "https://music.yandex.ru/iframe/#track/".$album."/".$track."/";
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы