URL-адрес mp3 отсутствует в исходном HTML-документе - он добавляется в DOM позже с помощью кода JavaScript.Вот почему вы не можете найти его в «View source source», но можете это сделать с «Inspect element».
Если вы запустите curl https://www.broadcastify.com/listen/feed/30185/web
, вы увидите следующее где-то посередине:
<div id="fp" width="300px"></div>
<script>
$.ajaxSetup({ headers: { "webAuth": "74f440ad812f0cc2192ab782e27608cc" }});
$('#fp').load('/listen/webpl.php?feedId=30185',{t:14});
</script>
Обратите внимание, в частности, что он загружает контент (используя jQuery .load ) в изначально пустое <div id="fp">
чуть выше.Когда вы используете «Inspect element» для поиска аудиоплеера, вы обнаружите, что он находится внутри этого div.
Прежде чем пытаться воспроизвести этот запрос с помощью curl, я посмотрел на вкладке Network инструментов разработчика, чтобыпосмотрим, что сделал браузер.Фильтрация по запросу "прослушать" обнаружила запрос webpl.php
.Вот соответствующая информация на вкладке «Заголовки»:
- URL:
https://www.broadcastify.com/listen/webpl.php?feedId=30185
- Запрос
- POST /listen/webpl.php HTTP / 1.1
- Тип содержимого: application / x-www-form-urlencoded
- webAuth: 74f440ad812f0cc2192ab782e27608cc
- Параметры строки запроса
- Данные запроса
- MIME Тип: application / x-www-form-urlencoded
- t: 14
Давайте воспроизведем этот запрос с помощью curl:
curl 'https://www.broadcastify.com/listen/webpl.php?feedId=30185' \
--request POST \
--header 'webAuth: 74f440ad812f0cc2192ab782e27608cc' \
--data 't=14'
Вот результат:
<script src="/scripts/me_4.2.9/mediaelement-and-player.min.js"></script>
<link rel="stylesheet" href="/scripts/me_4.2.9/mediaelementplayer.min.css"/>
<audio width="300px" id="mePlayer_30185" src="http://relay.broadcastify.com/9wzfd3hrpyctvqx.mp3?xan=DCJP4HvtwMoXdH9HvtwMJ5vv342DfleDptcoX3dH9H48vtwMJ" type="audio/mp3" controls="controls"
autoplay="true">
</audio>
<script>
$('audio').mediaelementplayer({
features: ['playpause', 'current', 'volume'],
error: function () {
alert("Feed has disconnected from the server. This could be due to a power outage, network connection problem, or server problem. Click OK to restart the player. If the player fails to connect then the feed might be down for an extended timeframe.");
location.reload();
}
});
</script>
<br />
<div class="c">If the feed does not automatically play, click or touch the play icon in the player above.</div>
Это ваша mp3-ссылка в атрибуте src
<audio>
тег.Если мы попытаемся получить его:
$ curl http://relay.broadcastify.com/9wzfd3hrpyctvqx.mp3?xan=DCJP4HvtwMoXdH9HvtwMJ5vv342DfleDptcoX3dH9H48vtwMJ
Moved Temporarily. Redirecting to http://audio13.broadcastify.com/9wzfd3hrpyctvqx.mp3?nocache=2623053&xan=DCJP4HvtwMoXdH9HvtwMJ5vv342DfleDptcoX3dH9H48vtwMJ
Если вы попытаетесь получить доступ к этому URL (или к исходному с помощью -L
с указанием curl следовать перенаправлениям), поток mp3 начнет печататься на вашем терминале каккуча бессмысленных символов.
Итак, ваш сценарий оболочки должен попасть в конечную точку /listen/webpl.php
, а не пытаться очистить HTML-страницу веб-плеера.Или, возможно, просто почистите страницу, чтобы сначала получить токен webAuth.
Обновление
В ответ на ваше обновление с помощью сценария оболочки приведен упрощенный сценарий, который делает то же самое, а также удаляетПрефикс «Перемещено временно», чтобы получить аудио URL.Обратите внимание, что нет необходимости использовать временный файл, и синтаксис $(...)
предпочтительнее синтаксиса `...`
:
#!/bin/bash
# I always start my scripts with this. See https://sipb.mit.edu/doc/safe-shell/
set -eufo pipefail
auth=$(curl -s "https://www.broadcastify.com/listen/feed/$1/web" \
| grep webAuth \
| head -n 1 \
| sed 's/^.*"webAuth": "//;s/".*$//')
relay_url=$(curl -s "https://www.broadcastify.com/listen/webpl.php?feedId=$1" \
-H "webAuth: $auth" -d 't=14' \
| grep -o 'http://[^"]*')
audio_url=$(curl -s "$relay_url" | cut -d' ' -f5)
echo "$audio_url"