• Главная
  • » PHP
  • » Как получить cover файлы с сайта musicbrainz.org

#1 2023.04.20 19:07

WapStyle
Участник
Откуда: Ирбит
Зарегистрирован: 2008.03.26
Сообщений: 475
Карма: 3
Профиль Веб-сайт

Как получить cover файлы с сайта musicbrainz.org

Недавно у себя реализовал.
Ну начнём (лишне с кода уберу, т.к. он работает у меня)

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// Запрос 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 не уверен что сработает


Вложения

Отредактировано WapStyle (2023.04.20 19:26)

Неактивен

#2 2023.04.20 23:30

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Как получить cover файлы с сайта musicbrainz.org

нету разделения логики. нужно отделять логику кэша, работы с БД, http запросы. вынеси в функции отдельные хотя бы.

Неактивен

#3 2023.04.22 19:31

WapStyle
Участник
Откуда: Ирбит
Зарегистрирован: 2008.03.26
Сообщений: 475
Карма: 3
Профиль Веб-сайт

Re: Как получить cover файлы с сайта musicbrainz.org

Gemorroj написал:

нету разделения логики. нужно отделять логику кэша, работы с БД, http запросы. вынеси в функции отдельные хотя бы.

смысл этих действий? этот код никогда человеком не используется, делает всё крон

Неактивен

#4 2023.04.23 14:03

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Как получить cover файлы с сайта musicbrainz.org

смысл в разделении кода, чтобы его можно было легко модифицировать.

Неактивен

#5 2023.04.28 18:25

WapStyle
Участник
Откуда: Ирбит
Зарегистрирован: 2008.03.26
Сообщений: 475
Карма: 3
Профиль Веб-сайт

Re: Как получить cover файлы с сайта musicbrainz.org

Gemorroj написал:

смысл в разделении кода, чтобы его можно было легко модифицировать.

а нечего модернизировать, каждый 3 часа его гоняет крон, проблем нет

Неактивен

#6 2023.12.22 17:26

WapStyle
Участник
Откуда: Ирбит
Зарегистрирован: 2008.03.26
Сообщений: 475
Карма: 3
Профиль Веб-сайт

Re: Как получить cover файлы с сайта musicbrainz.org

Дошли руки, переделал.
Запуск по крону раз в сутки
Можешь ругать))


Вложения

Неактивен

#7 2023.12.22 19:18

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Как получить cover файлы с сайта musicbrainz.org

тебе нужно разбивать код на функции/классы, иначе это сложно поддерживать.
с ходу видно, что нужно prepare вынести из циклов, иначе в них смысла нет вообще.

Неактивен

#8 2023.12.22 20:22

WapStyle
Участник
Откуда: Ирбит
Зарегистрирован: 2008.03.26
Сообщений: 475
Карма: 3
Профиль Веб-сайт

Re: Как получить cover файлы с сайта musicbrainz.org

prepare всего лишь 3 позиции и то если их потребует (файл в кроне, "не для народа")
может мы разные по уровню "кодинга" но это то что я смог у себя в голове вспомнить, вроде не заговнокодил

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

вот фигачит, тут скорее на сутки (файлов у меня много)


Вложения

Отредактировано WapStyle (2023.12.22 20:34)

Неактивен

#9 2023.12.22 20:36

WapStyle
Участник
Откуда: Ирбит
Зарегистрирован: 2008.03.26
Сообщений: 475
Карма: 3
Профиль Веб-сайт

Re: Как получить cover файлы с сайта musicbrainz.org

Gemorroj написал:

Если не трудно покажи пример, я не дурак, я учусь (вспоминаю и учусь), много уже времени прошло с тех времён когда мы "писали код"

Отредактировано WapStyle (2023.12.22 20:37)

Неактивен

#10 2023.12.22 23:02

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Как получить cover файлы с сайта musicbrainz.org

очень приблизительно так. тут нельзя делать 1 файлом, нужно править в контексте проекта. но суть, думаю, ясна.
по поводу 1 инстанса крон джобы, то есть более правильные решения на уровне запуска задания. например такое https://stackoverflow.com/questions/129 … -with-cron


Вложения

Неактивен

  • Главная
  • » PHP
  • » Как получить cover файлы с сайта musicbrainz.org

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.012 s