bot_plus/bot_plus.php
2024-08-21 20:46:53 +02:00

680 lines
29 KiB
PHP

#!/usr/bin/php
<?php
// autor @bonobo@mastodont.cat
// A partir de :
// https://www.daniweb.com/programming/web-development/code/216997/export-rss-1-0-or-2-0-feeds-to-an-array
// Inici el document
$temps = microtime(true);
//defineix on es troba el fitxer a executar
$lloc = realpath(dirname(__FILE__));
// inclou fitxers de configiració
include("configuracio/bot_plus_cfg.php");
include("lib/exportrss.php");
include("utils/bot_plus_funcions.php");
require_once("utils/bot_plus_etiquetes.php");
require_once("lib/logger.php");
// inicia el log
$log = new Logging();
$log->lfile("".$log_fitxer."");
if ( ($log_detall == "DETALLAT") || ($log_detall == "COMPLET") ) {
$log -> lwrite ("INICIE ".$bot_nom." ".$bot_versio."");
$log -> lwrite ("Entre a ".$lloc." per a iniciar el procés.");
} else { $log -> lwrite ("INICIE ".$bot_nom." ".$bot_versio."");
if($mem_on == 1) { $log -> lwrite ( mostra_us_memoria()." ".mostra_pic_memoria() ); }
}
// guarda la opció de visib_tut a un fitxer
// Escriu la opció de visib_tut al fitxer (cal per reiniciar les opcions de visib_tut de les publicacions)
$vis_escr = fopen($lloc . "/fitxers/compte_vis.txt", "w") or die("No puc obrir el contador!");
if ($log_detall == "DETALLAT") { $log -> lwrite ($lloc . "/fitxers/compte_vis.txt "); }
fwrite($vis_escr, $visib_tut);
fclose($vis_escr);
// bucle de microsites
$pt = 0;
$pr = 0;
$f = 0;
// Nombre segons les fonts. (1,2 o 3 màxim definides a cfg primer)
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; }
// 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
$i = 0;
$j = 0;
$n = 0;
$llista = array();
foreach ($feed->get_data() as $item) {
$id = $i;
$titol = $item['title'];
$data = $item['date'];
$descripcio = $item['description'];
$enllac = $item['link'];
// 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; }
//genere la matriu amb les dades filtrades
if ($tria == 1) {
$llista[] = array(
"id"=>$id,
"num"=>$n,
"titol"=>(string) $item["title"],
"descripcio"=>(string) $item["description"],
"enllac"=>(string) $item["link"],
"pub"=>(string) $item["date"]
);
$j++;
}
$i++;
}
// cronometre
$temps1 = microtime(true);
if ( ($log_detall == "DETALLAT") || ($log_detall == "COMPLET") ) {
$log -> lwrite ("Generada la matriu de RSS".$f."");
$duradaa = $temps1 - $temps;
if($duradaa < 60) { $duradaa = round($duradaa,4); $nomt = "segons"; }
else { $duradaa = date("i:s",$duradaa); $nomt = "minuts"; }
$log -> lwrite("Temps matriu: ".$duradaa." ".$nomt."");
}
if ($log_detall == "COMPLET") {
$log -> lwrite ("La matriu RSS".$f." conté ".$j." registres.");
} else {
if ( ($log_detall == "COMPLET") || ($log_detall == "DETALLAT") ) {
$log -> lwrite ("Generada la matriu de RSS".$f."");
}
}
if (count($llista) === 0) {
$log->lwrite("ERRADA: no he pugut generar la matriu de la font RSS".$f.". Bote a les funcions activades. - ".__LINE__);
$log -> lwrite ( mostra_us_memoria()." ".mostra_pic_memoria()." - ".__LINE__ );
$errada_tecnica = shell_exec("/usr/bin/php -f ".$lloc."/utils/bot_plus_erradatecnica.php ".$lloc."");
// enviaCorreu($elmeucompte,"| ".$bot_nom." v".$bot_versio." |",$msg,$elremitent);
if ($pt == 0) { goto benvinguda; } else { goto retallar; }
}
// a voltes (?!) el fitxer registre queda buit o perd línies. Ignore el motiu. (Manca de memòria?)
// per evitar-ho verifique el tamany i si és 0 o menor de max_linies inclou les darreres de la matriu llevat de la primera
$reg_tam = filesize("".$lloc."/fitxers/dates.txt");
$reg_lin = count(file("".$lloc."/fitxers/dates.txt"));
$reg_lin_bak = count(file("".$lloc."/fitxers/dates.bak"));
//if ( ($reg_tam == 0) || ($reg_lin < ($max_linies-$max_linies_ad)) || ($reg_lin < ($reg_lin_bak)) ) {
if ( ($reg_tam == 0) || ($reg_lin < ($reg_lin_bak)) ) {
$log -> lwrite ("ALERTA! El fitxer de dates te ".$reg_lin." | ".$reg_lin_bak." linies. Cal posar dates abans de la comparació. - ".__LINE__);
if ( $reg_lin < $max_linies ) {
// guarda les dates de les publicació de la matriu en el dates.txt
// utilitze $j que és el comptador de les dades de la matriu ja filtrada si no fa registres buits
for( $c = 1; $c<$j ; $c++ ) {
$escriu_magatzem = fopen($lloc . "/fitxers/dates.txt", "a") or die("No puc escriure al registre!");
fwrite($escriu_magatzem, strtotime($llista[$c]['pub'])." ".$llista[$c]['pub']."\n");
fclose($escriu_magatzem);
}
// recuperar la còpia de seguretat
$copia_seguretat_rec = shell_exec("cat ".$lloc."/fitxers/dates.bak >> ".$lloc."/fitxers/dates.txt");
}
} else {
if ( ($log_detall == "DETALLAT") || ($log_detall == "COMPLET") ) {
$log -> lwrite ("El fitxer de registre té tamany de ".$reg_tam." bytes.");
}
}
$url_lin = count(file("".$lloc."/fitxers/urls_pub.txt"));
$url_tam = filesize("".$lloc."/fitxers/urls_pub.txt");
$url_lin_b = count(file("".$lloc."/fitxers/urls_pub.bak"));
$url_tam_b = filesize("".$lloc."/fitxers/urls_pub.bak");
if ( ($url_tam == 0) || ($url_lin < $url_lin_b) ) {
//if ( $url_lin < ($max_linies+$max_linies_ad) ) {
$log -> lwrite ("ALERTA! El fitxer de url te ".$url_lin." | ".$url_lin_b." linies. Cal posar-ne més. - ".__LINE__);
$eix_urlsr = array();
$urlsr = exec("php -f ".$lloc."/utils_cli/bot_plus_urls_json_cli_refer.php ".$lloc, $eix_urlsr, $resp_urlsr);
if ( $urlsr != 0 ){
$log -> lwrite("INFO: recuperar url: ".(($resp_urlsr == 0)?"correcte":"ERRADA")." - ".__LINE__);
}
if ( ($log_detall == "DETALLAT") || ($log_detall == "COMPLET") ) {
$url_tam = filesize("".$lloc."/fitxers/urls_pub.txt");
$log -> lwrite ("El fitxer de urls té un tamany de ".$url_tam." bytes.");
}
// final recuperar
}
// generar cadena comprovar amb les dates recuperades
$comprovar = exec("cat ".$lloc."/fitxers/dates.txt",$eixida_comprovar,$resposta_comprovar);
$comprovar = implode(" ",$eixida_comprovar);
$url_hist = shell_exec("cat ".$lloc."/fitxers/urls_pub.txt");
$url_hist = preg_replace('/[^A-Za-z0-9\-]/','',$url_hist);
$url_hist = preg_replace('/https/',' ',$url_hist);
// cadena per trobar la data de les darreres publicades
// si troba la cadena amb strpos NO publica, si no la troba, PUBLICA
$c = 0;
$k = 0;
$n = $j-1;
$p = 0;
$w = 0;
$verifica = 0;
for( $c = 0; $c<$n ; $c++ ) {
// variables (en proves)
$publicat = $llista[$c]['pub'];
$publicat_str = strtotime($llista[$c]['pub']);
$titol = trim($llista[$c]['titol']);
$descripcio = trim($llista[$c]['descripcio']);
$enllac = $llista[$c]['enllac'];
// cadena numerica de temps per comparar
$rss_ara = strtotime($llista[$c]['pub']);
$rssu_ara = trim($llista[$c]['enllac']);
$rssu_ara = preg_replace('/[^A-Za-z0-9\-]/','',$rssu_ara);
$rssu_ara = preg_replace('/https/',' ',$rssu_ara);
// $rsst_ara = trim($llista[$c]['titol'])." ".trim($llista[$c]['descripcio'])." ".$llista[$c]['enllac']." ";
// $descripcio = preg_replace("/\\\\n/","'", $descripcio);
$descripcio = str_replace("\n"," ", $descripcio);
$rsst_ara = $titol." ".$descripcio." ".$enllac." ";
if ( ($log_detall == "COMPLET") || ($log_detall == "DETALLAT") ) {
$log -> lwrite ("Contingut de rss_ara: ".$rss_ara);
}
$verifica = strpos($comprovar,$rss_ara);
$mira_url = strpos($url_hist,$rssu_ara);
if ( ($log_detall == "COMPLET") ) {
$log -> lwrite ("Contingut de verifica num: ".$c." - ".$verifica);
$log -> lwrite ("Contingut de mira_url num: ".$c."|".$rssu_ara."|".$mira_url);
}
// incloure aqui filtre d'un mes per publicar (ara on està fa falsos positius(?)
if (($verifica !== false) || ($mira_url !== false)) {
if ( ($log_detall == "COMPLET") || ($log_detall == "DETALLAT") ) {
$log -> lwrite ("No publica num: ".$c." ".$llista[$c]['titol']);
}
if($act_etiquetes == 1) {
if ( ($log_detall == "COMPLET") || ($log_detall == "DETALLAT") ) {
$log -> lwrite("Etiqueta triada: ".MstEtiquetes($rsst_ara)." ");
}
}
} else {
$log -> lwrite ("PUBLICA (rss".$f.") num: ".$c." ".$llista[$c]['titol']);
// variables a utilitzar
$titol = trim($llista[$c]['titol']);
$descripcio = trim($llista[$c]['descripcio']);
$descripcio = str_replace("\n"," ",$descripcio);
$enllac = trim($llista[$c]['enllac']);
$pub = $llista[$c]['pub'];
$pub_str = $rss_ara;
$etiqueta = MstEtiquetes($rsst_ara);
$etiqueta_pub = substr($etiqueta,0,-4);
$fontrss = $fitxer;
//guarda la data de la publicació en el dates.txt
$escriu_magatzem = fopen($lloc . "/fitxers/dates.txt", "a") or die("No puc escriure la data!");
// fwrite($escriu_magatzem, $rss_ara." ". $llista[$c]['pub']."\n");
fwrite($escriu_magatzem, $rss_ara." ". $pub."\n");
fclose($escriu_magatzem);
usleep(100000);
$fp_oratge = preg_replace('/[^A-Za-z0-9\-]/','',$enllac);
$fp_oratge = preg_replace('/https/',' ',$fp_oratge);
$filt_oratge = strpos($fp_oratge,"previsioprevisio");
if($filt_oratge == false) {
//guarda la URL de la publicació en el urls_pub.txt
$escriu_url = fopen($lloc . "/fitxers/urls_pub.txt", "a") or die("No puc escriure la url!");
// fwrite($escriu_url, $llista[$c]['enllac']."\n");
fwrite($escriu_url, $enllac."\n");
fclose($escriu_url);
usleep(10000);
} else {
// $log -> lwrite ("filt_oratge: ".$filt_oratge." línia 288");
}
// $filtre_pilota = strpos($rssu_ara,"pilota");
// if( ((strtotime("now") - $rss_ara) <= $antic_max) && ($filtre_pilota !== false) ) {
if( ((strtotime("now") - $rss_ara) <= $antic_max) ) {
// Obre el fitxer del compte per trobar el nombre guardat i generar new_count (si no fa error)
$compt_lle = fopen($lloc . "/fitxers/compte_pub.txt", "r") or die("No puc obrir el contador!");
$compt_dar = fread($compt_lle,filesize($lloc . "/fitxers/compte_pub.txt"));
if ( ($log_detall == "COMPLET") || ($log_detall == "DETALLAT") ) {
$log -> lwrite ("Últim registre: " . $compt_dar . " (5)");
}
fclose($compt_lle);
$compt_nou = $compt_dar;
// genera la publicació (activació d'etiquetes o no)
if ($act_etiquetes == 1) {
// $publicacio = trim($llista[$c]['titol'])."\n".trim($llista[$c]['descripcio'])."\n".MstEtiquetes($rsst_ara)."\n".$llista[$c]['enllac']."";
$publicacio = $titol."\n".$descripcio."\n".$etiqueta_pub."\n".$enllac."";
$log -> lwrite("Etiqueta triada: ".MstEtiquetes($rsst_ara)."");
} else {
$publicacio = $titol."\n".$descripcio."\n".$enllac."";
$log -> lwrite("Etiqueta proposada: ".MstEtiquetes($rsst_ara)."");
}
// Defineix la visib_tut segons el contador
$count_factor = $compt_nou/$public_freq;
if ( ($log_detall == "DETALLAT") ) {
$log -> lwrite ("count_factor: " .$count_factor. " (8)");
$log -> lwrite ("resultat filtre: ".is_int($count_factor)." (9)");
}
// reinicia la opció de visib_tut des del fitxer de txt
$vis_ll = fopen($lloc . "/fitxers/compte_vis.txt", "r") or die("No puc obrir el contador!");
$vis_lect = fread($vis_ll,filesize($lloc . "/fitxers/compte_vis.txt"));
if ( ($log_detall == "COMPLET") || ($log_detall == "DETALLAT") ) {
$log -> lwrite ("Visibilitat des del fitxer: " . $vis_lect . " (10)");
}
fclose($vis_ll);
// recupera segons la configuració
$visib_tut = $vis_lect;
if ( ($log_detall == "COMPLET") || ($log_detall == "DETALLAT") ) {
$log -> lwrite("Variable visib_tut cfg: ".$visib_tut."");
}
if(is_int($count_factor)){
if ( ($log_detall == "COMPLET") || ($log_detall == "DETALLAT") ) {
$log -> lwrite ("Visibilitat: " .$visib_tut . " (11)");
}
}else{
$visib_tut="unlisted";
if ( ($log_detall == "COMPLET") || ($log_detall == "DETALLAT") ) {
$log -> lwrite ("Visibilitat: " .$visib_tut . " (12)");
}
}
//registre json (EN PROVES)
$fitxer_json = $lloc."/fitxers/registre.json";
//matriu a partir del fitxer
$json_dec = json_decode(file_get_contents($fitxer_json), true);
$no_rep = in_array($pub_str, array_column($json_dec,"pub_str"));
$no_url = in_array($pub_str, array_column($json_dec,"enllac"));
$ara = strtotime("now");
$ara_reg = date('d/m/Y H:i:s',$ara);
if(($no_rep == false)||($no_url == false)) {
$etiqueta = MstEtiquetes($rsst_ara);
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_reg,
// "media"=>(string)$media
// "media_tit"=>(string)$media_titol,
// "media_img"=>(string)$media_img
"font"=>$fontrss
]);
$k++;
// 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);
if($mem_net == 1) { $json_dec = null; $fes_json = null; unset($json_dec, $fes_json); }
// Publica a Mastodon
$dades_tut = array(
"status" => $publicacio,
"language" => $llengua,
"visibility" => $visib_tut
);
PublicaMissatge($base_url,$headers,$dades_tut);
if($control_memoria == 1) { $log -> lwrite ( "Publicació: ".mostra_us_memoria()." ".mostra_pic_memoria()." - ".__LINE__ ); }
} else { $log->lwrite("INFO: Ja ha estat registrada."); }
// Calcula i escriu el nou nombre al fitxer
$compt_nou++;
$compt_esc = fopen($lloc . "/fitxers/compte_pub.txt", "w") or die("No puc obrir el contador!");
if ( ($log_detall == "DETALLAT") ) {
$log -> lwrite ($lloc . "/fitxers/compte_pub.txt");
}
fwrite($compt_esc, $compt_nou);
fclose($compt_esc);
$p++;
$pt++;
sleep($espera_tut+30);
// final if temps màxim
}
else { $log -> lwrite ("NO publique per tindre data superior al límit."); usleep(100000); $pr++; }
if($control_memoria == 1) { $log -> lwrite ( "NO publique: ".mostra_us_memoria()." ".mostra_pic_memoria()." - ".__LINE__ ); }
$w++;
}
// dronometre
$temps_pub = microtime(true);
$durad_pub = $temps_pub - $temps;
if($durad_pub >= $temp_max_pub ) { goto acabar; }
//final publicació (else)
}
// cronometre
$temps2 = microtime(true);
$duradab = $temps2 - $temps1;
if ($p >= 1) {
// escriu la data de la darrera publicació
$data_tam = filesize($lloc."/fitxers/data_pub.txt");
$data_esc = fopen($lloc . "/fitxers/data_pub.txt", "w+") or die("No puc obrir el contador!");
$data_ant = fread($data_esc,filesize("".$lloc ."/fitxers/data_pub.txt"));
// $data_nova = strtotime("now");
$data_nova = $ara;
fwrite($data_esc, $data_nova);
fclose($data_esc);
$log -> lwrite("data_pub actualitzada: ".$data_nova );
// $log -> lwrite("data_pub actualitzada: ".$data_nova." | ".date("d-m-Y H:i:s",$data_nova) );
// per tallar l'execució si dura més de 10 minuts i evita solapar execucions
if ($duradab > $temp_max_pub) { goto acabar; }
if($duradab < 60) { $duradab = round($duradab,4); $nomt = "segons"; }
else { $duradab = date("i:s",$duradab); $nomt = "minuts"; }
$log->lwrite("He publicat ".$p." ".(($p<>1)?"novetats":"novetat")." (rss".$f.") en ".$duradab." ".$nomt."." );
if( ($control_memoria == 0)&&($mem_net == 0) ) { $log -> lwrite ( "rss".$f." - ".mostra_us_memoria()." ".mostra_pic_memoria()." - ".__LINE__ ); }
if ( ($log_detall == "COMPLET") || ($log_detall == "DETALLAT") ) {
// $log -> lwrite("Temps publicació: ".$duradab." ".($duradab < 60)? "segons.":"minuts.")."" );
$log -> lwrite("Temps publicació: ".$duradab." ".$nomt."." );
}
} else {
// echo "NO he publicat res (rss".$f .").\n";
if ( ($log_detall == "COMPLET") || ($log_detall == "DETALLAT") ) {
$log -> lwrite ("NO he publicat res (rss".$f.").");
}
}
// final for multimicrosite
}
retallar:
if($pt == 0) {
// dronometre en cas de no publicar
$temps2 = microtime(true);
$duradab = $temps2 - $temps;
if($duradab < 60) { $duradab = round($duradab,4); $nomt = "segons"; }
else { $duradab = date("i:s",$duradab); $nomt = "minuts"; }
$log->lwrite("Temps de ".$f." RSS : ".$duradab."" );
if( ($control_memoria == 0)&&($mem_net == 0) ) { $log -> lwrite ( "Després rss: ".mostra_us_memoria()." ".mostra_pic_memoria()." - ".__LINE__ );
} else {
$llista = null; $duradaa = null; $duradab = null; $comprovar = null; $dades_tut = null; unset($llista, $comprovar, $dades_tut);
$log -> lwrite ( "Després rss amb neteja ".mostra_us_memoria()." ".mostra_pic_memoria()." - ".__LINE__ );
}
//goto benvinguda;
}
//if($pt>=1) {
//retalle a un màxim de $max_linies
$registre = "".$lloc."/fitxers/dates.txt";
$registre_b = "".$lloc."/fitxers/dates.bak";
$urls_reg = "".$lloc."/fitxers/urls_pub.txt";
$urls_reg_b = "".$lloc."/fitxers/urls_pub.bak";
$linies = count(file($registre));
$linies_b = count(file($registre_b));
$url_lin = count(file($urls_reg));
$url_tam = filesize($urls_reg);
$url_lin_b = count(file($urls_reg_b));
$url_tam_b = filesize($urls_reg_b);
$fitxerreg = $lloc."/fitxers/registre.json";
$json_dec = json_decode(file_get_contents($fitxerreg), true);
$maxim = count($json_dec);
// if ( ($linies > $max_linies) || ($url_lin > ($max_linies+$max_linies_ad)) || ($url_lin > $url_lin_b) || ($maxim > ($max_linies+$max_linies_ad)) && ($pt >= 1) ){
if ( ($linies > $max_linies) || ($url_lin > ($max_linies+$max_linies_ad)) || ($url_lin > $url_lin_b) || ($maxim > ($max_linies+$max_linies_ad)) ){
// retalle el fitxer de registre
// per a que siguen les primeres cal canviar tail per head
if ( ($linies > $max_linies) ){
if ( ($log_detall == "COMPLET") || ($log_detall == "DETALLAT") ) {
$log -> lwrite ("Retalle el fitxer de dates.");
if ( ($log_detall == "COMPLET") ) {
$log -> lwrite ("El fitxer de dates té ".$linies." línies, el retalle i deixe les ".$max_linies." darreres dates.");
}
}
// retalla dates
$fitx = new SplFileObject($lloc."/fitxers/dates.txt", "r");
$fitx->seek(PHP_INT_MAX);
$last_line = $fitx->key();
$lines = new LimitIterator($fitx, $last_line - $max_linies, $last_line); //n being non-zero positive integer $max_linies
// print_r(iterator_to_array($lines));
// Iterate each element
$it = iterator_to_array($lines);
$escriu_magatzem = fopen($lloc . "/fitxers/dates.txt", "w") or die("No puc escriure la data!");
foreach($it as $ele){
// echo nl2br($ele . "\n");
fwrite($escriu_magatzem, $ele);
// usleep(100000);
}
fclose($escriu_magatzem);
// còpia de seguretat dates
// $log->lwrite("".$url_lin.":".$url_lin_b."");
if ($linies >= $linies_b) {
// $copia_seguretat_dat = shell_exec("sort ".$lloc."/fitxers/dates.txt > ".$lloc."/fitxers/dates.bak");
$copia_seguretat_dat = exec("cat ".$lloc."/fitxers/dates.txt > ".$lloc."/fitxers/dates.bak", $eixida_cs, $resposta_cs);
// if (($copia_seguretat_dat ==null) || ($copia_seguretat_dat ==false)) {
if ($resposta_cs != 0) {
$log -> lwrite("INFO: copia_seguretat_dat: ".( (($resposta_cs == 0))?"correcte":"ERRADA")." - ".__LINE__);
}
}
if ($mem_net == 1) { $url_lin = null; $url_lin_b = null; $urls_reg = null; $urls_reg_b = null; $eixida_cs =null; unset($url_lin, $url_lin_b, $urls_reg, $urls_reg_b, $eixida_cs); }
//final neteja i copia seguretat dates
}
if ( ($url_lin > ($max_linies+$max_linies_ad)) || ($maxim > ($max_linies+$max_linies_ad)) || ($url_tam > $url_tam_b) ){
// retalla urls
$max_lin_url = $max_linies + $max_linies_ad;
// $log -> lwrite ("max_lin_url: ".$max_lin_url );
$fitx = new SplFileObject($lloc."/fitxers/urls_pub.txt", "r");
$fitx->seek(PHP_INT_MAX);
$last_line = $fitx->key();
if(($last_line - $max_lin_url) >=1) {
$lines = new LimitIterator($fitx, $last_line - $max_lin_url, $last_line); //n being non-zero positive integer
// print_r(iterator_to_array($lines));
// Iterate each element
$it = iterator_to_array($lines);
$escriu_magatzem = fopen($lloc . "/fitxers/urls_pub.txt", "w") or die("No puc escriure la data!");
foreach($it as $ele){
// echo nl2br($ele . "\n");
fwrite($escriu_magatzem, $ele);
// usleep(100000);
}
fclose($escriu_magatzem);
}
/* $eixida_nu = array();
$net_url = exec("tail -".($max_linies + $max_linies_ad)." ".$lloc."/fitxers/urls_pub.txt | tee ".$lloc."/fitxers/urls_pub.txt", $eixida_nu, $resposta_nu);
// $net_url = shell_exec("tail -".($max_linies + $max_linies_ad)." ".$lloc."/fitxers/urls_pub.txt | tee ".$lloc."/fitxers/urls_pub.txt");
// $log -> lwrite("resposta_nu: ".$resposta_nu);
if ( $resposta_nu != 0 ){
$log -> lwrite("INFO: net_url: ".(($resposta_nu == 0)?"correcte":"ERRADA")." - ".__LINE__);
$log -> lwrite (print_r($eixida_nu));
if($act_correu == 1) {
$msg = "INFO: net_url: ".(($resposta_nu == 0)?"correcte":"ERRADA")." - ".__LINE__;
enviaCorreu($elmeucompte,"| ".$bot_nom." v".$bot_versio." |",$msg,$elremitent);
}
}
*/
//fer còpia de seguretat urls
// $log -> lwrite( $url_lin." : ".$url_lin );
if ($url_lin >= $url_lin_b) {
$eixida_csu = array();
$copia_seguretat_url = exec("cat ".$lloc."/fitxers/urls_pub.txt > ".$lloc."/fitxers/urls_pub.bak", $eixida_csu, $resposta_csu);
// $log -> lwrite("resposta_csu: ".$resposta_csu);
if ($resposta_csu != 0) {
$log -> lwrite("INFO: copia_seguretat_url: ".(($resposta_csu == 0)?"correcte":"ERRADA")." - ".__LINE__);
$log -> lwrite (print_r($eixida_csu));
}
}
if($mem_net == 1) { $urls_lin = null; $urls_lin_b = null; $urls_reg = null; $urls_reg_b = null; $eixida_csu= null; unset($urls_lin, $urls_lin_b, $urls_reg, $urls_reg_b, $eixida_csu); }
if( $maxim > ($max_linies+$max_linies_ad) ) {
// retallar fitxer registre json
$json_dec = array_splice($json_dec,($maxim-($max_linies+$max_linies_ad)),$maxim);
$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, $linies, $url_lin);
if($mem_net == 1) { $json_dec = null; $linies = null; $url_lin = null; unset($json_dec,$linie,$url_lin); }
// final neteja urls i copia seguretat
}
// }
//final
} else {
echo "El fitxers de dates i urls OK.\n";
// $log -> lwrite ("Els fitxer de dates ".$cop_seg_dat." i el de urls ".$cop_seg_url.".");
}
// cronometre
$temps3 = microtime(true);
if ( ($log_detall == "COMPLET") || ($log_detall == "DETALLAT") ) {
$duradad = $temps3 - $temps2;
$log -> lwrite("Temps retall registre: ".round($duradad,4)." segons.");
}
// per donar la benvinguda als nous seguidors
benvinguda:
if ($act_bencom == 1) {
// $log -> lwrite("Arranque benvinguda.");
// $gracies = shell_exec("/usr/bin/php -f ".$lloc."/utils/bot_plus_benvinguda.php ".$lloc."");
$gracies = exec("/usr/bin/php -f ".$lloc."/utils/bot_plus_benvinguda.php ".$lloc."", $eixida_gr, $resposta_gr);
// per verificar que exec funciona correctament
if ($resposta_gr != 0) {
$log -> lwrite("INFO: benvinguda: ".(($resposta_gr == 0)?"correcte":"ERRADA")." - ".__LINE__);
if($act_correu == 1) {
$msg = "INFO: benvinguda: ".(($resposta_gr == 0)?"correcte":"ERRADA")."";
enviaCorreu($elmeucompte,"| ".$bot_nom." v".$bot_versio." |",$msg,$elremitent);
}
}
if($mem_net == 1) { $gracies = null; $msg = null; $temps3 = null; $duradad = null; unset($gracies); $log -> lwrite ( "amb neteja ".mostra_us_memoria()." ".mostra_pic_memoria()." - ".__LINE__ ); }
else { if($control_memoria == 1) { $log -> lwrite ( mostra_us_memoria()." ".mostra_pic_memoria()." - ".__LINE__ ); } }
}
$temps4 = microtime(true);
if ( ($log_detall == "COMPLET") || ($log_detall == "DETALLAT") ) {
$duradae = $temps4 - $temps3;
if ($duradae < 60) { $duradae = round($duradae,4); $nomt = "segons"; }
else { $duradae = date("i:s",$duradae); $nomt = "minuts"; }
$log -> lwrite("Temps benvinguda: ".$duradae." ".$nomt."");
}
// contestar a les mencions
if ($act_mencio == 1) {
// $resp_mencio = shell_exec("/usr/bin/php -f ".$lloc."/utils/bot_plus_mencions.php ".$lloc);
$resp_mencio = exec("/usr/bin/php -f ".$lloc."/utils/bot_plus_mencions.php ".$lloc."", $eixida_menc, $resposta_menc);
// per verificar que exec ha funcionat
if ($resposta_menc !=0) {
$log -> lwrite("INFO: mencions: ".(($resposta_menc == 0)?"correcte":"ERRADA")." - ".__LINE__);
if($act_correu == 1) {
$msg = "INFO: mencions: ".(($resposta_menc == 0)?"correcte":"ERRADA")." - ".__LINE__;
enviaCorreu($elmeucompte,"| ".$bot_nom." v".$bot_versio." |",$msg,$elremitent);
}
}
if($control_memoria == 1) { $log -> lwrite ( mostra_us_memoria()." ".mostra_pic_memoria()." - ".__LINE__ ); }
}
if ($act_impuls == 1) {
$com = exec("/usr/bin/php -f ".$lloc."/utils/bot_plus_impulsos.php ".$lloc." ", $eixida_imp, $resposta_imp);
// per verificar que exec ha funcionat
if ($resposta_imp != 0) {
$log -> lwrite("INFO: impulsos: ".(($resposta_imp == 0)?"correcte":"ERRADA")." - ".__LINE__);
if($act_correu == 1) {
$msg = "INFO: impulsos: ".(($resposta_imp == 0)?"correcte":"ERRADA")."\n".mostra_us_memoria()." ".mostra_pic_memoria()."" ;
enviaCorreu($elmeucompte,"| ".$bot_nom." v".$bot_versio." |",$msg,$elremitent);
}
}
if($control_memoria == 1) { $log -> lwrite ( mostra_us_memoria()." ".mostra_pic_memoria()." - ".__LINE__ ); }
}
// fer comentaris segons el temps d'inactivitat
// llegir data de la darrera publicació
$data_lle = fopen($lloc . "/fitxers/data_pub.txt", "r") or die("No puc obrir la darrera data!");
$data_ant = fread($data_lle,filesize($lloc . "/fitxers/data_pub.txt"));
$data_com = strtotime($espera_coment);
$data_ara = strtotime("now");
$data_dif = ($data_com - $data_ara);
$data_ina = ($data_ara - $data_ant);
fclose($data_lle);
if ($act_coment == 1) {
if ( ($log_detall == "COMPLET") || ($log_detall == "DETALLAT") ) {
$log -> lwrite("La publicació és ".$visib_com."");
}
// $com = shell_exec("/usr/bin/php -f ".$lloc."/utils/bot_plus_comentaris.php ".$lloc." ".$data_ina." ".$data_dif."");
$com = exec("/usr/bin/php -f ".$lloc."/utils/bot_plus_comentaris.php ".$lloc." ".$data_ina." ".$data_dif."", $eixida_com, $resposta_com);
// per verificar que exec ha funcionat
if ($resposta_com != 0) {
$log -> lwrite("INFO: comentaris: ".(($resposta_com == 0)?"correcte":"ERRADA")." - ".__LINE__);
if($act_correu == 1) {
$msg = "INFO: comentaris: ".(($resposta_com == 0)?"correcte":"ERRADA")."\n".mostra_us_memoria()." ".mostra_pic_memoria()."";
enviaCorreu($elmeucompte,"| ".$bot_nom." v".$bot_versio." |",$msg,$elremitent);
}
}
if($control_memoria == 1) { $log -> lwrite ( mostra_us_memoria()." ".mostra_pic_memoria()." - ".__LINE__ ); }
}
// cronometre
$temps5 = microtime(true);
if ( ($log_detall == "COMPLET") || ($log_detall == "DETALLAT") ) {
$duradac = $temps5 - $temps4;
if($duradac < 60) { $duradac=round($duradac,4); $nomt="segons"; }
else { $duradac=date("i:s",$duradac); $nomt="minuts"; }
$log -> lwrite("Temps comentari: ".$duradac." ".$nomt.".");
}
acabar:
$log -> lwrite("He fet ".$pt." ".(($pt<>1)?"publicacions":"publicació")." en total.");
$temps6 = microtime(true);
$durada = $temps6 - $temps;
$log -> lwrite("Temps total: ".(($durada>60)?date("i:s",$durada)." minuts | ".round($durada,4)." segons.":"".round($durada,4)." segons.") );
// buidar memoria amb variables null o unset
if($mem_net_fin == 1) {
$llista = null; $json_dec = null; $url_lin = null;$url_lin_b = null;$urls_an = null;$urls_bn = null;$linies = null;$comprovar = null;$url_hist = null;
$channel = null; $registre = null; $registre_b = null; $msg = null; $filt_oratge = null; $eixida_csu = null;
$durada = null; $temps1 = null; $temps2 = null; $temps3 = null; $temps4 = null; $temps5 = null; $temps6 = null; $eix_urlsr = null; $it = null; $gracies = null; $eixida_gr = null; $eixida_imp = null; $eixida_menc = null; $eixida_com = null;
unset($llista,$json_dec,$url_lin,$url_lin_b,$urls_an,$urls_bn,$linies,$comprovar,$url_hist, $channel, $reg_lin, $reg_lin_bak, $msg, $eixida_csu, $eix_urlsr, $it, $gracies, $eixida_gr, $eixida_imp, $eixida_menc, $eixida_com);
$log -> lwrite ( mostra_us_memoria()." ".mostra_pic_memoria()." - ".__LINE__ );
} else { $log -> lwrite ( mostra_us_memoria()." ".mostra_pic_memoria()." - ".__LINE__ ); }
$log -> lwrite ("FINAL!! ".$bot_nom." ".$bot_versio);
echo "Final manual. \n";
?>