73 lines
2.4 KiB
PHP
73 lines
2.4 KiB
PHP
<?php
|
|
header('Content-Type: application/json');
|
|
require_once __DIR__.'/../includes/pexels.php';
|
|
|
|
$errors = [];
|
|
if (!function_exists('curl_init')) {
|
|
$errors[] = 'cURL extension is not installed or enabled.';
|
|
}
|
|
|
|
// To get more diversity, let's use a few different queries.
|
|
$queries = ['man full body portrait', 'woman full body portrait', 'person full body standing'];
|
|
$results = [];
|
|
|
|
foreach ($queries as $q) {
|
|
// Add random page to get different results each time
|
|
$url = 'https://api.pexels.com/v1/search?query=' . urlencode($q) . '&orientation=portrait&per_page=1&page=' . rand(1, 20);
|
|
$data = pexels_get($url);
|
|
|
|
if ($data && !empty($data['photos'])) {
|
|
$photo = $data['photos'][0];
|
|
$src = $photo['src']['large'] ?? $photo['src']['original'];
|
|
$targetDir = __DIR__ . '/../assets/images/pexels/';
|
|
|
|
$filename = $photo['id'] . '.jpg';
|
|
$target = $targetDir . $filename;
|
|
|
|
// Only download if it doesn't exist to save bandwidth
|
|
if (!file_exists($target)) {
|
|
$download_result = download_to($src, $target);
|
|
if ($download_result === false) {
|
|
$errors[] = "Failed to download image to " . $target;
|
|
}
|
|
}
|
|
|
|
if (file_exists($target)) {
|
|
$results[] = [
|
|
'id' => $photo['id'],
|
|
'local_path' => 'assets/images/pexels/' . $filename,
|
|
'photographer' => $photo['photographer'] ?? 'Unknown',
|
|
'photographer_url' => $photo['photographer_url'] ?? '#',
|
|
'avg_color' => $photo['avg_color']
|
|
];
|
|
} else {
|
|
$errors[] = "Image file does not exist at " . $target;
|
|
}
|
|
} else {
|
|
$errors[] = "Failed to fetch data from Pexels for query: " . $q;
|
|
}
|
|
}
|
|
|
|
// Ensure we have 3 models, even if Pexels fails, use placeholders
|
|
while (count($results) < 3) {
|
|
$placeholder_index = count($results) + 1;
|
|
$results[] = [
|
|
'id' => 'placeholder_' . $placeholder_index,
|
|
// Using an external placeholder service as a fallback
|
|
'local_path' => 'https://via.placeholder.com/400x600.png?text=Model+' . $placeholder_index,
|
|
'photographer' => 'Placeholder',
|
|
'photographer_url' => '#',
|
|
'avg_color' => '#cccccc'
|
|
];
|
|
}
|
|
|
|
$response = [
|
|
'models' => array_slice($results, 0, 3)
|
|
];
|
|
|
|
if (!empty($errors)) {
|
|
$response['errors'] = $errors;
|
|
}
|
|
|
|
echo json_encode($response);
|