| Server IP : 127.0.0.1 / Your IP : 216.73.216.109 Web Server : Apache/2.4.54 (Win64) OpenSSL/1.1.1q PHP/8.1.10 System : Windows NT DESKTOP-E5T4RUN 10.0 build 19045 (Windows 10) AMD64 User : SERVERWEB ( 0) PHP Version : 8.1.10 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/laragon/www/app/ |
Upload File : |
<?php
const WP_LEGACY_API_BASE_URL = 'https://prensa.quillacollo.gob.bo/wp-json/wp/v2';
const WP_API_CACHE_TTL = 300;
function wp_api_base_url() {
$configuredUrl = getenv('WP_API_BASE_URL');
if (!empty($configuredUrl)) {
return rtrim($configuredUrl, '/');
}
if (!empty($_SERVER['HTTP_HOST'])) {
$scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
$host = $_SERVER['HTTP_HOST'];
$projectBasePath = '';
if ($host === 'prensa.quillacollo.gob.bo') {
return "{$scheme}://{$host}/wp-json/wp/v2";
}
if (!empty($_SERVER['SCRIPT_NAME'])) {
$projectBasePath = preg_replace('#/(app|endpoints|layouts|modules|pages|sections)/.*$#', '', $_SERVER['SCRIPT_NAME']);
$projectBasePath = rtrim($projectBasePath ?: '', '/');
}
return "{$scheme}://{$host}{$projectBasePath}/prensa/wp-json/wp/v2";
}
return WP_LEGACY_API_BASE_URL;
}
function wp_local_api_base_url() {
if (empty($_SERVER['HTTP_HOST'])) {
return null;
}
$scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
$host = $_SERVER['HTTP_HOST'];
$projectBasePath = '';
if ($host === 'prensa.quillacollo.gob.bo') {
return "{$scheme}://{$host}/wp-json/wp/v2";
}
if (!empty($_SERVER['SCRIPT_NAME'])) {
$projectBasePath = preg_replace('#/(app|endpoints|layouts|modules|pages|sections)/.*$#', '', $_SERVER['SCRIPT_NAME']);
$projectBasePath = rtrim($projectBasePath ?: '', '/');
}
return "{$scheme}://{$host}{$projectBasePath}/prensa/wp-json/wp/v2";
}
function wp_api_url($endpoint, array $params = []) {
$endpoint = trim($endpoint, '/');
$url = wp_api_base_url() . "/{$endpoint}";
if (!empty($params)) {
$url .= '?' . http_build_query($params);
}
return $url;
}
function wp_category_url($categoryId) {
return wp_api_url('categories/' . (int) $categoryId);
}
function wp_posts_url(array $params = []) {
if (!array_key_exists('_embed', $params)) {
$params['_embed'] = 1;
}
return wp_api_url('posts', $params);
}
function wp_secure_media_url($url) {
if (empty($url)) {
return '';
}
$url = html_entity_decode($url, ENT_QUOTES | ENT_HTML5, 'UTF-8');
return preg_replace('#^http://prensa\.quillacollo\.gob\.bo/#i', 'https://prensa.quillacollo.gob.bo/', $url);
}
function wp_extract_first_content_image_url($content) {
if (empty($content)) {
return '';
}
if (preg_match('/<img[^>]+(?:data-src|data-lazy-src|src)=["\']([^"\']+\.(?:jpg|jpeg|png|gif|webp))(?:\?[^"\']*)?["\']/i', $content, $matches)) {
return wp_secure_media_url($matches[1]);
}
return '';
}
function wp_post_featured_image_url(array $post, $fallbackFromContent = true) {
$featuredMedia = $post['_embedded']['wp:featuredmedia'][0] ?? null;
if (is_array($featuredMedia)) {
$sizes = $featuredMedia['media_details']['sizes'] ?? [];
foreach (['medium_large', 'large', 'full', 'medium', 'thumbnail'] as $sizeName) {
if (!empty($sizes[$sizeName]['source_url'])) {
return wp_secure_media_url($sizes[$sizeName]['source_url']);
}
}
if (!empty($featuredMedia['source_url'])) {
return wp_secure_media_url($featuredMedia['source_url']);
}
}
if (!empty($post['jetpack_featured_media_url'])) {
return wp_secure_media_url($post['jetpack_featured_media_url']);
}
if ($fallbackFromContent) {
return wp_extract_first_content_image_url($post['content']['rendered'] ?? '');
}
return '';
}
function find_wp_category_id($category, array $categories) {
if ($category === null || $category === '') {
return null;
}
if (is_numeric($category)) {
return (int) $category;
}
foreach ($categories as $item) {
if (isset($item['name'], $item['id']) && $item['name'] === $category) {
return (int) $item['id'];
}
}
return null;
}
function normalize_wp_api_url($url) {
$legacyBases = [
'https://prensa.quillacollo.gob.bo/wp-json/wp/v2',
'http://prensa.quillacollo.gob.bo/wp-json/wp/v2',
];
foreach ($legacyBases as $legacyBase) {
if (strpos($url, $legacyBase) === 0) {
return wp_api_base_url() . substr($url, strlen($legacyBase));
}
}
return $url;
}
function wp_api_fallback_url($url) {
$localBase = wp_local_api_base_url();
if (empty($localBase) || strpos($url, $localBase) !== 0) {
return null;
}
return WP_LEGACY_API_BASE_URL . substr($url, strlen($localBase));
}
function wp_api_cache_dir() {
return __DIR__ . '/cache/wp-api';
}
function wp_api_cache_path($url) {
return wp_api_cache_dir() . '/' . sha1('v3:' . $url) . '.json';
}
function wp_api_read_cache($url) {
global $wpApiLastHeaders;
$path = wp_api_cache_path($url);
if (!is_file($path) || (time() - filemtime($path)) > WP_API_CACHE_TTL) {
return null;
}
$cached = file_get_contents($path);
$decoded = json_decode($cached, true);
if (!is_array($decoded)) {
return null;
}
if (array_key_exists('data', $decoded)) {
$wpApiLastHeaders = $decoded['headers'] ?? [];
return is_array($decoded['data']) ? $decoded['data'] : null;
}
$wpApiLastHeaders = [];
return $decoded;
}
function wp_api_write_cache($url, array $data, array $headers = []) {
$dir = wp_api_cache_dir();
if (!is_dir($dir)) {
mkdir($dir, 0775, true);
}
file_put_contents(wp_api_cache_path($url), json_encode([
'headers' => $headers,
'data' => $data,
]));
}
function wp_api_last_total_pages($default = 1) {
global $wpApiLastHeaders;
foreach ($wpApiLastHeaders ?? [] as $name => $value) {
if (strtolower($name) === 'x-wp-totalpages') {
return max(1, (int) $value);
}
}
return $default;
}
$apiUrl = wp_posts_url();
function decode_api($url, $allowFallback = true) {
global $wpApiLastHeaders;
$curl = null;
$wpApiLastHeaders = [];
try {
if ($allowFallback) {
$url = normalize_wp_api_url($url);
}
$cachedData = wp_api_read_cache($url);
if ($cachedData !== null) {
return $cachedData;
}
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => false, // Disable SSL verification
CURLOPT_SSL_VERIFYHOST => false, // Disable SSL host verification
CURLOPT_HEADERFUNCTION => function ($curl, $header) use (&$wpApiLastHeaders) {
$length = strlen($header);
$parts = explode(':', $header, 2);
if (count($parts) === 2) {
$wpApiLastHeaders[strtolower(trim($parts[0]))] = trim($parts[1]);
}
return $length;
},
));
$response = curl_exec($curl);
if ($response === false) {
error_log("WordPress API cURL error for {$url}: " . curl_error($curl));
return array();
}
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($httpCode < 200 || $httpCode >= 300) {
error_log("WordPress API HTTP {$httpCode} for {$url}");
$fallbackUrl = $allowFallback ? wp_api_fallback_url($url) : null;
if (!empty($fallbackUrl)) {
return decode_api($fallbackUrl, false);
}
return array();
}
$decoded_data = json_decode($response, true);
if ($decoded_data === null) {
error_log("WordPress API JSON error for {$url}: " . json_last_error_msg());
$fallbackUrl = $allowFallback ? wp_api_fallback_url($url) : null;
if (!empty($fallbackUrl)) {
return decode_api($fallbackUrl, false);
}
return array();
}
wp_api_write_cache($url, $decoded_data, $wpApiLastHeaders);
return $decoded_data;
} catch (Exception $e) {
error_log("WordPress API exception: " . $e->getMessage());
return array();
} finally {
if ($curl !== null) {
curl_close($curl);
}
}
}
// function decode_api($url) {
// try {
// $context = stream_context_create([
// "ssl" => [
// "verify_peer" => false,
// "verify_peer_name" => false,
// ],
// ]);
// $response = file_get_contents($url, false, $context);
// $response = file_get_contents($url);
// if ($response === false) {
// return array();
// }
// $decoded_data = json_decode($response, true);
// if ($decoded_data === null) {
// return array();
// }
// return $decoded_data;
// } catch (Exception $e) {
// return array();
// }
// }
function getAllByCategory(){
$categoryIds = [261,13,1, 27,273,5,25,17,24,266];
$noticiasByCategory = [];
foreach ($categoryIds as $categoryId) {
$url = wp_posts_url(['categories' => $categoryId]);
$noticias = decode_api($url);
$noticiasByCategory[$categoryId] = $noticias;
}
return $noticiasByCategory;
}
function get3NewsByCategory(string $categoryId){
$url = wp_posts_url(['categories' => $categoryId, 'per_page' => 3]);
$noticiasByCategory = decode_api($url);
return $noticiasByCategory;
}
function getNewsByCategory(string $categoryId){
$url = wp_posts_url(['categories' => $categoryId]);
$noticiasByCategory = decode_api($url);
return $noticiasByCategory;
}
function getNewsByUser(string $userId){
$url = wp_posts_url(['author' => $userId]);
$noticiasByUser = decode_api($url);
return $noticiasByUser;
}
function getListC($i){
$urlUser = wp_api_url('users');
$urlCategories = wp_api_url('categories');
$urlTags = wp_api_url('tags');
switch ($i) {
case "categories":
$List = decode_api($urlCategories);
break;
case "users":
$List = decode_api($urlUser);
break;
case "tags":
$List = decode_api($urlTags);
break;
}
return $List;
}
function getList($filtro) {
$List = [];
$i = 1;
do {
$urlC = wp_api_url($filtro, ['page' => $i, 'per_page' => 100]);
$ListC = decode_api($urlC);
if (!empty($ListC)) {
$List = array_merge($List, $ListC);
$i++;
} else {
break;
}
} while (true);
return $List;
}
function getAllNews()
{ global $apiUrl;
$noticias = decode_api($apiUrl);
return $noticias;
}
// function getAll()
// { global $apiUrl;
// $urlUsers ="https://prensa.quillacollo.gob.bo/wp-json/wp/v2/users";
// $urlCategories ="https://prensa.quillacollo.gob.bo/wp-json/wp/v2/categories";
// $urlTags ="https://prensa.quillacollo.gob.bo/wp-json/wp/v2/tags";
// $noticias = decode_api($apiUrl);
// $userList = decode_api($urlUsers);
// $catList = decode_api($urlCategories);
// $tagList = decode_api($urlTags);
// $currentPage = LengthAwarePaginator::resolveCurrentPage();
// $perPage = 5; // Number of items per page
// $items = collect($noticias);
// $total = count($items);
// $noticias = new LengthAwarePaginator(
// $items->forPage($currentPage, $perPage),
// $total,
// $perPage,
// $currentPage
// );
// $noticias->setPath('news');
// return $noticias;
// }
function truncateDescription($description, $maxWords = 15, $maxChars = 100) {
// Truncate by words
$words = explode(' ', $description);
if (count($words) > $maxWords) {
$description = implode(' ', array_slice($words, 0, $maxWords)) . '...';
}
// Truncate by characters
if (strlen($description) > $maxChars) {
$description = substr($description, 0, $maxChars) . '...';
}
return $description;
}
?>