Created
June 8, 2022 23:06
-
-
Save MrCheatEugene/0b8e914dc3f5b67e8e63dc5b48255b9f to your computer and use it in GitHub Desktop.
REST API для треков с сайта "Пушного".
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$disablePlayDirect = true; // Отключить прямое воспроизведение (по умолчанию - true) | |
$useURL = "http://files.pushnoy.ru/tut/"; // Базовый URL, от которого отталкиваются все другие ссылки | |
$songDOM = new DOMDocument;// Новый DOMDocument | |
$songDOM->loadHTML(file_get_contents($useURL)); // Загружаем в DOMDocument сгенерированный сервером HTML-код со списком файлов(в том числе музыкальных) | |
function randomTrack($songDOM,$useURL){ // Случайный трек; Возвращет URL к песне(String) | |
$links = $songDOM->getElementsByTagName('a'); // Берём все элементы ссылок | |
$validLinks = array(); // Создаём массив "Верных" ссылок | |
foreach ($links as $link) {// Перебираем все элементы ссылок | |
$url =$link->getAttribute("href"); // Получаем ссылку у элемента ссылки | |
if(strpos($url, ".mp3")!== false){// Если ссылка содержит в себе ".mp3" | |
array_push($validLinks, $useURL.$url); // Запихиваем в массив "верных" ссылок полную ссылку на файл. | |
} | |
} | |
return strval($validLinks[array_rand($validLinks)]); // Возвращаем случайную композицию | |
} | |
function getTrack($songDOM,$name,$useURL){ // Найти трек с названием файла $name, возвращает URL к песне(String), или если песня не найдена - false. | |
$linksDOM = $songDOM->getElementsByTagName('a');// Берём все элементы ссылок | |
foreach ($linksDOM as $link) { | |
$url = $link->getAttribute("href"); // Получаем ссылку из элемента ссылки | |
similar_text($name, $url,$similar); // Сравниваем ссылку из элемента ссылки с нашим запросом | |
if ($similar > 50) {// Если нашли похожий по названию файл(ссылка и наш запрос схожи на 50%), возвращаем эту ссылку. | |
return $useURL.$url; | |
}elseif (strpos($url,$name) !== false) { // Если не нашли - проверяем входит ли наш запрос в одно из названий файла (similar_text не проверяет - входит ли строка 1 в строку 2), если да - возвращаем ссылку. | |
return $useURL.$url; | |
} | |
} | |
return false; // Если при прошлых двух проверках foreach не прервался и завершился безрезултьтатно, возвращаем false. | |
} | |
// Небольшой обработчик GET-запросов | |
if (isset($_GET['playDirect']) and $_GET['playDirect'] !== yes) // Если параметр playDirect стоит, но он не имеет значение "yes", то | |
unset($_GET['playDirect']); // Удалить этот параметр, чтобы не городить кучу условий в обработчике ниже | |
if (isset($_GET['do']) and $_GET['do'] == "randomTrack" and isset($_GET['playDirect']) == false) | |
header("Location: ".randomTrack($songDOM,$useURL));// Редирект | |
elseif (isset($_GET['do']) and $_GET['do'] == "randomTrack" and isset($_GET['playDirect']) and $_GET['playDirect'] == "yes" and $disablePlayDirect == false){// Играть музыку напрямую, без редиректов(композиция скачивается и отдаётся клиенту напрямую). Эта функция не рекомендуется к использованию, в связи с тем, что композиции могут быть защищены авторским правом. Вы можете её отключить установив значение переменной "$disablePlayDirect" на TRUE | |
header("Content-Type: audio/mpeg"); | |
echo file_get_contents(randomTrack($songDOM,$useURL));// Внимание! Композиция является не цельным файлом, а стримом. Это значит, что длинна композиции и некоторые другие данные могут быть недоступны до конца композиции. Перемотка возможна до конца буфера браузера. | |
} | |
elseif (isset($_GET['do']) and $_GET['do'] == "getTrack" and isset($_GET['q']) == false)// Ошибка в запросе(нету параметра q) | |
echo '"q" (search query) GET parameter required to use getTrack'; | |
elseif (isset($_GET['do']) and $_GET['do'] == "getTrack" and isset($_GET['q'])){ // Воспроизвести трек по названию | |
$track = getTrack($songDOM,$_GET['q'],$useURL); | |
if ($track !== false and isset($_GET['playDirect']) == false) // Воспроизвести случайный трек | |
header("Location: ".$track);// Редирект | |
elseif (isset($_GET['playDirect']) and $_GET['playDirect'] == "yes"and $disablePlayDirect == false){// Играть музыку напрямую, без редиректов(композиция скачивается и отдаётся клиенту напрямую). Эта функция не рекомендуется к использованию, в связи с тем, что композиции могут быть защищены авторским правом. Вы можете её отключить установив значение переменной "$disablePlayDirect" на TRUE | |
header("Content-Type: audio/mpeg"); | |
echo file_get_contents($track); // Внимание! Композиция является не цельным файлом, а стримом. Это значит, что длинна композиции и некоторые другие данные могут быть недоступны до конца композиции. Перемотка возможна до конца буфера браузера. | |
} | |
else | |
echo "Track not found";// Если трек не найден(вернулось false) | |
} | |
elseif (isset($_GET['do']) and isset($_GET['playDirect']) and $_GET['playDirect'] == "yes" and $disablePlayDirect == true) {// При попытке задействовать отключенное прямое воспроизведение, вывести: | |
echo "This feature is disabled on this server";// Сообщение о том, что прямое воспроизведение отключено | |
} | |
else | |
echo 'Unknown function';// Неизвестная функция(функция не найдена) | |
/* | |
Пример использования GET-Обработчика: | |
Случайная песня: /api.php?do=randomTrack | |
Случайная песня с прямым воспроизведением: /api.php?do=randomTrack&playDirect=yes | |
Песня "Hello": /api.php?do=getTrack&q=Hello | |
Песня "Hello" с прямым воспроизведением: /api.php?do=getTrack&q=Hello&playDirect=yes | |
Где /api.php - URL к php-файлу этого API | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment