Конвертер Souncloud в mp3 — Soundcloud изменил систему, мой скрипт не работает

У меня есть веб-сайт, который конвертирует ссылки на 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 может сделать это, так что есть решение ^^)

0

Решение

Новый ответ:

Я не очень хорош в 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)

Источник на GitHub

2

Другие решения

Других решений пока нет …