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

#1 2023.04.20 19:07

WapStyle
Участник
Откуда: Ирбит
Зарегистрирован: 2008.03.26
Сообщений: 463
Карма: 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
Сообщений: 6585
Карма: 107
Профиль Веб-сайт

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

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

Неактивен

#3 2023.04.22 19:31

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

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

Gemorroj написал:

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

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

Неактивен

#4 2023.04.23 14:03

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

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

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

Неактивен

#5 2023.04.28 18:25

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

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

Gemorroj написал:

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

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

Неактивен

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

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

forum.wapinet.ru

PunBB Mod v0.6.2
0.009 s