Вы не зашли.
Главная » PHP » Как получить cover файлы с сайта musicbrainz.org
#1. WapStyle Off (3)
Участник
2023.04.20 19:07
Недавно у себя реализовал.
Ну начнём (лишне с кода уберу, т.к. он работает у меня)
Код:
// Запрос releaseId
foreach($db->query('SELECT * FROM base WHERE тут хз чё там у Вас') as $row)
{
// Разделим название пополам
$track = explode(' - ', $row['track']);
// Закодируем запрос
$query = urlencode('artist:'.$track[0].' release:'.$track[1]);
// URL запроса releaseId
$url = 'https://musicbrainz.org/ws/2/release/?query='.$query.'&fmt=json';
// Опции CURL
$options = [
CURLOPT_USERAGENT => 'тут нужно указать Ваш сайт и мыло',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
];
$ch = curl_init($url);
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
curl_close($ch);
// Раскодируем полученные данные
$result = json_decode($response, true);
// Если есть releases
if(isset($result['releases'][0]['id']))
{
// Обновим запись releaseId
$stmt = $db->prepare('UPDATE base SET releaseId = :releaseId WHERE id = :id LIMIT 1');
$stmt->execute([':releaseId' => $result['releases'][0]['id'], ':id' => $row['id']]);
}
sleep(1);
}
 
// Выкачиваем обложки
foreach($db->query('SELECT * FROM base WHERE тут хз чё там у Вас') as $row)
{
// Путь хранения файлов
$cacheFile = $setup['cover_cache'].$row['releaseId'].'.jpg';
// Если файла нет, продолжаем
if(file_exists($cacheFile)) continue;
// URL откуда будем брать cover файлы
$url = 'https://coverartarchive.org/release/'.$row['releaseId'].'/front-500';
// Опции CURL
$options = [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
];
$ch = curl_init($url);
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// Если код ответа 200
if($httpCode === 200)
{
// Скачиваем файл
file_put_contents($cacheFile, $response);
}
// Если код ответа 404
if($httpCode === 404)
{
// Удалим записанный releaseId
$stmt = $db->prepare('UPDATE base SET releaseId = NULL WHERE id = :id LIMIT 1');
$stmt->execute([':id' => $row['id']]);
}
sleep(1);
}
вопрос почему 2 foreach?
у меня невозможно реализовать в одном)
вопрос зачем это?
ну я хз, может пригодится)
вопрос, начерта стоят sleep
потому что через крон пашет, чтоб не ддосило их)

нюанс, сервис часто выдаст 404 если часто его просить, поэтому стоит сохранение полученных файлов
файл суём в крон и пусть катает каждый день.

критикуйте)
Добавлено спустя   4 минуты  4 секунды:
Выглядит это так, на готовом варианте

и да, php 8, на 7 не уверен что сработает
Вложения
Screenshot_1.png 223kb {556x908} [загрузок: 68]
Отредактировано WapStyle (2023.04.20 19:07)
#2. Gemorroj Off (107)
Administrator
2023.04.20 23:11
нету разделения логики. нужно отделять логику кэша, работы с БД, http запросы. вынеси в функции отдельные хотя бы.
#3. WapStyle Off (3)
Участник
2023.04.22 19:07
Gemorroj написал:
нету разделения логики. нужно отделять логику кэша, работы с БД, http запросы. вынеси в функции отдельные хотя бы.
смысл этих действий? этот код никогда человеком не используется, делает всё крон
#4. Gemorroj Off (107)
Administrator
2023.04.23 14:02
смысл в разделении кода, чтобы его можно было легко модифицировать.
#5. WapStyle Off (3)
Участник
2023.04.28 18:06
Gemorroj написал:
смысл в разделении кода, чтобы его можно было легко модифицировать.
а нечего модернизировать, каждый 3 часа его гоняет крон, проблем нет
#6. WapStyle Off (3)
Участник
2023.12.22 17:05
Дошли руки, переделал.
Запуск по крону раз в сутки
Можешь ругать))
Вложения
.cover.php 5kb [загрузок: 32]
#7. Gemorroj Off (107)
Administrator
2023.12.22 19:07
тебе нужно разбивать код на функции/классы, иначе это сложно поддерживать.
с ходу видно, что нужно prepare вынести из циклов, иначе в них смысла нет вообще.
#8. WapStyle Off (3)
Участник
2023.12.22 20:08
prepare всего лишь 3 позиции и то если их потребует (файл в кроне, "не для народа")
может мы разные по уровню "кодинга" но это то что я смог у себя в голове вспомнить, вроде не заговнокодил

з.ы. данный функционал скачивания очень трудно найти, по крупицам собирал

вот фигачит, тут скорее на сутки (файлов у меня много)
Вложения
Screenshot_2.png 81kb {638x1051} [загрузок: 47]
Отредактировано WapStyle (2023.12.22 20:08)
#9. WapStyle Off (3)
Участник
2023.12.22 20:08
Gemorroj написал:
Если не трудно покажи пример, я не дурак, я учусь (вспоминаю и учусь), много уже времени прошло с тех времён когда мы "писали код"
Отредактировано WapStyle (2023.12.22 20:08)
#10. Gemorroj Off (107)
Administrator
2023.12.22 23:11
очень приблизительно так. тут нельзя делать 1 файлом, нужно править в контексте проекта. но суть, думаю, ясна.
по поводу 1 инстанса крон джобы, то есть более правильные решения на уровне запуска задания. например такое https://stackoverflow.com/questions/129 … -with-cron
Вложения
cover.php 7kb [загрузок: 30]
Страниц: 1 2 Все
Главная
WEB
PunBB Mod v0.6.2
0.019 s