Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /*
- El presente script lee un archivo JSON previamente creado con un formato similar a este:
- [
- {
- "ref":"",
- "title":"",
- "year":"",
- "directed-by":"",
- "minutes":"",
- "filmaffinity":""
- },
- (...)
- ]
- El único campo IMPRESCINDIBLE para que se pueda ejecutar este script es "minutes".
- No obstante, los demás (y otros, ahí al gusto de cada uno) permiten hacer más rica
- la ficha de cada película. El campo "ref" (que debe ser único) fue creado con la
- intención de enlazar la imagen del cartel de cada película o una ficha con url propia
- para cada película.
- Para https://inakiquenerapu.com/365pelis:
- el JSON inicial fue este:
- https://inakiquenerapu.com/365pelis/laspelis.json
- el JSON resultante fue este:
- https://inakiquenerapu.com/365pelis/360pelis.json
- */
- $year = 2025;
- $jsonFileName = "laspelis.json";
- # Días festivos
- $spareDays = [
- "2025-01-01",
- "2025-01-06",
- "2025-04-17",
- "2025-04-18",
- "2025-05-01",
- "2025-05-17",
- "2025-05-29",
- "2025-07-25",
- "2025-08-15",
- "2025-08-16",
- "2025-11-01",
- "2025-12-06",
- "2025-12-08",
- "2025-12-25",
- ];
- $numberOfDays = ($year % 4 === 0 && $year % 100 !== 0) || $year % 400 === 0 ? 366 : 365;
- $firstDay = new DateTime("$year-01-01");
- $firstSaturday = 7 - $firstDay->format('N');
- $days = range(1,$numberOfDays);
- array_unshift($days,""); unset($days[0]); # Prefiero que este array comience en 1
- # Sábados y domingos son días en los
- # que puedo ver películas más largas
- for ($i = $firstSaturday; $i < count($days); $i += 7) :
- $weekends[$i] = $i;
- $weekends[$i+1] = $i+1;
- endfor;
- # Los días que indiqué como festivos son días en
- # los que también puedo ver películas más largas
- $spareDays = array_map(function($item) {
- return date("z", strtotime($item)) + 1;
- }, $spareDays);
- $spareDays = array_combine($spareDays,$spareDays);
- # $spareDays pasa a ser el array con los números
- # de los días en los que dispongo de más tiempo
- $spareDays = $weekends + $spareDays;
- $spareDaysNumber = count($spareDays);
- # Y $workingDays será el array con los números de los días
- # que no son $spareDays, es decir, días con menos tiempo
- foreach($days as $k=>$v) :
- if(!in_array($v,$spareDays)) : $workingDays[] = $v; endif;
- endforeach;
- $workingDaysNumber = count($workingDays);
- # Desordeno tanto los $spareDays como los $workingDays
- shuffle($spareDays);
- shuffle($workingDays);
- # Convierto el JSON con las 365 películas en el array
- # $theMovies y las ordeno de más largas a más cortas
- $jsonString = file_get_contents($jsonFileName);
- $theMovies = json_decode($jsonString, true);
- if (json_last_error() !== JSON_ERROR_NONE) :
- die("JSON decoding error: " . json_last_error_msg() . "\n");
- endif;
- array_multisort(array_column($theMovies, 'minutes'), SORT_DESC, $theMovies);
- # Divido $theMovies en dos mitades para poder
- # asignar las películas más largas ($longMovies) a $spareDays
- # y las menos largas ($notSoLongMovies) a $workingDays
- $longMovies = array_slice($theMovies, 0, $spareDaysNumber);
- $notSoLongMovies = array_slice($theMovies, $spareDaysNumber);
- # Añado dos nuevos elementos en cada ítem de cada array:
- # El día del año que le toca, la fecha (en formato legible por humanos)
- foreach($longMovies as $k=>$v):
- $longMovies[$k]["when"] = $spareDays[$k];
- $dateTime = DateTime::createFromFormat('Y z', "$year ".($spareDays[$k]-1)."");
- $longMovies[$k]["whenForHumans"] = ucfirst(IntlDateFormatter::formatObject($dateTime, "EEEE d 'de' MMMM", "es"));
- endforeach;
- foreach($notSoLongMovies as $k=>$v):
- $notSoLongMovies[$k]["when"] = $workingDays[$k];
- $dateTime = DateTime::createFromFormat('Y z', "$year ".($workingDays[$k]-1)."");
- $notSoLongMovies[$k]["whenForHumans"] = ucfirst(IntlDateFormatter::formatObject($dateTime, "EEEE d 'de' MMMM", "es"));
- endforeach;
- # Reseteamos el array $days para que ahora contenga todas las películas:
- # $longMovies y $notSoLongMovies y las ordenamos por día del año.
- # Ya que estamos, añadimos a cada item del array $days dos nuevos elementos:
- # Si la he visto ya y si he publicado una crítica (ambas con valor false)
- $days = array_merge($longMovies, $notSoLongMovies);
- array_multisort(array_column($days, 'when'), SORT_ASC, $days);
- foreach($days as $k=>$v):
- $days[$k]["seen"] = "false";
- $days[$k]["review"] = "false";
- endforeach;
- # Convertimos el array $days a JSON y lo presentamos en pantalla.
- # Listo para guardarlo como archivo .json con el nombre que queramos.
- echo "<pre>".json_encode($days, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | FILE_APPEND | LOCK_EX)."</pre>";
- ?>
Advertisement
Add Comment
Please, Sign In to add comment