bot_plus/utils/bot_plus_impulsos.php
2023-05-24 10:40:54 +02:00

491 líneas
16 KiB
PHP

<?php
$tc = microtime(true);
// Comprova els arguments, en cas de no existir presenta l'ajuda.
if (!empty($_SERVER["argv"][1])){
$argument = $_SERVER["argv"][1];
} else {
// Presenta l'ajuda
echo "NO HE REBUT la variable";
exit;
}
$lloc = $argument;
// ara podrá carregar la configuració i el logger
include("".$lloc."/configuracio/bot_plus_cfg.php");
include("".$lloc."/utils/bot_plus_funcions.php");
require_once("".$lloc."/lib/logger.php");
// inicia el log
$log = new Logging();
$log->lfile(''.$log_fitxer.'');
$log->lwrite("Estàn activades les estadistiques dels impulsos.");
// preparatius i variables comunes
$resposta = ConsultaNotificacions($token,$base_url,$limit_i,$headers);
$tcc = microtime(true);
$dcon = $tcc - $tc;
$temps_imp = strtotime("now");
$espera_ob = fopen($lloc . "/fitxers/impulsos_temps.txt", "r") or die("No puc obrir la darrera data!");
$espera_ll = fread($espera_ob,filesize($lloc . "/fitxers/impulsos_temps.txt"));
$espera_imp = $espera_ll;
fclose($espera_ob);
// prova
//$espera_imp = strtotime("now");
$temps_ini = $espera_imp - 604800;
$nr = count($resposta);
$menc_mat = array();
$d = 0;
for ($d = 0; $d < $nr; $d++) {
// triar les variables que volem de la matriu
$men_id = $resposta[$d]['id'];
$impuls = $resposta[$d]['type'];
$quan = $resposta[$d]['created_at'];
$qui = $resposta[$d]['account']['acct'];
if(!isset($resposta[$d]['status']['id'])) {
$mis_id = 0;
} else {
$mis_id = $resposta[$d]['status']['id'];
}
if ( ($impuls == "reblog")||($impuls == "favourite") ) {
$menc_mat[] = array ( 'id' => $men_id, 'mis_id' => $mis_id, 'qui' => $qui, 'impuls' => $impuls, 'fet' => $quan );
}
}
$nrm = count($menc_mat);
$imp_resp = null;
// llegir fitxer per evitar repeticions
$impuls_arx = exec("cat ".$lloc."/fitxers/impulsos.txt", $eix_imp, $resp_imp);
$eix_imp = implode(" ",$eix_imp);
// verificar que un usuari fa més d'una volta la mateixa acció
$e = 0;
$nm = 0;
$num_seg = 0;
$mr = 0;
for ($e = 0; $e < $nrm; $e++) {
$m_id = $menc_mat[$e]['id'];
$miss_id = $menc_mat[$e]['mis_id'];
$usuari= $menc_mat[$e]['qui'];
$impuls_t= $menc_mat[$e]['impuls'];
$quan_m = $menc_mat[$e]['fet'];
$quan_str = strtotime($quan_m);
$impuls_arx = shell_exec("cat ".$lloc."/fitxers/impulsos.txt");
$no_repetir = strpos($eix_imp,$m_id);
// if ( ($impuls_t == "reblog") ) {
if (($impuls_t == "reblog")||($impuls_t == "favourite" )) {
$no_repetir = strpos($eix_imp, $m_id);
// escriu la menció al fitxer per no repetir-la
if($no_repetir === false) {
// per que siga només a partir de la data i hora de reinici
if($quan_str >= $temps_ini) {
$escriu_impulsos = fopen($lloc."/fitxers/impulsos.txt", "a") or die("No puc escriure al registre!");
fwrite($escriu_impulsos, $m_id." ".$usuari." ".$impuls_t." ".$miss_id." ".$quan_m."\n");
fclose($escriu_impulsos);
$log->lwrite("NOU IMPULS: ".$m_id." ".$usuari." ".$impuls_t." ".$miss_id." ".$quan_m."");
$imp_mat[] = array ( 'id' => (int)$m_id, 'mis_id' => (int)$miss_id, 'qui' => $usuari, 'impuls' => $impuls_t, 'quan' => $quan_m );
$nm++;
}
}
}
}
if($nm > 0) {
$log-> lwrite("He escrit ".$nm." ".(($nm<>1)?"registres":"registre").".");
// fer la matriu de les dades existents al json
//$usa_json = exec("php ".$lloc."/proves/proves_impulsos_json.php ".$lloc , $eix_usa_json, $resp_usa_json);
$usa_json = shell_exec("php ".$lloc."/proves/proves_impulsos_json.php ".$lloc);
// incloure les novetats a la matriu
/**
// actualitza el fitxer json
$fes_json = json_encode($json_dec, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_OBJECT_AS_ARRAY);
$escriu_f_json = fopen($lloc."/fitxers/impulsos.json", "w") or die("No puc escriure al registre!");
fwrite($escriu_f_json, $fes_json);
fclose($escriu_f_json);
**/
}
if( (filesize($lloc."/fitxers/impulsos.txt"))> (filesize($lloc."/fitxers/impulsos.bak")) ) {
$fil_seg = shell_exec("cat ".$lloc."/fitxers/impulsos.txt > ".$lloc."/fitxers/impulsos.bak");
}
$impp = 0;
$favp = 0;
// aqui if de temps
if($temps_imp >= $espera_imp) {
//recupera còpia de seguretat, si escau
if( (filesize($lloc."/fitxers/impulsos.txt")) == 0 ) {
$fil_seg = shell_exec("cat ".$lloc."/fitxers/impulsos.bak > ".$lloc."/fitxers/impulsos.txt");
}
// llegeix el nombre de seguidors
$nseg_lle = fopen($lloc."/fitxers/seg_cont.txt", "r") or die("No puc obrir el nombre seguidors!");
$nseg_ant = fread($nseg_lle,filesize($lloc."/fitxers/seg_cont.txt"));
fclose($nseg_lle);
// fer el gràfic amb les dades recopilades
$fer_grafic_imp = shell_exec($lloc."/utils/bot_plus_fergrafic_imp.php ".$lloc);
// pujar gràfic
// puja imatge a mastodont
$pub_cent = ".";
$pub_img = $lloc."/grafic/grafic_imp.png";
$fitxer_tipus = mime_content_type($pub_img);
$publica_img = array(
"file" => $pub_img,
"type"=> $fitxer_tipus,
"description" => 'Gràfic impulsos dels '.($nseg_ant).' seguidors.'
);
$publ_img = json_encode($publica_img);
$status_data = array(
"status" => $pub_cent,
"text" => $pub_cent,
"language" => $llengua,
"visibility" => $visib_com
);
$pub_img = $lloc."/grafic/grafic_imp.png";
$fitxer_tipus = mime_content_type($pub_img);
$fitxer_prep = curl_file_create($pub_img, $fitxer_tipus, 'file');
$publica_img = [ 'file' => $fitxer_prep,
'description' => 'Gràfic impulsos dels '.($nseg_ant).' seguidors.',
'text' => $pub_cent,
'status' => 'missatge amb imatge des del bot'
];
// pujada de la imatge
$ch_status = curl_init();
curl_setopt($ch_status, CURLOPT_URL, $base_url . "/api/v2/media");
curl_setopt($ch_status, CURLOPT_POST, 1);
curl_setopt($ch_status, CURLOPT_POSTFIELDS, $publica_img);
curl_setopt($ch_status, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch_status, CURLOPT_HTTPHEADER, $headers);
$output_status = json_decode(curl_exec($ch_status),true);
curl_close ($ch_status);
echo "\n\nresposta media : \n";
print_r ($output_status);
$imat_mst = $output_status['id'];
$imat_url = $output_status['url'];
// arreplegar dades imatge pujada
sleep(1);
$bot_status = curl_init();
curl_setopt($bot_status, CURLOPT_URL, $base_url . "/api/v1/media/".$imat_mst."");
curl_setopt($bot_status, CURLOPT_RETURNTRANSFER, true);
curl_setopt($bot_status, CURLOPT_HTTPHEADER, $headers);
$resposta = (curl_exec($bot_status));
$resposta_json = json_decode(curl_exec($bot_status));
curl_close ($bot_status);
// var_dump($resposta);
// echo "resposta\n";
// print_r($resposta);
$resposta = json_decode($resposta,true);
// echo "\n\nresposta json_decode\n";
// print_r($resposta);
echo "obtenció dades media: \n";
print_r($resposta_json);
sleep(1);
$im_id = $resposta['id'];
$im_url = $resposta['url'];
$im_type = $resposta['type'];
$im_desc = $resposta['description'];
$img_bis = $lloc."/grafic/grafic_imp.png";
$imatge_adj = array('file' => $im_url, 'type' => $im_type, 'description' => $im_desc);
$imatge_adj_json = json_encode($imatge_adj);
function http_build_query_for_curl( $arrays, &$new = array(), $prefix = null ) {
if ( is_object( $arrays ) ) {
$arrays = get_object_vars( $arrays );
}
foreach ( $arrays AS $key => $value ) {
$k = isset( $prefix ) ? $prefix . '[' . $key . ']' : $key;
if ( is_array( $value ) OR is_object( $value ) ) {
http_build_query_for_curl( $value, $new, $k );
} else {
$new[$k] = $value;
}
}
}
//arsort($act_mat_ord);
// reblogs
//$impuls_resum = exec("cat ".$lloc."/fitxers/impulsos.txt | awk '{print $2}'", $eix_ir, $resp_ir );
$impuls_resum = exec("cat ".$lloc."/fitxers/impulsos.txt | grep 'reblog' | awk '{print $2}'", $eix_ir, $resp_ir );
$mat_reb = array_count_values($eix_ir);
$a = 0;
arsort($mat_reb);
foreach ($mat_reb as $clau => $valor) {
$mat_reb_f[] = array('nom' => $clau, 'nombre' => $valor);
$a++;
}
$us_imp = array_values($mat_reb_f)[0]['nom'];
$nu_imp = array_values($mat_reb_f)[0]['nombre'];
// quants tenen els mateix nombre que el primer?
$acabaa = count($mat_reb_f);
for($i=0;$i<$acabaa;$i++) {
if($mat_reb_f[$i]['nombre'] == $nu_imp) {
$mat_reb_fp[] = array('article' => $clau, 'nombre' => $valor);
}
}
$tuts_imp_primers = count($mat_reb_fp);
// favorits
$favorits_resum = exec("cat ".$lloc."/fitxers/impulsos.txt | grep 'favourite' | awk '{print $2}'", $eix_fr, $resp_fr );
$mat_fav = array_count_values($eix_fr);
$b = 0;
arsort($mat_fav);
foreach ($mat_fav as $clau => $valor) {
$mat_fav_f[] = array('nom' => $clau, 'nombre' => $valor);
// echo "favorits: ".$clau."->".$valor."\n";
$b++;
}
$us_fav = array_values($mat_fav_f)[0]['nom'];
$nu_fav = array_values($mat_fav_f)[0]['nombre'];
// quants tenen els mateix nombre que el primer?
$acabaf = count($mat_fav_f);
for($i=0;$i<$acabaf;$i++) {
if($mat_fav_f[$i]['nombre'] == $nu_fav) {
$mat_fav_fp[] = array('article' => $clau, 'nombre' => $valor);
}
}
$tuts_fav_primers = count($mat_fav_fp);
//està activat missatges als usuaris?
if($act_impuls_usu == 1) {
$nrmr = rand(2,3);
// impulsos
for($f = 0; $f<$nrmr; $f++) {
$us_imp = array_values($mat_reb_f)[$f]['nom'];
$nu_imp = array_values($mat_reb_f)[$f]['nombre'];
$imp_resp = "Moltes gràcies @".$us_imp." per impulsar ".$nu_imp." ".(($nu_imp<>1)?"publicacions":"publicació")." des del ".date('d/m/Y', $temps_ini).". 👏 \n#SocUnBot 🤖 \n".$bot_nom." ".$bot_versio."";
$log -> lwrite ($imp_resp);
// publicar
$imp_dades = array(
"status" => $imp_resp,
"language" => $llengua,
"visibility" => $visib_imp_usu
);
PublicaMissatge($base_url,$headers,$imp_dades);
$impp++;
}
// favorits
for($g = 0; $g<$nrmr; $g++) {
$us_fav = array_values($mat_fav_f)[$g]['nom'];
$nu_fav = array_values($mat_fav_f)[$g]['nombre'];
$fav_resp = "Moltes gràcies @".$us_fav." per fer favorit a ".$nu_fav." ".(($nu_fav<>1)?"publicacions":"publicació")." des del ".date('d/m/Y', $temps_ini).". 👏 \n#SocUnBot 🤖 \n".$bot_nom." ".$bot_versio."";
$log -> lwrite ($fav_resp);
// publicar
$fav_dades = array(
"status" => $fav_resp,
"language" => $llengua,
"visibility" => $visib_imp_usu
);
PublicaMissatge($base_url,$headers,$imp_dades);
$favp++;
}
//final activació missatges impulsos i favorits als usuaris
}
// reblog
//$public_resum = shell_exec("cat ".$lloc."/fitxers/impulsos.txt | awk '{print $4}'" );
$public_resum = shell_exec("cat ".$lloc."/fitxers/impulsos.txt | grep 'reblog' | awk '{print $4}'" );
$pub_resum = explode("\n",$public_resum);
$mat_res = array_count_values($pub_resum);
$c = 0;
arsort($mat_res);
foreach ($mat_res as $clau => $valor) {
echo "$clau = $valor\n";
$mat_res_f[] = array('article' => $clau, 'nombre' => $valor);
$c++;
}
$mes_comp_id = array_values($mat_res_f)[0]['article'];
$mes_comp_vl = array_values($mat_res_f)[0]['nombre'];
// favorits
$public_resum_f = shell_exec("cat ".$lloc."/fitxers/impulsos.txt | grep 'favourite' | awk '{print $4}'" );
$pub_resum_f = explode("\n",$public_resum_f);
$mat_res_f = array_count_values($pub_resum_f);
$d = 0;
arsort($mat_res_f);
foreach ($mat_res_f as $clau => $valor) {
// echo "favorits_resum: ". $clau. "=". $valor."\n";
$mat_res_fa[] = array('article' => $clau, 'nombre' => $valor);
$d++;
}
$mes_fav_id = array_values($mat_res_fa)[0]['article'];
$mes_fav_vl = array_values($mat_res_fa)[0]['nombre'];
// llegeix el nombre de seguidors
$nseg_lle = fopen($lloc."/fitxers/seg_cont.txt", "r") or die("No puc obrir el nombre seguidors!");
$nseg_ant = fread($nseg_lle,filesize($lloc."/fitxers/seg_cont.txt"));
fclose($nseg_lle);
if($tuts_imp_primers == 1) {
$comp_miss = "Este és el tut ⬆️ que mes heu compartit, ".$mes_comp_vl." ".(($mes_comp_vl<>1)?"voltes":"volta").", des del ".date('d/m/Y',$temps_ini).".\n".
"Moltes gràcies!\n\n".
"Estadístiques 📈 \n".
"Tuts favorits -> ".$d." tuts\n".
"Els han marcat -> ".$b." persones.\n".
"🎖️ Qui més favorits n'ha fet ".$nu_fav."\n".
"El tut que més n'ha rebut ".$mes_fav_vl."\n".
"Ha participat un ".round( (($b/$nseg_ant)*100), 2 )."% sobre el total dels seguidors.\n".
"Tuts impulsats -> ".$c." tuts\n".
"Els han impulsat -> ".$a." persones.\n".
"🥇 Qui més ha impulsat n'ha fet ".$nu_imp." impulsos.\n".
"Ha participat un ".round( (($a/$nseg_ant)*100), 2 )."% sobre el total dels seguidors.\n".
"#ResumSetmanal #SocUnBot \n".$bot_nom." v".$bot_versio."";
} else {
$comp_miss = "Este és un dels ".$tuts_imp_primers ." tuts ⬆️ que mes heu compartit, ".$mes_comp_vl." ".(($mes_comp_vl<>1)?"voltes":"volta").", des del ".date('d/m/Y',$temps_ini).".\n".
"Moltes gràcies!\n\n".
"Estadístiques 📈 \n".
"Tuts favorits -> ".$d." tuts\n".
"Els han marcat -> ".$b." persones.\n".
"🎖️ Qui més favorits n'ha fet ".$nu_fav."\n".
"El tut que més n'ha rebut ".$mes_fav_vl."\n".
"Ha participat un ".round( (($b/$nseg_ant)*100), 2 )."% sobre el total dels seguidors.\n".
"Tuts impulsats -> ".$c." tuts\n".
"Els han impulsat -> ".$a." persones.\n".
"🥇 Qui més ha impulsat n'ha fet ".$nu_imp." impulsos.\n".
"Ha participat un ".round( (($a/$nseg_ant)*100), 2 )."% sobre el total dels seguidors.\n".
"#ResumSetmanal #SocUnBot \n".$bot_nom." v".$bot_versio."";
}
$tut = $comp_miss;
$log -> lwrite($comp_miss);
if($act_impuls_resum == 1) {
$status_data2 = array(
"status" => $tut,
"language" => $llengua,
"visibility" => $visib_com
);
$tut_matriu = array(
"status" => $tut,
"text" => $tut,
"language" => $llengua,
"media_ids[]" => $im_id,
"visibility" => $visib_cent,
"sensitive" => null,
"spoiler_text" => null,
"in_reply_to_id" => $mes_comp_id
);
http_build_query_for_curl( $tut_matriu, $tut_dades );
// PublicaMissatge($headers,$base_url,$tut_dades);
$pub_text_imat = curl_init();
curl_setopt($pub_text_imat, CURLOPT_URL, $base_url . "/api/v1/statuses");
curl_setopt($pub_text_imat, CURLOPT_POST, 1);
curl_setopt($pub_text_imat, CURLOPT_POSTFIELDS, $tut_dades);
curl_setopt($pub_text_imat, CURLOPT_RETURNTRANSFER, true);
curl_setopt($pub_text_imat, CURLOPT_HTTPHEADER, $headers);
$resposta_img_txt = json_decode(curl_exec($pub_text_imat),true);
curl_close ($pub_text_imat);
//exit;
$mr++;
// executa activitat dels seguidors
$activitat_seguidors = shell_exec("/usr/bin/php -f ".$lloc."/proves/proves_activitat_seguidors.php ".$lloc."");
// final si estadistiques està encés
}
// final if per publicar (caldrà descomentar-lo)
}
else {
$temps_cal = ($espera_imp - $temps_imp);
if( ($nm > 0) && (($espera_imp - $temps_imp)>= 86400) ) {
$log -> lwrite("Manquen per publicar ".gmdate("d",$temps_cal)." dies i ".gmdate("H:i:s",$temps_cal)." hores");
}
if(($espera_imp - $temps_imp)<= 86400) {
$log->lwrite("".( gmdate("d",$temps_cal)<>1 ? "Manquen ".gmdate('d',$temps_cal)." dies i ".gmdate('H:i:s',$temps_cal)." hores.":"No manca cap dia i ".gmdate('H:i:s',$temps_cal)." hores.")."");
}
}
//echo "propera publicació: ".$espera_imp." | ".date('r',$espera_imp)."\n";
// condició publicar per refer el fitxer de temps
if( ($impp >= 1)||($mr==1)||($favp >=1) ) {
//reinicie el fitxer una volta publique el missatge
$buida_imp = shell_exec(": > ".$lloc."/fitxers/impulsos.txt");
$buida_imp_cp = shell_exec(": > ".$lloc."/fitxers/impulsos.bak");
$buida_json = file_put_contents($lloc."/fitxers/impulsos.json", json_encode([]));
// crea el fitxer per fer el compte de temps
$data_ara = strtotime("now");
$data_conv = strtotime("1 week");
$data_dif = $data_ara - $data_conv;
$data_cal = $data_ara + $data_dif;
$data_conv = ($data_conv + rand(-300,300));
// escriu el fitxer per saber quan publicar
$escriu_imp_t = fopen($lloc."/fitxers/impulsos_temps.txt", "w") or die("No puc escriure al registre!");
fwrite($escriu_imp_t, $data_conv);
fclose($escriu_imp_t);
}
$tcf = microtime(true);
$dc = $tcf - $tc;
$log->lwrite("Temps impulsos: ".round($dc,4)."");
?>