5160 sujets

Le Bar du forum

J'ai toujours un peu regretté l'absence d'une fonctionnalité permettant de surveiller un topic que l'on n'a pas lancé sur le forum alsacreations.
Je vous propose un script php qui, exécuté automatiquement avec une tâche cron, peut faire ce travail:
<?php
	$url='http://forum.alsacreations.com/';
	$mail='ADRESSE_MAIL';
	$path_file='./data';
	$content_file='';
	if($stream_file=fopen($path_file,'r')) {
		while($line=fgets($stream_file)) {
			$data=explode(':',preg_replace('#\n#','',$line));
			$last_date=$data[0];
			if($content=@file_get_contents($url.$data[1])) {
				if(preg_match_all('#<time datetime="(\d{4})-(\d{2})-(\d{2})T(\d{2}):[#black][/#](\d{2}):[#black][/#](\d{2})">#',$content,$dates)) {
					$last_date=$dates[1][count($dates[1])-1];
					$last_date.=$dates[2][count($dates[2])-1];
					$last_date.=$dates[3][count($dates[3])-1];
					$last_date.=$dates[4][count($dates[4])-1];
					$last_date.=$dates[5][count($dates[5])-1];
					$last_date.=$dates[6][count($dates[6])-1];
					if($last_date>$data[0]) {
						echo 'Update: '.$data[1]."\n";
						mail($mail,'Alsacreations: Nouveau message','Un nouveau message a été posté sur ce topic alsacreations: '.$url.$data[1].'#lastofpage');
					}
				}
			}
			$content_file.=$last_date.':'.$data[1]."\n";
		}
		ftruncate($stream_file,0);
		fputs($stream_file,$content_file);
		fclose($stream_file);
	}
?>

Il faut donc créer un fichier "data" dans le même répertoire. Les données sont enregistrées de cette manière:
AAAAMMJJHHMMSS:ADRESSE_PARTIELLE_DU_TOPIC
AAAAMMJJHHMMSS:ADRESSE_PARTIELLE_DU_TOPIC
AAAAMMJJHHMMSS:ADRESSE_PARTIELLE_DU_TOPIC

La date est la date du dernier message posté, ou la date d'ajout du topic dans liste de surveillance si aucun message n'a été posté depuis.
Je parle d'adresse partielle pour définir ce qui se trouve après le premier slash qui suit l'extension du domaine. Par exemple (comme ici):
topic-9-72407-1-Surveiller-des-topics-sur-alsacreations.html

Pour remplir plus facilement ce fichier, vous pouvez utiliser ce script:
<?php
	if(!isset($argv[1])) {
		echo 'Veuillez indiquer une directive'."\n";
		exit;
	}
	$url='http://forum.alsacreations.com/';
	$path_file='./data';
	$content_file=file_get_contents($path_file);
	if($stream_file=fopen($path_file,'a+')) {
		if($argv[1]=='list') readfile($path_file);
		elseif($argv[1]=='delete' && isset($argv[2])) {
			if(!preg_match('#^http://#',$argv[2])) $argv[2]='http://'.$argv[2];
			$argv[2]=preg_replace('#^'.preg_quote($url).'#','',$argv[2]);
			if(preg_match('#^\d{14}:'.preg_quote($argv[2]).'$#m',$content_file)) {
				$content_file=preg_replace('#\d{14}:'.preg_quote($argv[2]).'\n#','',$content_file);
				ftruncate($stream_file,0);
				fputs($stream_file,$content_file);
				echo 'Topic supprimé'."\n";
			}
			else echo 'Ce topic n\'est pas surveillé'."\n";
		}
		else {
			 if(!preg_match('#^http://#',$argv[1])) $argv[1]='http://'.$argv[1];
			$argv[1]=preg_replace('#^'.preg_quote($url).'#','',$argv[1]);
			if($content=@file_get_contents($url.$argv[1])) {
				if(!preg_match('#^\d{14}:'.preg_quote($argv[1]).'$#m',$content_file)) {
					date_default_timezone_set('Europe/Paris');
					fputs($stream_file,date('YmdHis').':'.$argv[1]."\n");
					echo 'Topic ajouté'."\n";
				}
				else echo 'Ce topic est déjà surveillé'."\n";
			}
			else echo 'Ce topic n\'existe pas'."\n";
		}
		fclose($stream_file);
	}
?>

Ajouter un topic:
php script-alerte-donnees.php ADRESSE_COMPLÈTE_DU_TOPIC

Supprimer un topic:
php script-alerte-donnees.php delete ADRESSE_COMPLÈTE_DU_TOPIC

Lister les topic surveillés:
php script-alerte-donnees.php  list


Je l'avais fait pour moi initialement mais je me suis dit que ça pourrait en intéresser d'autres Smiley cligne
Modifié par juliendargelos (01 Jul 2014 - 02:21)
Très sympa, mais ça sert à quoi?

et puis je comprends pas ce que veut dire "surveiller un topic que l'on n'a pas lancé sur le forum alsacreations"

Smiley cligne