bot_plus/utils_cli/bot_plus_cli_registre_json_cli.php

379 líneas
12 KiB
PHP
Original Vista normal Històric

2024-08-22 00:22:28 +02:00
<?php
$crrss = microtime(true);
if (!empty($_SERVER["argv"][1])){
$argument = $_SERVER["argv"][1];
if (!empty($_SERVER["argv"][2])){
$opcio = $_SERVER["argv"][2];
} else {
$opcio = null;
echo "Has de indicar la opció:\n".
" a -> afegir\n b -> esborrar tot\n d -> darrera publicació\n".
" e -> eliminar duplicats\n n -> triar un numero de registre\n".
" r -> repassar registres.\n";
exit;
}
} else {
// Presenta l'ajuda
echo "NO HE REBUT la variable\n";
echo "Cal el directori on s'executa el bot_plus.\n";
exit;
}
$lloc = $argument;
// ara pot carregar la configuració i el logger
include("".$lloc."/configuracio/bot_plus_cfg.php");
include("".$lloc."/utils/bot_plus_etiquetes.php");
include("".$lloc."/lib/exportrss.php");
if($opcio == "a") { goto afegir; }
elseif($opcio == "b") { goto buidar; }
elseif($opcio == "d") { goto darrera; }
elseif($opcio == "e") { goto duplicats; }
elseif($opcio == "n") { goto numregistre; }
elseif($opcio == "r") { goto repassar; }
else { echo "Has de indicar la opció:\n".
" a -> afegir\n".
" b -> esborrar tot\n".
" d -> darrera publicació\n".
" n -> triar un numero de registre(1)\n".
" r -> repassar registres.\n";
exit; }
afegir:
//echo $lloc;
$fitxer = $lloc."/fitxers/registre.json";
//echo $fitxer;
//matriu a partir del fitxer
$json_dec = json_decode(file_get_contents($fitxer), true);
//echo "matriu fitxer\n";
//print_r($json_dec);
//echo is_array($json_dec)."\n";
//sleep(2);
$reg_arx = count($json_dec);
echo "L'arxiu té ".$reg_arx." ".(($reg_arx<>1)?"registres":"registre")."\n";
// connecta amb la font RSS
// Nombre segons les fonts. (1,2 o 3 màxim definides a cfg primer)
//$llista = array();
$i = 0;
for ($f = 0; $f<$fitxers_nombre; $f++) {
if ($f == 0) { $fitxer = $fitxer0; }
if ($f == 1) { $fitxer = $fitxer1; }
if ($f == 2) { $fitxer = $fitxer2; }
if ($f == 3) { $fitxer = $fitxer3; }
// $json_dec = json_decode(file_get_contents($fitxer), true);
// Obtenim la font XML/RSS 2.0
$feed = new ExportRSS($fitxer , "2.0");
$channel = $feed->get_channel_data();
// variables per a fer la matriu del que arriba del fitxer XML/RSS 2.0
$j = 0;
$n = 0;
//print_r($feed);
//exit;
//matriu a partir del fitxer
//$json_dec = json_decode(file_get_contents($fitxer), true);
//$registre = shell_exec("wc -l fitxers/registre.json");
//if($registre > 1) { $reg_arx = count($json_dec); }
//else { $reg_arx = 0;
// $json_dec = array();
//}
foreach ($feed->get_data() as $item) {
$id = $i;
// $id = $reg_arx;
$titol = trim($item['title']);
$descripcio = trim($item['description']);
$enllac = $item['link'];
$pub = $item['date'];
$pub_str = strtotime($item['date']);
$guid = $item['guid']['isPermaLink'];
// $media_titol = $item['media:title'];
// $media_img = $item['media:content'];
$fontrss = $fitxer;
// prepare els filtres per generar la matriu
// filtre les URL que continguen estes paraules
if ( (str_contains($enllac, $p0)) ||
(str_contains($enllac, $p1)) ||
(str_contains($enllac, $p2)) ||
(str_contains($enllac, $p3)) ||
(str_contains($enllac, $p4)) ||
(str_contains($enllac, $p5)) ||
(str_contains($enllac, $p6)) ||
(str_contains($enllac, $p7)) ||
(str_contains($enllac, $p8)) ||
(str_contains($enllac, $p9)) ||
(str_contains($enllac, $p10)) ||
(str_contains($enllac, $p11)) ||
(str_contains($enllac, $p12)) ||
(str_contains($enllac, $p13)) ||
(str_contains($enllac, $p14)) ||
(str_contains($enllac, $p15)) ||
(str_contains($enllac, $p16)) ) {
if ( (strpos($enllac,$np0) == false)||
(strpos($enllac,$np1) == false ) ) {
$tria = 1;
$n++;
}
else { $tria = 0; }
} else { $tria = 0; }
$no_rep = in_array($pub_str, array_column($json_dec,"pub_str"));
//genere la matriu amb les dades filtrades
if ( ($tria == 1)&&($no_rep == false) ){
if( ((strtotime("now") - $pub_str) <= $antic_max) ) {
// echo $f."-".$id."-".$n."-".$enllac."-".$pub."-".$fontrss."\n";
$rsst_ara = $titol." ".$descripcio." ".$enllac;
$etiqueta = MstEtiquetes($rsst_ara);
$ara_str = strtotime('now');
$ara = date('d/m/Y H:i:s',$ara_str);
array_push($json_dec,
[
"titol" => (string)$titol,
"descripcio" => (string)$descripcio,
"enllac"=>(string)$enllac,
"etiqueta"=>(string)$etiqueta,
"pub"=>(string)$pub,
"pub_str"=>(int)$pub_str,
"publicada"=>(string)$ara,
// "media"=>(string)$media
// "media_tit"=>(string)$media_titol,
// "media_img"=>(string)$media_img
"font"=>$fontrss
]);
// }
usleep(240000);
$j++;
// print_r($json_dec);
$fes_json = json_encode($json_dec, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
$escriu_f_json = fopen($lloc."/fitxers/registre.json", "w") or die("No puc escriure al registre!");
fwrite($escriu_f_json, $fes_json);
fclose($escriu_f_json);
// unset($json_dec);
echo "Afegit registre ".$j." a registre.json.\n";
//filtre data màxima
}
}
$i++;
}
}
//print_r($json_dec);
exit;
buidar:
// buidar fitxer json
$buida_json = file_put_contents($lloc."/fitxers/registre.json", json_encode([]));
echo "He buidat el fitxer registre.json\n";
exit;
repassar:
//echo $lloc;
$fitxer = $lloc."/fitxers/registre.json";
//echo $fitxer;
//matriu a partir del fitxer
$json_decc = json_decode(file_get_contents($fitxer), true);
// per a fer els repas linia a linia
$maxim = count($json_decc);
$e = 0;
//$reg = 0;
//$ara = strtotime("today");
//$ara = strtotime(filemtime($fitxer));
$ara = (filemtime($fitxer));
//echo $ara."\n";
echo "REPASE ".(($maxim<>1)?"ELS ".$maxim." REGISTRES":"EL REGISTRE").".\n";
for($e=0;$e<$maxim;$e++) {
$titol = $json_decc[$e]['titol'];
$men_mi = $json_decc[$e]['descripcio'];
// $men_mi = preg_replace('/\\\\n/','',$men_mi);
$men_mi = str_replace("\n"," ",$men_mi);
$men_qi = $json_decc[$e]['enllac'];
$men_qa = $json_decc[$e]['pub'];
$men_tp = $json_decc[$e]['pub_str'];
$men_et = $json_decc[$e]['etiqueta'];
$men_fn = $json_decc[$e]['font'];
$men_qb = $json_decc[$e]['publicada'];
// $us_memoria = memory_get_usage();
// echo "nº".$e." -> ".$titol."\n".trim($men_mi)."\n".$men_qi."\n".$men_et."\t-> ".$men_qa." - ".$men_tp."\n".$men_qb."\n".$men_fn."\n\n";
echo "nº registre: ".($e+1)."\n\e[1m".$titol."\e[0;96m\n".trim($men_mi)."\e[0m\n\e[4mEnllaç:\e[0m ".$men_qi."\n\e[4mEtiquetes:\e[0m ".$men_et."\n".
"\e[4mData RSS:\e[0m ".$men_qa." - ".$men_tp."\n\e[4mData tut\e[0m: ".$men_qb." ".date("O",$ara)."\n\e[4mFont RSS:\e[0m ".$men_fn."\n\n";
// echo "memoria: ".$us_memoria."\n";
// pausa d'un segon
//sleep(1);
//pausa de mig segon (amb microsegons => unitat més sis ceros == segons );
//usleep(200000);
// $reg++;
}
//unset($json_decc);
exit;
// darrera noticia publicada
darrera:
$fitxer = $lloc."/fitxers/registre.json";
//echo $fitxer;
//matriu a partir del fitxer
$json_decc = json_decode(file_get_contents($fitxer), true);
//print_r($json_dec);
//exit;
// per a fer els repas linia a linia
$maxim = count($json_decc);
$e = $maxim-1;
$reg = 0;
//$ara = strtotime("today");
//$ara = strtotime(filemtime($fitxer));
//$ara = (filemtime($fitxer));
$ara = strtotime("now");
//echo date("O",$ara)."\n";
$ndp = 4;
echo "Las darreres ".$ndp." publicacions han sigut:\n\n";
for($e=($maxim-$ndp);$e<$maxim;$e++) {
$titol = $json_decc[$e]['titol'];
$men_mi = $json_decc[$e]['descripcio'];
$men_qi = $json_decc[$e]['enllac'];
$men_qa = $json_decc[$e]['pub'];
$men_tp = $json_decc[$e]['pub_str'];
$men_et = $json_decc[$e]['etiqueta'];
$men_fn = $json_decc[$e]['font'];
$men_qb = $json_decc[$e]['publicada'];
// $men_qs = strtotime($json_dec[$e]['publicada']);
// echo "nº registre: ".$e."\n\e[1m".$titol."\e[0;96m\n".trim($men_mi)."\e[0m\n\e[4mEnllaç:\e[0m ".$men_qi."\n\e[4mEtiquetes:\e[0m ".$men_et."\n".
// "\e[4mData RSS:\e[0m ".$men_qa." - ".$men_tp."\n\e[4mData tut\e[0m: ".$men_qb."\n\e[4mFont RSS:\e[0m ".$men_fn."\n\n";
echo ($e+1)." - \e[1m".$titol."\e[0;96m\n".trim($men_mi)."\e[0m\n\e[4mEnllaç:\e[0m ".$men_qi."\n\e[4mEtiquetes:\e[0m ".$men_et."\n".
"\e[4mData RSS:\e[0m ".$men_qa." - ".$men_tp."\n\e[4mData tut\e[0m: ".$men_qb." ".date("O",$ara)."\n\e[4mFont RSS:\e[0m ".$men_fn."\n\n";
// pausa d'un segon
//sleep(1);
//pausa de mig segon (amb microsegons => unitat més sis ceros == segons );
//usleep(200000);
$reg++;
}
//unset($json_decc);
goto retallar;
numregistre:
$fitxer = $lloc."/fitxers/registre.json";
//echo $fitxer;
//matriu a partir del fitxer
$json_dec = json_decode(file_get_contents($fitxer), true);
//print_r($json_dec);
//exit;
// per a fer els repas linia a linia
$maxim = count($json_dec);
// preguntar si vols volcar-ho al fitxer .txt
echo "\nEscriu el nombre del registre a revisar entre 0 i ".$maxim."\n";
//return "\nEscriu el nombre del registre a revisar: \n";
$handle = fopen ("php://stdin","r");
$line = fgets($handle);
if( !is_numeric(trim($line)) ) {
echo "HA DE SER UN NUMERO!\n";
// return "HE ACABAT DONCS!\n";
goto numregistre;
} else {
if (trim($line)> $maxim) {
echo "Supera el nombre de registres.\n";
goto numregistre;
} else { goto numregistrev; }
}
fclose($handle);
numregistrev:
echo "\n";
echo "Este és el registre ".trim($line)."\n\n";
$e = trim($line);
$reg = 0;
//$ara = strtotime("today");
//$ara = strtotime(filemtime($fitxer));
$ara = (filemtime($fitxer));
//echo $ara."\n";
//echo "La darrera publicació ha sigut:\n\n";
//for($e=0;$e<$maxim;$e++) {
$titol = $json_dec[$e]['titol'];
$men_mi = $json_dec[$e]['descripcio'];
$men_qi = $json_dec[$e]['enllac'];
$men_qa = $json_dec[$e]['pub'];
$men_tp = $json_dec[$e]['pub_str'];
$men_et = $json_dec[$e]['etiqueta'];
$men_fn = $json_dec[$e]['font'];
$men_qb = $json_dec[$e]['publicada'];
echo "nº registre: ".($e+1)."\n\e[1m".$titol."\e[0;96m\n".trim($men_mi)."\e[0m\n\e[4mEnllaç:\e[0m ".$men_qi."\n\e[4mEtiquetes:\e[0m ".$men_et."\n".
"\e[4mData RSS:\e[0m ".$men_qa." - ".$men_tp."\n\e[4mData tut\e[0m: ".$men_qb."\n\e[4mFont RSS:\e[0m ".$men_fn."\n\n";
// pausa d'un segon
//sleep(1);
//pausa de mig segon (amb microsegons => unitat més sis ceros == segons );
//usleep(200000);
$reg++;
//}
//goto retallar;
duplicats:
$fitxer = $lloc."/fitxers/registre.json";
//echo $fitxer;
//matriu a partir del fitxer
$json_dec = json_decode(file_get_contents($fitxer), true);
$maxim = count($json_dec);
$ids = array_column($json_dec, 'enllac');
$ids = array_unique($ids);
$mat_nova = array_filter($json_dec, function ($clau, $valor) use ($ids) {
return in_array($valor, array_keys($ids));
}, ARRAY_FILTER_USE_BOTH);
print_r($mat_nova);
goto retallar;
retallar:
$fitxer = $lloc."/fitxers/registre.json";
$json_dec = json_decode(file_get_contents($fitxer), true);
// limitar a 480 registres (fer variable?)
if($maxim > ($max_linies+$max_linies_ad)) {
$json_dec = array_splice($json_dec,($maxim-($max_linies+$max_linies_ad)),$maxim);
//print_r($json_dec);
// actualitza el fitxer json
//$fes_json = json_encode($json_dec, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_OBJECT_AS_ARRAY|JSON_PRETTY_PRINT);
$fes_json = json_encode($json_dec, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
$escriu_f_json = fopen($lloc."/fitxers/registre.json", "w") or die("No puc escriure al registre!");
fwrite($escriu_f_json, $fes_json);
fclose($escriu_f_json);
}
$crmnf = microtime(true);
$tmf = $crmnf - $crrss;
echo "Temps registres: ".round($tmf,4)."\n";
//$log->lwrite("Temps mencions: ".round($tmf,4)."");
?>