baltun
Администратор
- Сообщения
- 12.384
- Реакции
- 3.106
- Баллы
- 1.833
PHP:
public static function getRutubeVideoThumbnailUrl($videoId)
{
$videoId = trim((string)$videoId);
// Формируем URL для oEmbed API Rutube
$encodedUrl = urlencode("https://rutube.ru/video/{$videoId}/");
$apiUrl = "https://rutube.ru/api/oembed/?url={$encodedUrl}&format=json";
try {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $apiUrl,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERAGENT => 'Mozilla/5.0',
CURLOPT_TIMEOUT => 10,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200 || empty($response)) {
return self::getDefaultThumbnail(); // fallback
}
$data = json_decode($response, true);
if (isset($data['thumbnail_url'])) {
// Очистка URL: убираем пробелы, лишние символы, параметры
$thumbnailUrl = preg_replace('/\s+/', '', $data['thumbnail_url']);
$thumbnailUrl = explode('?size=l', $thumbnailUrl)[0];
// Проверяем, что есть расширение .jpg
if (preg_match('/\.jpe?g$/i', $thumbnailUrl)) {
return $thumbnailUrl;
} else {
return self::getDefaultThumbnail(); // fallback
}
} else {
return self::getDefaultThumbnail(); // fallback
}
} catch (\Exception $e) {
error_log("Ошибка при загрузке превью Rutube: " . $e->getMessage());
return self::getDefaultThumbnail(); // fallback
}
}
private static function getDefaultThumbnail()
{
return '/site/data/default-thumbnail.jpg ';
}
Последнее редактирование: