У меня есть веб-сайт, который конвертирует ссылки на soundcloud в mp3, но недавно они изменили свою систему, поэтому мой скрипт больше не работает 🙁
Мой сценарий прост:
$url = file_get_contents($link);
$url = str_replace('\u0026amp;', '&', $url);
preg_match_all('#title":"([^"]*)"#i', $url, $titles); //search for the song titles
preg_match_all('#streamUrl":"([^"]*)"#i', $url, $streamUrls); //search for the stream/download urls
Ссылка на Soundcloud — $ url
Названия были в переменной $ title, а ссылки — в $ streamUrls.
Но теперь я не могу использовать функцию file_get_content со страницами soundcloud, у меня ошибка «400».
У кого-нибудь есть другое РАБОЧЕЕ решение?
(для информации, что-нибудь2mp3.com может сделать это, так что есть решение ^^)
Новый ответ:
Я не очень хорош в PHP, но вы, вероятно, захотите что-то вроде этого
<?php
$data = json_decode(file_get_contents('https://api.soundcloud.com/resolve.json?url=https%3A%2F%2Fsoundcloud.com%2Fmsmrsounds%2Fms-mr-hurricane-chvrches-remix&client_id=[your client_id]'), true);
print_r($data);
echo $data["operacion"];
echo $data["stream_url"];
$file = $data["stream_url"] .= '?client_id=[your client_id]';
echo $file;
header("Content-type: application/x-file-to-save");
header("Content-Disposition: attachment; filename=".basename($file));
readfile($file);
?>
Старый ответ:
Вот небольшой скрипт на Python, который я написал для загрузки объединенного потокового MP3 со скоростью 128 кбит / с с любого URL-адреса SoundCloud для этот StackOverflow вопрос.
import json, requests
url = 'https://api.soundcloud.com/resolve.json'
your_client_id = '[PUT YOUR client_id HERE]'
params = dict(
url='https://soundcloud.com/msmrsounds/ms-mr-hurricane-chvrches-remix',
client_id=your_client_id,
)
# resolve
resp = requests.get(url=url, params=params)
data = json.loads(resp.text)
# get api url
track_url = data.get('location')
track_resp = requests.get(url=url, params=params)
track_data = json.loads(resp.text)
# get stream_url
track_title = track_data.get('title')
stream_url = track_data.get('stream_url')
print track_title
print stream_url
stream_params = dict(
client_id=your_client_id,
)
stream_resp = requests.get(url=url, params=params)
# pass in title + '.mp3' for filename
with open(track_title + '.mp3', 'wb') as handle:
response = requests.get(url=stream_url, params=stream_params, stream=True)
if not response.ok:
# Something went wrong
print 'Error downloading mp3'
for block in response.iter_content(1024):
if not block:
break
handle.write(block)
Других решений пока нет …