Per començar el funcionament hem de connectar amb una font rss. Els fitxers que utilitza este sistema de difusió de informació son del format xml, un tipus de fitxer que té un format de dates de fàcil i àgil transmissió com son les cadenes json, matriu d’informació que van com una cadena de dades.

Per accedir he utilitzat la classe que daniweb publica en el seu article . Amb això ja podem començar a treballar i filtrar el contingut de la font rss convertida en matriu. Primer obtenim la font
// Obtenim la font XML/RSS 2.0
$feed = new ExportRSS($fitxer , "2.0");
$channel = $feed->get_channel_data();
El segon pas es triar el que vols publicar. I el bot_plus ho fa amb aquestes línies:
if ( (str_contains($enllac,"noticies")) ||
(str_contains($enllac,"oratge")) ||
(str_contains($enllac,"documentals")) ||
(str_contains($enllac,'esports')) ) {
if (strpos($enllac,'complets') == false) {
$tria = 1;
$n++;
} else {
$tria = 0;
}
} else { $tria = 0; }
En este pas ja hem triat el contingut de les noticies que volem publicar ja que la web d’àPuntMedia té eixos directoris. El ser una miqueta dotor és molt important per veure com tenen organitzats tant els continguts com les fonts rss. Per exemple, al principi vaig triar l’enllaç que facilita la mateixa web. I em semblava que serie prou, però vaig veure que les publicacions es limitaven al que la redacció tria com a noticies importants i que han d’eixir a la portada. Com que el que vull es publicar tot allò que la redacció publique, arribe o no a la portada, he hagut de mirar el codi font de les planes i esbrinar quines subfonts o microsites de rss utilitzen per afegir les noticies que puguen ser d’interés.
Ara toca generar la cadena que comprovarà si s’ha publicat o no el que trobem a la matriu de la darrera connexió:
// generar la cadena a partir del fitxer de registre (arxiu de dades)
// cadena per trobar la data de les darreres publicades
// si troba la cadena amb strpos NO publica, si no la troba, PUBLICA
// aqui la generava quan era només per un microsite // $comprovar = shell_exec("cat ".$lloc."/fitxers/dates.txt"); $c = 0; $n = $j-1; $w = 0; $p = 0; $verifica = 0; for( $c = 0; $c<$n ; $c++ ) { // $rss_ara = $llista[$c]['pub']; // activar quan estiga el fitxer complet de strtotime $rss_ara = strtotime($llista[$c]['pub']); $rssu_ara = $llista[$c]['enllac']; $rssu_ara = preg_replace('/[^A-Za-z0-9-]/','',$rssu_ara); $rssu_ara = preg_replace('/https/',' ',$rssu_ara); $rsst_ara = $llista[$c]['titol']." ".$llista[$c]['descripcio']." ".$llista[$c]['enllac']." "; if ( ($l_detall == "COMPLET") || ($l_detall == "DETALLAT") ) { // echo "rss_ara: ".$rss_ara."\n"; $log -> lwrite ("Contingut de rss_ara: ".$rss_ara); } $verifica = strpos($comprovar,$rss_ara); $mira_url = strpos($url_hist,$rssu_ara); if ( ($l_detall == "COMPLET") ) { // echo "Contingut de verifica num: ".$c." - ".$verifica."\n"; $log -> lwrite ("Contingut de verifica num: ".$c." - ".$verifica); $log -> lwrite ("Contingut de mira_url num: ".$c."|".$rssu_ara."|".$mira_url); }
Ràpidament, genera una cadena de les dates publicades que, més tard ordenarà. per això afegeix la cadena de temps amb strtotime . Deprés genera la cadena de l’article seleccionat i compara amb strpos si es troba una dins de l’altra. En cas afirmatiu, no ha de publicar, en cas negatiu passem a la publicació amb el curl com ja vam veure en el primer article
$status_data = array(
"status" => $publicacio,
"language" => $language,
"visibility" => $visibilitat
);
$ch_status = curl_init();
curl_setopt($ch_status, CURLOPT_URL, $base_url . "/api/v1/statuses");
curl_setopt($ch_status, CURLOPT_POST, 1);
curl_setopt($ch_status, CURLOPT_POSTFIELDS, $status_data);
curl_setopt($ch_status, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch_status, CURLOPT_HTTPHEADER, $headers);
$output_status = json_decode(curl_exec($ch_status));
curl_close ($ch_status);
$p++;
$pt++;
sleep($espera+30);
El primer és construir la matriu per enviar les opcions a curl i després indicar-li que connecte amb la url corresponent segons les indicacions de l’API de mastodon.
Després de publicar ens cal enregistrar en els fitxers de control, he optat per no utilitzar una base de dades i així que puga ser més entenedor, la data i les url per evitar repeticions, que no sempre passa.
if ($p >= 1) {
// escriu la data de la darrera publicació
$data_tam = filesize($lloc."/fitxers/data_pub.txt");
// echo "data_tam: ".$data_tam."\n";
if ( $data_tam == 0 ) {
$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_ant = fread($data_esc,"10");
$data_nova = strtotime("now");
// echo "if: ".$data_ant."\n";
// echo "if: ".$data_nova."\n";
} else {
$data_esc = fopen($lloc . "/fitxers/data_pub.txt", "w+") or die("No puc obrir la darrera data!");
$data_ant = fread($data_esc,filesize($lloc . "/fitxers/data_pub.txt"));
$data_nova = strtotime("now");
// echo " else: ".$data_ant."\n";
// echo " else: ".$data_nova."\n";
}
Estes línies s’expliquen per si soles però un resum: obre el fitxer de la darrera publicació que ens permetrà controlar el temps que passa i, si ens ve de gust i ho activem, que el bot indique als seguidors que funciona i està esperan novetats de la font sindicada.
Amb açò tenim ja l’esquema bàsic de com funciona el bot_plus que, evidentment està adaptat a les característiques de les fonts rss del web d’ApuntMedia.
Per a a qui vulga veure els budells d’un programeta fet en php 8.1, que pugau aprendren si teniu ganes, o simplement per si alguna cosa vos és d’utilitat, vos deixe una còpia. Recordeu que primer cal mirar la configuració i, en un temps faré un fitxer d’instal·lació per omplir correctament tots els fitxer de control que calen.
Sigau benèvols que només és una β de un aficionat.
A tindre bon dia i a gaudir.