Ecocito - suivi des ouvertures et passages en déchetterie

Hello,

Si vous aussi votre communauté d’agglomération a eu la merveilleuse idée de mettre en place le système de « redevance incitative » et utilise ecocito pour le suivi, alors ça peut vous intéresser :slight_smile:

Le script se connecte au site ecocito et récupère les 3 informations présentes sur celui-ci, à savoir:

  • Nombre d’ouvertures en point d’apport volontaire (conteneurs enterrés)
  • Nombre de passages en déchetterie
  • Nombre de levées de bacs à domicile

Créez un nouveau scénario avec un déclencheur programmé, 1 fois par jour quand vous souhaitez.
Ensuite faites un bloc code. Des variables seront générées et vous pourrez les utiliser où vous voulez.

/*
@ddelec24 - version du 29/04/2023

Script de récupération des informations sur votre production de déchets
Il faut modifier les 3 informations de la zone éditable en dessous.
Ne touchez pas au reste sauf si vous savez ce que vous faites.

- $service correspond au sous domaine.
	Exemple: vous vous connectez sur https://cergypontoise.ecocito.com/
    Mettez "cergypontoise"
- $identifiant est votre mail
- $mot_de_passe est ... votre mot de passe

Le site est actualisé une fois par jour (dans la nuit) donc mettez ce scénario avec une programmation journalière.
Pour ma part c'est 31 11 * * * pour qu'il vérifie à 11H31 tous les jours.

Les variables que vous pourrez ensuite utiliser sont:
ecocito_pav_count => nombre d'ouverture en point d'apport volontaire depuis le début d'année
ecocito_pav_count_ordures_menageres => Nombre d'ouvertures pour les ordures ménagères
ecocito_pav_count_ordures_selectives => Nombre d'ouvertures pour les ordures sélectives
ecocito_pav_last_date => date de dernière ouverture
ecocito_pav_ordures_menageres => Si cétait un dépot dans la borne des ordures ménagères, sera à 1, sinon 0
ecocito_pav_ordures_selectives => Si cétait un dépot dans la borne des ordures sélectives, sera à 1, sinon 0
ecocito_dechetterie_count => nombre de passage en déchetterie depuis le début d'année
ecocito_dechetterie_last_date => date de dernier passage en déchetterie
ecocito_collecte_count => nombre de levée de container à domicile depuis le début d'année
ecocito_collecte_last_date => date de dernière levée

*/

/////////// ZONE EDITABLE ///////////

$service = 'MONSERVICE';
$identifiant = 	'MONMAIL';
$mot_de_passe = 'MONMOTDEPASSE';

///////// FIN ZONE EDITABLE /////////

///////////////////////////////////////////////////////////
/// NE PAS MODIFIER LE CODE SUIVANT SANS CONNAISSANCES ////
///////////////////////////////////////////////////////////

$subdomain = $service . '.ecocito.com';
$url = 'https://'. $subdomain ;
$login_path = '/Usager/Profil/Connexion?ReturnUrl=%2FUsager%2FAccueil';
$user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36';
$cookie_file_path = '/tmp/cookieecocito.txt';

// Point d'apport volontaire
$pav_path = '/Usager/Collecte/GetApportPAV';
$pav_query = '?skip=0&take=40&requireTotalCount=true' . 
'&sort=' . urlencode('[{"selector":"DATE_DONNEE","desc":true}]') .
'&dateDebut=' . urlencode(date("Y-m-d\TH:i:s.000\Z", strtotime("last day of december last year 11 pm"))) .
'&dateFin=' . urlencode(date("Y-m-d\TH:i:s.000\Z", strtotime("now"))) .
'&charger=true&idMatiere=-1' .
'&_=' . time();

// Dechetterie
$dechetterie_path = '/Usager/Apport/GetApport';
$dechetterie_query = '?skip=0&take=20&requireTotalCount=true' . 
'&sort=' . urlencode('[{"selector":"DATE_DONNEE","desc":true}]') .
'&totalSummary=' . urlencode('[{"selector":"QUANTITE_VIDE","summaryType":"sum"},{"selector":"QUANTITE_NETTE","summaryType":"sum"}]') .
'&dateDebut=' . urlencode(date("Y-m-d\TH:i:s.000\Z", strtotime("last day of december last year 11 pm"))) .
'&dateFin=' . urlencode(date("Y-m-d\TH:i:s.000\Z", strtotime("now"))) .
'&charger=true&idMatiere=-1' .
'&_=' . time();

// Collecte / levée de bac
$collecte_path = '/Usager/Collecte/GetCollecte';
$collecte_query = '?skip=0&take=20&requireTotalCount=true' .
'&sort=' . urlencode('[{"selector":"DATE_DONNEE","desc":true}]') .
'&dateDebut=' . urlencode(date("Y-m-d\TH:i:s.000\Z", strtotime("last day of december last year 11 pm"))) .
'&dateFin=' . urlencode(date("Y-m-d\TH:i:s.000\Z", strtotime("now"))) .
'&charger=true&idMatiere=-1' .
'&_=' . time();

// LOGIN
$scenario->setLog("################################## ETAPE 1 - LOGIN ###################################");
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url . $login_path);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, "Identifiant=" . $identifiant . "&MotDePasse=" . $mot_de_passe );

$headers = array();
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
$headers[] = 'User-Agent: ' . $user_agent;
$headers[] = 'Origin: ' . $url;
$headers[] = 'Referer: ' . $url . $login_path;

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);

if (curl_errno($ch)) {
	$scenario->setLog("Error curl : " . curl_error($ch));
}

$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$scenario->setLog("login curl http code : " . $http_code);

if($http_code != 200)
	$scenario->stop();

sleep(3);
$scenario->setLog("######################### ETAPE 2 - POINT DAPPORT VOLONTAIRE #########################");
$scenario->setLog("Query: " . $url . $pav_path . $pav_query);
$json_pav = curl_ecocito($url . $pav_path . $pav_query, $user_agent, $cookie_file_path);
$scenario->setLog("curl result : " . $json_pav);

sleep(3);
$scenario->setLog("############################### ETAPE 3 - DECHETTERIE ################################");
$scenario->setLog("Query: " . $url . $dechetterie_path . $dechetterie_query);
$json_dechetterie = curl_ecocito($url . $dechetterie_path . $dechetterie_query, $user_agent, $cookie_file_path);
$scenario->setLog("curl result : " . $json_dechetterie);

sleep(3);
$scenario->setLog("################################# ETAPE 4 - COLLECTE #################################");
$scenario->setLog("Query: " . $url . $collecte_path . $collecte_query);
$json_collecte = curl_ecocito($url . $collecte_path . $collecte_query, $user_agent, $cookie_file_path);
$scenario->setLog("curl result : " . $json_collecte);

////////////// ENREGISTREMENT DES DONNEES //////////////
$json_pav = json_decode($json_pav);
$count_pav = count($json_pav->data);
$old_count_pav = $scenario->getData('ecocito_pav_count', false, 999);
$count_pav_ordures_menageres = 0;
$count_pav_ordures_selectives = 0;

if($old_count_pav == 999 || ($old_count_pav != $count_pav)) {
	$scenario->setData('ecocito_pav_count', $count_pav);
	if($count_pav > 0) {
		$lastUpdate = $json_pav->data[0]->DATE_DONNEE;
		$scenario->setData('ecocito_pav_last_date', str_replace("T", " à ", $lastUpdate));
		$orduresMenageres = false;
		$orduresSelectives = false;
		foreach($json_pav->data as $data) {
			if($data->MATIERE__LIBELLE == "Ordures ménagères") {
				$orduresMenageres = true;
				$count_pav_ordures_menageres++;
			}
			if($data->MATIERE__LIBELLE == "Collecte sélective") {
				$orduresSelectives = true;
				$count_pav_ordures_selectives++;

			}
		}
		$scenario->setData('ecocito_pav_ordures_menageres', ($orduresMenageres ? 1 : 0));
		$scenario->setData('ecocito_pav_ordures_selectives', ($orduresSelectives ? 1 : 0));
		$scenario->setData('ecocito_pav_count_ordures_menageres', $count_pav_ordures_menageres);
		$scenario->setData('ecocito_pav_count_ordures_selectives', $count_pav_ordures_selectives);
	}
}

$json_dechetterie = json_decode($json_dechetterie);
$count_dechetterie = count($json_dechetterie->data);
$old_count_dechetterie = $scenario->getData('ecocito_dechetterie_count', false, 999);

if($old_count_dechetterie == 999 || ($old_count_dechetterie != $count_dechetterie)) {
	$scenario->setData('ecocito_dechetterie_count', $count_dechetterie);
	if($count_dechetterie > 0)
		$scenario->setData('ecocito_dechetterie_last_date', str_replace("T", " à ", $json_dechetterie->data[0]->DATE_DONNEE));
}

$json_collecte = json_decode($json_collecte);
$count_collecte = count($json_collecte->data);
$old_count_collecte = $scenario->getData('ecocito_collecte_count', false, 999);

if($old_count_collecte == 999 || ($old_count_collecte != $count_collecte)) {
	$scenario->setData('ecocito_collecte_count', $count_collecte);
	if($count_collecte > 0)
		$scenario->setData('ecocito_collecte_last_date', str_replace("T", " à ", $json_collecte->data[0]->DATE_DONNEE));
}


function curl_ecocito($q, $user_agent, $cookie_file_path) {
	global $scenario;
	
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $q);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
	curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

	$headers = array();
	$headers[] = 'User-Agent: ' . $user_agent;
	curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

	$response = curl_exec($ch);
	if (curl_errno($ch))
		$scenario->setLog("Error curl : " . curl_error($ch));

	curl_close($ch);
	return $response;
}

Le site a changé une fois depuis que je l’utilise, mais si ça arrive à nouveau, je ferais un message ici et je mettrais à jour le code en conséquence, donc mettez ce post en « surveiller » si vous voulez être averti :wink:

Mon cas d’utilisation:
J’ai un autre scénario en parallèle avec ces déclencheurs:
image

et ça envoi un message sur discord quand ça change, rien de sorcier

Que dire de plus, on est sur des stats années civile, donc du 1er janvier au 31 décembre.
Si vous êtes dans un endroit où le calcul du nombre d’ouverture doit se faire autrement, n’hésitez pas à me le dire :wink:

1 « J'aime »

Bonjour,

Merci beaucoup pour ce code qui fonctionne bien.

Question supplémentaire.
Seriez-vous capable de différencier les différentes sortes de collectes (sélectives, ordures ménagères).

Je vois dans le log du scénario ci dessous qu’il y a bien le type de collecte dans le champs « MATIERE__LIBELLE » ou « Dechet ». Mais je ne sais pas comment je peux l’extraire (comme le total count qui est à la fin) pour les additionner et les afficher séparément ?

Chez nous seuls les collectes des ordures ménagères sont facturés donc mon besoin est de ne savoir que ce total là et pas le total cumulé avec la collecte sélective.

voilà le log.

[2023-03-14 11:00:14][SCENARIO] ################################# ETAPE 4 - COLLECTE #################################
[2023-03-14 11:00:14][SCENARIO] Query: https://xxxxxxxxx.ecocito.com/Usager/Collecte/GetCollecte?skip=0&take=20&requireTotalCount=true&sort=%5B%7B%22selector%22%3A%22DATE_DONNEE%22%2C%22desc%22%3Atrue%7D%5D&dateDebut=2022-12-31T23%3A00%3A00.000Z&dateFin=2023-03-14T11%3A00%3A02.000Z&charger=true&idMatiere=-1&_=1678788002
[2023-03-14 11:00:14][SCENARIO] curl result : {"data":[{"ID_DONNEE":382121,"DATE_DONNEE":"2023-03-13T06:46:07","NUMERO_BADGE":"XXXXXXXXXXXX","FLAG_COL_ANOMALIE_1":false,"FLAG_COL_ANOMALIE_2":false,"FLAG_COL_ANOMALIE_3":false,"FLAG_COL_ANOMALIE_4":false,"FLAG_COL_ANOMALIE_5":false,"FLAG_COL_ANOMALIE_6":false,"ID_COL_ANOMALIE_INTEGRATION":null,"QUANTITE_NETTE":0.0,"COL_CONTENANT__NUMERO_BADGE":"XXXXXXXXXXXX","COL_CONTENANT__ID_LOCAL":"XXXXXXXXXXXX","CONTENANT__LIBELLE_COURT":"C 0240 AT/VH","ADRESSE__NUMERO_VOIE":7,"ADRESSE__NUMERO_VOIE_EXTENSION":null,"ADRESSE__VOIRIE__NOM_VOIE":"XXXXXXXXXX","ADRESSE__VOIRIE__COMMUNE__CODE_POSTAL":XXXXX,"ADRESSE__VOIRIE__COMMUNE__NOM_COMMUNE":"XXXXXXXXXXXX","MATIERE__LIBELLE":"Ordures ménagères","UNITE_QUANTIFICATION__LIBELLE_COURT":null,"POINT_PRODUCTION__REFERENCE_INTERNE":null,"ADRESSE_NUMERO_VOIE":7,"ADRESSE_NUMERO_VOIE_EXTENSION":null,"ADRESSE_VOIRIE_NOM_VOIE":"XXXXXXXXXX","ADRESSE_VOIRIE_COMMUNE_CODE_POSTAL":XXXXX,"ADRESSE_VOIRIE_COMMUNE_NOM_COMMUNE":"XXXXXXXXXXXX","POINT_PRODUCTION_REFERENCE_INTERNE":null,"TypeContenant":"C 0240 AT/VH","NumeroCuve":"XXXXXXXXXXXX","NumeroPuce":"XXXXXXXXXXXX","Dechet":"Ordures ménagères","Contenant":"C 0240 AT/VH N°01149...","ContenantExport":"C 0240 AT/VH N°XXXXXXXXXXXX","Anomalie":false,"AnomalieTexte":"Non","QuantiteNette":"-","QuantiteNetteExport":"","ADRESSE_EN_LIGNE":"7  XXXXXXXXXX XXXXX XXXXXXXXXXXX","ADRESSE_EN_LIGNE_EXPORT":"7  XXXXXXXXXX XXXXX XXXXXXXXXXXX","VOIRIE_EN_LIGNE":"7  XXXXXXXXXX"},{"ID_DONNEE":379481,"DATE_DONNEE":"2023-03-09T04:52:21","NUMERO_BADGE":"XXXXXXXXXXXX","FLAG_COL_ANOMALIE_1":false,"FLAG_COL_ANOMALIE_2":false,"FLAG_COL_ANOMALIE_3":false,"FLAG_COL_ANOMALIE_4":false,"FLAG_COL_ANOMALIE_5":false,"FLAG_COL_ANOMALIE_6":false,"ID_COL_ANOMALIE_INTEGRATION":null,"QUANTITE_NETTE":0.0,"COL_CONTENANT__NUMERO_BADGE":"XXXXXXXXXXXX","COL_CONTENANT__ID_LOCAL":"XXXXXXXXXXXX","CONTENANT__LIBELLE_COURT":"Q 240 GA/J","ADRESSE__NUMERO_VOIE":7,"ADRESSE__NUMERO_VOIE_EXTENSION":null,"ADRESSE__VOIRIE__NOM_VOIE":"XXXXXXXXXX","ADRESSE__VOIRIE__COMMUNE__CODE_POSTAL":XXXXX,"ADRESSE__VOIRIE__COMMUNE__NOM_COMMUNE":"XXXXXXXXXXXX","MATIERE__LIBELLE":"Collecte sélective","UNITE_QUANTIFICATION__LIBELLE_COURT":null,"POINT_PRODUCTION__REFERENCE_INTERNE":null,"ADRESSE_NUMERO_VOIE":7,"ADRESSE_NUMERO_VOIE_EXTENSION":null,"ADRESSE_VOIRIE_NOM_VOIE":"XXXXXXXXXX","ADRESSE_VOIRIE_COMMUNE_CODE_POSTAL":XXXXX,"ADRESSE_VOIRIE_COMMUNE_NOM_COMMUNE":"XXXXXXXXXXXX","POINT_PRODUCTION_REFERENCE_INTERNE":null,"TypeContenant":"Q 240 GA/J","NumeroCuve":"XXXXXXXXXXXX","NumeroPuce":"XXXXXXXXXXXX","Dechet":"Collecte sélective","Contenant":"Q 240 GA/J N°01149EB...","ContenantExport":"Q 240 GA/J N°XXXXXXXXXXXX","Anomalie":false,"AnomalieTexte":"Non","QuantiteNette":"-","QuantiteNetteExport":"","ADRESSE_EN_LIGNE":"7  XXXXXXXXXX XXXXX XXXXXXXXXXXX","ADRESSE_EN_LIGNE_EXPORT":"7  XXXXXXXXXX XXXXX XXXXXXXXXXXX","VOIRIE_EN_LIGNE":"7  XXXXXXXXXX"},{"ID_DONNEE":363175,"DATE_DONNEE":"2023-03-02T05:24:10","NUMERO_BADGE":"XXXXXXXXXXXX","FLAG_COL_ANOMALIE_1":false,"FLAG_COL_ANOMALIE_2":false,"FLAG_COL_ANOMALIE_3":false,"FLAG_COL_ANOMALIE_4":false,"FLAG_COL_ANOMALIE_5":false,"FLAG_COL_ANOMALIE_6":false,"ID_COL_ANOMALIE_INTEGRATION":null,"QUANTITE_NETTE":0.0,"COL_CONTENANT__NUMERO_BADGE":"XXXXXXXXXXXX","COL_CONTENANT__ID_LOCAL":"XXXXXXXXXXXX","CONTENANT__LIBELLE_COURT":"Q 240 GA/J","ADRESSE__NUMERO_VOIE":7,"ADRESSE__NUMERO_VOIE_EXTENSION":null,"ADRESSE__VOIRIE__NOM_VOIE":"XXXXXXXXXX","ADRESSE__VOIRIE__COMMUNE__CODE_POSTAL":XXXXX,"ADRESSE__VOIRIE__COMMUNE__NOM_COMMUNE":"XXXXXXXXXXXX","MATIERE__LIBELLE":"Collecte sélective","UNITE_QUANTIFICATION__LIBELLE_COURT":null,"POINT_PRODUCTION__REFERENCE_INTERNE":null,"ADRESSE_NUMERO_VOIE":7,"ADRESSE_NUMERO_VOIE_EXTENSION":null,"ADRESSE_VOIRIE_NOM_VOIE":"XXXXXXXXXX","ADRESSE_VOIRIE_COMMUNE_CODE_POSTAL":XXXXX,"ADRESSE_VOIRIE_COMMUNE_NOM_COMMUNE":"XXXXXXXXXXXX","POINT_PRODUCTION_REFERENCE_INTERNE":null,"TypeContenant":"Q 240 GA/J","NumeroCuve":"XXXXXXXXXXXX","NumeroPuce":"XXXXXXXXXXXX","Dechet":"Collecte sélective","Contenant":"Q 240 GA/J N°01149EB...","ContenantExport":"Q 240 GA/J N°XXXXXXXXXXXX","Anomalie":false,"AnomalieTexte":"Non","QuantiteNette":"-","QuantiteNetteExport":"","ADRESSE_EN_LIGNE":"7  XXXXXXXXXX XXXXX XXXXXXXXXXXX","ADRESSE_EN_LIGNE_EXPORT":"7  XXXXXXXXXX XXXXX XXXXXXXXXXXX","VOIRIE_EN_LIGNE":"7  XXXXXXXXXX"},{"ID_DONNEE":341205,"DATE_DONNEE":"2023-02-16T05:37:09","NUMERO_BADGE":"XXXXXXXXXXXX","FLAG_COL_ANOMALIE_1":false,"FLAG_COL_ANOMALIE_2":false,"FLAG_COL_ANOMALIE_3":false,"FLAG_COL_ANOMALIE_4":false,"FLAG_COL_ANOMALIE_5":false,"FLAG_COL_ANOMALIE_6":false,"ID_COL_ANOMALIE_INTEGRATION":null,"QUANTITE_NETTE":0.0,"COL_CONTENANT__NUMERO_BADGE":"XXXXXXXXXXXX","COL_CONTENANT__ID_LOCAL":"XXXXXXXXXXXX","CONTENANT__LIBELLE_COURT":"Q 240 GA/J","ADRESSE__NUMERO_VOIE":7,"ADRESSE__NUMERO_VOIE_EXTENSION":null,"ADRESSE__VOIRIE__NOM_VOIE":"XXXXXXXXXX","ADRESSE__VOIRIE__COMMUNE__CODE_POSTAL":XXXXX,"ADRESSE__VOIRIE__COMMUNE__NOM_COMMUNE":"XXXXXXXXXXXX","MATIERE__LIBELLE":"Collecte sélective","UNITE_QUANTIFICATION__LIBELLE_COURT":null,"POINT_PRODUCTION__REFERENCE_INTERNE":null,"ADRESSE_NUMERO_VOIE":7,"ADRESSE_NUMERO_VOIE_EXTENSION":null,"ADRESSE_VOIRIE_NOM_VOIE":"XXXXXXXXXX","ADRESSE_VOIRIE_COMMUNE_CODE_POSTAL":XXXXX,"ADRESSE_VOIRIE_COMMUNE_NOM_COMMUNE":"XXXXXXXXXXXX","POINT_PRODUCTION_REFERENCE_INTERNE":null,"TypeContenant":"Q 240 GA/J","NumeroCuve":"XXXXXXXXXXXX","NumeroPuce":"XXXXXXXXXXXX","Dechet":"Collecte sélective","Contenant":"Q 240 GA/J N°01149EB...","ContenantExport":"Q 240 GA/J N°XXXXXXXXXXXX","Anomalie":false,"AnomalieTexte":"Non","QuantiteNette":"-","QuantiteNetteExport":"","ADRESSE_EN_LIGNE":"7  XXXXXXXXXX XXXXX XXXXXXXXXXXX","ADRESSE_EN_LIGNE_EXPORT":"7  XXXXXXXXXX XXXXX XXXXXXXXXXXX","VOIRIE_EN_LIGNE":"7  XXXXXXXXXX"},{"ID_DONNEE":329578,"DATE_DONNEE":"2023-02-09T04:51:57","NUMERO_BADGE":"XXXXXXXXXXXX","FLAG_COL_ANOMALIE_1":false,"FLAG_COL_ANOMALIE_2":false,"FLAG_COL_ANOMALIE_3":false,"FLAG_COL_ANOMALIE_4":false,"FLAG_COL_ANOMALIE_5":false,"FLAG_COL_ANOMALIE_6":false,"ID_COL_ANOMALIE_INTEGRATION":null,"QUANTITE_NETTE":0.0,"COL_CONTENANT__NUMERO_BADGE":"XXXXXXXXXXXX","COL_CONTENANT__ID_LOCAL":"XXXXXXXXXXXX","CONTENANT__LIBELLE_COURT":"Q 240 GA/J","ADRESSE__NUMERO_VOIE":7,"ADRESSE__NUMERO_VOIE_EXTENSION":null,"ADRESSE__VOIRIE__NOM_VOIE":"XXXXXXXXXX","ADRESSE__VOIRIE__COMMUNE__CODE_POSTAL":XXXXX,"ADRESSE__VOIRIE__COMMUNE__NOM_COMMUNE":"XXXXXXXXXXXX","MATIERE__LIBELLE":"Collecte sélective","UNITE_QUANTIFICATION__LIBELLE_COURT":null,"POINT_PRODUCTION__REFERENCE_INTERNE":null,"ADRESSE_NUMERO_VOIE":7,"ADRESSE_NUMERO_VOIE_EXTENSION":null,"ADRESSE_VOIRIE_NOM_VOIE":"XXXXXXXXXX","ADRESSE_VOIRIE_COMMUNE_CODE_POSTAL":XXXXX,"ADRESSE_VOIRIE_COMMUNE_NOM_COMMUNE":"XXXXXXXXXXXX","POINT_PRODUCTION_REFERENCE_INTERNE":null,"TypeContenant":"Q 240 GA/J","NumeroCuve":"XXXXXXXXXXXX","NumeroPuce":"XXXXXXXXXXXX","Dechet":"Collecte sélective","Contenant":"Q 240 GA/J N°01149EB...","ContenantExport":"Q 240 GA/J N°XXXXXXXXXXXX","Anomalie":false,"AnomalieTexte":"Non","QuantiteNette":"-","QuantiteNetteExport":"","ADRESSE_EN_LIGNE":"7  XXXXXXXXXX XXXXX XXXXXXXXXXXX","ADRESSE_EN_LIGNE_EXPORT":"7  XXXXXXXXXX XXXXX XXXXXXXXXXXX","VOIRIE_EN_LIGNE":"7  XXXXXXXXXX"},{"ID_DONNEE":300829,"DATE_DONNEE":"2023-01-26T06:07:08","NUMERO_BADGE":"XXXXXXXXXXXX","FLAG_COL_ANOMALIE_1":false,"FLAG_COL_ANOMALIE_2":false,"FLAG_COL_ANOMALIE_3":false,"FLAG_COL_ANOMALIE_4":false,"FLAG_COL_ANOMALIE_5":false,"FLAG_COL_ANOMALIE_6":false,"ID_COL_ANOMALIE_INTEGRATION":null,"QUANTITE_NETTE":0.0,"COL_CONTENANT__NUMERO_BADGE":"XXXXXXXXXXXX","COL_CONTENANT__ID_LOCAL":"XXXXXXXXXXXX","CONTENANT__LIBELLE_COURT":"Q 240 GA/J","ADRESSE__NUMERO_VOIE":7,"ADRESSE__NUMERO_VOIE_EXTENSION":null,"ADRESSE__VOIRIE__NOM_VOIE":"XXXXXXXXXX","ADRESSE__VOIRIE__COMMUNE__CODE_POSTAL":XXXXX,"ADRESSE__VOIRIE__COMMUNE__NOM_COMMUNE":"XXXXXXXXXXXX","MATIERE__LIBELLE":"Collecte sélective","UNITE_QUANTIFICATION__LIBELLE_COURT":null,"POINT_PRODUCTION__REFERENCE_INTERNE":null,"ADRESSE_NUMERO_VOIE":7,"ADRESSE_NUMERO_VOIE_EXTENSION":null,"ADRESSE_VOIRIE_NOM_VOIE":"XXXXXXXXXX","ADRESSE_VOIRIE_COMMUNE_CODE_POSTAL":XXXXX,"ADRESSE_VOIRIE_COMMUNE_NOM_COMMUNE":"XXXXXXXXXXXX","POINT_PRODUCTION_REFERENCE_INTERNE":null,"TypeContenant":"Q 240 GA/J","NumeroCuve":"XXXXXXXXXXXX","NumeroPuce":"XXXXXXXXXXXX","Dechet":"Collecte sélective","Contenant":"Q 240 GA/J N°01149EB...","ContenantExport":"Q 240 GA/J N°XXXXXXXXXXXX","Anomalie":false,"AnomalieTexte":"Non","QuantiteNette":"-","QuantiteNetteExport":"","ADRESSE_EN_LIGNE":"7  XXXXXXXXXX XXXXX XXXXXXXXXXXX","ADRESSE_EN_LIGNE_EXPORT":"7  XXXXXXXXXX XXXXX XXXXXXXXXXXX","VOIRIE_EN_LIGNE":"7  XXXXXXXXXX"},{"ID_DONNEE":288401,"DATE_DONNEE":"2023-01-19T04:57:26","NUMERO_BADGE":"XXXXXXXXXXXX","FLAG_COL_ANOMALIE_1":false,"FLAG_COL_ANOMALIE_2":false,"FLAG_COL_ANOMALIE_3":false,"FLAG_COL_ANOMALIE_4":false,"FLAG_COL_ANOMALIE_5":false,"FLAG_COL_ANOMALIE_6":false,"ID_COL_ANOMALIE_INTEGRATION":null,"QUANTITE_NETTE":0.0,"COL_CONTENANT__NUMERO_BADGE":"XXXXXXXXXXXX","COL_CONTENANT__ID_LOCAL":"XXXXXXXXXXXX","CONTENANT__LIBELLE_COURT":"Q 240 GA/J","ADRESSE__NUMERO_VOIE":7,"ADRESSE__NUMERO_VOIE_EXTENSION":null,"ADRESSE__VOIRIE__NOM_VOIE":"XXXXXXXXXX","ADRESSE__VOIRIE__COMMUNE__CODE_POSTAL":XXXXX,"ADRESSE__VOIRIE__COMMUNE__NOM_COMMUNE":"XXXXXXXXXXXX","MATIERE__LIBELLE":"Collecte sélective","UNITE_QUANTIFICATION__LIBELLE_COURT":null,"POINT_PRODUCTION__REFERENCE_INTERNE":null,"ADRESSE_NUMERO_VOIE":7,"ADRESSE_NUMERO_VOIE_EXTENSION":null,"ADRESSE_VOIRIE_NOM_VOIE":"XXXXXXXXXX","ADRESSE_VOIRIE_COMMUNE_CODE_POSTAL":XXXXX,"ADRESSE_VOIRIE_COMMUNE_NOM_COMMUNE":"XXXXXXXXXXXX","POINT_PRODUCTION_REFERENCE_INTERNE":null,"TypeContenant":"Q 240 GA/J","NumeroCuve":"XXXXXXXXXXXX","NumeroPuce":"XXXXXXXXXXXX","Dechet":"Collecte sélective","Contenant":"Q 240 GA/J N°01149EB...","ContenantExport":"Q 240 GA/J N°XXXXXXXXXXXX","Anomalie":false,"AnomalieTexte":"Non","QuantiteNette":"-","QuantiteNetteExport":"","ADRESSE_EN_LIGNE":"7  XXXXXXXXXX XXXXX XXXXXXXXXXXX","ADRESSE_EN_LIGNE_EXPORT":"7  XXXXXXXXXX XXXXX XXXXXXXXXXXX","VOIRIE_EN_LIGNE":"7  XXXXXXXXXX"},{"ID_DONNEE":276085,"DATE_DONNEE":"2023-01-12T04:27:16","NUMERO_BADGE":"XXXXXXXXXXXX","FLAG_COL_ANOMALIE_1":false,"FLAG_COL_ANOMALIE_2":false,"FLAG_COL_ANOMALIE_3":false,"FLAG_COL_ANOMALIE_4":false,"FLAG_COL_ANOMALIE_5":false,"FLAG_COL_ANOMALIE_6":false,"ID_COL_ANOMALIE_INTEGRATION":null,"QUANTITE_NETTE":0.0,"COL_CONTENANT__NUMERO_BADGE":"XXXXXXXXXXXX","COL_CONTENANT__ID_LOCAL":"XXXXXXXXXXXX","CONTENANT__LIBELLE_COURT":"Q 240 GA/J","ADRESSE__NUMERO_VOIE":7,"ADRESSE__NUMERO_VOIE_EXTENSION":null,"ADRESSE__VOIRIE__NOM_VOIE":"XXXXXXXXXX","ADRESSE__VOIRIE__COMMUNE__CODE_POSTAL":XXXXX,"ADRESSE__VOIRIE__COMMUNE__NOM_COMMUNE":"XXXXXXXXXXXX","MATIERE__LIBELLE":"Collecte sélective","UNITE_QUANTIFICATION__LIBELLE_COURT":null,"POINT_PRODUCTION__REFERENCE_INTERNE":null,"ADRESSE_NUMERO_VOIE":7,"ADRESSE_NUMERO_VOIE_EXTENSION":null,"ADRESSE_VOIRIE_NOM_VOIE":"XXXXXXXXXX","ADRESSE_VOIRIE_COMMUNE_CODE_POSTAL":XXXXX,"ADRESSE_VOIRIE_COMMUNE_NOM_COMMUNE":"XXXXXXXXXXXX","POINT_PRODUCTION_REFERENCE_INTERNE":null,"TypeContenant":"Q 240 GA/J","NumeroCuve":"XXXXXXXXXXXX","NumeroPuce":"XXXXXXXXXXXX","Dechet":"Collecte sélective","Contenant":"Q 240 GA/J N°01149EB...","ContenantExport":"Q 240 GA/J N°XXXXXXXXXXXX","Anomalie":false,"AnomalieTexte":"Non","QuantiteNette":"-","QuantiteNetteExport":"","ADRESSE_EN_LIGNE":"7  XXXXXXXXXX XXXXX XXXXXXXXXXXX","ADRESSE_EN_LIGNE_EXPORT":"7  XXXXXXXXXX XXXXX XXXXXXXXXXXX","VOIRIE_EN_LIGNE":"7  XXXXXXXXXX"}],"totalCount":8}
[2023-03-14 11:00:14][SCENARIO] Fin correcte du scénario

Merci pour ton éventuelle aide.

Jo

merci pour ton retour @Batijo et désolé du retard je n’ai pas eu de notifications pour ce message.

J’ai fait une mise à jour avec compteur pour les ordures ménagères et sélectives distincts, en plus du total général. (en test chez moi)

cependant comme je n’ai que les ordures ménagères chez moi, je n’ai pas le terme pour le tri sélectif dans le champs « MATIERE__LIBELLE ».
je t’ai adressé un message privé en ce sens pour compléter mon script.

je publierais une mise à jour une fois que j’aurais toutes les informations

Bonjour,

Désolé pas de notification non plus de message.

Merci pour ton aide.

Voilà ce que tu demandes :

"MATIERE__LIBELLE":"Collecte sélective"

J’ai mis dans mon premier message le log où on voit tout ce que le script récupère, si ça peut t’aider.

Merci encore !!

Jo

@Batijo Bonsoir,

c’est bon chez moi depuis 2 levées, je viens donc de mettre à jour mon premier message

ecocito_pav_count_ordures_menageres => Nombre d'ouvertures pour les ordures ménagères
ecocito_pav_count_ordures_selectives => Nombre d'ouvertures pour les ordures sélectives
ecocito_pav_ordures_menageres => Si cétait un dépot dans la borne des ordures ménagères, sera à 1, sinon 0
ecocito_pav_ordures_selectives => Si cétait un dépot dans la borne des ordures sélectives, sera à 1, sinon 0

il y a toujours le grand total, mais on peut avoir le total pour chaque type d’ouverture en point d’apport.
et au cas où j’ai ajouté 2 variables pour la dernière levée, savoir quel type c’était (ou les 2 types dans le même jour).

Merci de me faire un retour, être sûr que ça fonctionne bien chez toi aussi. merci :wink:

Bonjour,

Je viens de voir ton message.
Merci pour ton nouveau code.
Je teste tout ça dès que je peux, mais ça m’a l’air très bien.
Bravo.

Je te tiens au courant dès que j’ai testé.

Merci.

Jo

Bonjour,
Je découvre et j’essaie d’appliquer. Mais sans connaissance donc je dois faire une erreur qq part :confused:
J’ai ça quand je lance le scénario.

[2023-05-08 11:18:03][SCENARIO] -- Start : Scenario lance manuellement.
[2023-05-08 11:18:03][SCENARIO] - Exécution du sous-élément de type [action] : code
[2023-05-08 11:18:03][SCENARIO] Exécution d'un bloc code 
[2023-05-08 11:18:03][SCENARIO] syntax error, unexpected '<', expecting end of file
[2023-05-08 11:18:03][SCENARIO] Fin correcte du scénario

je viens d’enlever la première ligne du bloc code <?php qui ne sert à rien, désolé

si vous ne modifiez que ce qui est dans « ZONE EDITABLE » ça devrait le faire maintenant :wink:

Merci, mais c’est plutôt moi qui suis désolé de ne rien connaitre en codage :cold_sweat:
A priori les autres qui savent avaient enlevé cette ligne d’eux mêmes.
Ca marche bien mieux maintenant, je vais pouvoir jouer avec les variables.
Super pratique cette remontée d’info.
Ma dame vous fait un bisou :smiling_face_with_three_hearts:

Bonsoir,

Je viens de faire les tests et j’ai du adapter un peu le code notamment pour passer les nouvelles variables en « collecte » et non en « pav ».
(je n’ai d’ailleurs laissé que l’étape collecte car les deux autres ne servent à rien chez moi)

Ensuite, j’ai cherché un moment car au début ça ne fonctionnait pas, il faut deux « _ » dans « MATIERE__LIBELLE ».

Ensuite j’ai déplacé
« $orduresMenageres = false;
$orduresSelectives = false; »
dans le « foreach($json_collecte->data as $data) » juste avant les if.
Sinon les deux variables restent à "true"dès l’instant où il y en eu une parmi les levées. Or le but c’est de connaitre seulement l’état de la dernière.

Enfin j’ai dû mettre une fois
$count_collecte = 11;
à la place de $count_collecte = count($json_collecte->data);
pour rentrer dans le if du dessous sinon j’avais $count_collecte qui était égal à $old_count_collecte (qui était à 12) et donc le prog ne rentrait pas dans le if($old_count_collecte == 999 || ($old_count_collecte != $count_collecte))

Avec ces modifs tout fonctionne parfaitement, du moins chez moi avec ce que me renvoi ecocito.

Je sais pas si tout est clair dans ce que je viens d’écrire.

Je n’arrive pas à poster le code comme toi. Je le mets ici mais du coup ça modifie les ’ en <>. Tu peux reposter le code en bonne version si tu veux.

Le voici :

/*
batijo - version du 09/05/2023

Script de récupération des informations sur votre production de déchets
Il faut modifier les 3 informations de la zone éditable en dessous.
Ne touchez pas au reste sauf si vous savez ce que vous faites.

  • $service correspond au sous domaine.
    Exemple: vous vous connectez sur https://cergypontoise.ecocito.com/
    Mettez « cergypontoise »
  • $identifiant est votre mail
  • $mot_de_passe est … votre mot de passe

Le site est actualisé une fois par jour (dans la nuit) donc mettez ce scénario avec une programmation journalière.
Pour ma part c’est 31 11 * * * pour qu’il vérifie à 11H31 tous les jours.

Les variables que vous pourrez ensuite utiliser sont:
ecocito_pav_count => nombre d’ouverture en point d’apport volontaire depuis le début d’année
ecocito_pav_last_date => date de dernière ouverture
ecocito_dechetterie_count => nombre de passage en déchetterie depuis le début d’année
ecocito_dechetterie_last_date => date de dernier passage en déchetterie
ecocito_collecte_count => nombre de levée de container à domicile depuis le début d’année
ecocito_collecte_last_date => date de dernière levée
ecocito_collecte_count_ordures_menageres => Nombre d’ouvertures pour les ordures ménagères
ecocito_collecte_count_ordures_selectives => Nombre d’ouvertures pour les ordures sélectives
ecocito_collecte_ordures_menageres => Si cétait une levée d’ordures ménagères, sera à 1, sinon 0
ecocito_collecte_ordures_selectives => Si cétait une levée d’ordures sélectives, sera à 1, sinon 0

*/

/////////// ZONE EDITABLE ///////////

$service = ‹ xxxxxxxxxxxxxxxxx ›;
$identifiant = ‹ xxxxxxxxxxxxxxx ›;
$mot_de_passe = ‹ xxxxxxxxxxxxxxx ›;

///////// FIN ZONE EDITABLE /////////

///////////////////////////////////////////////////////////
/// NE PAS MODIFIER LE CODE SUIVANT SANS CONNAISSANCES ////
///////////////////////////////////////////////////////////

$subdomain = $service . ‹ .ecocito.com ›;
$url = ‹ https:// ›. $subdomain ;
$login_path = ‹ /Usager/Profil/Connexion?ReturnUrl=%2FUsager%2FAccueil ›;
$user_agent = ‹ Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 ›;
$cookie_file_path = ‹ /tmp/cookieecocito.txt ›;

// Collecte / levée de bac
$collecte_path = ‹ /Usager/Collecte/GetCollecte ›;
$collecte_query = ‹ ?skip=0&take=20&requireTotalCount=true › .
‹ &sort= › . urlencode(’[{« selector »:« DATE_DONNEE »,« desc »:true}]’) .
‹ &dateDebut= › . urlencode(date(« Y-m-d\TH:i:s.000\Z », strtotime(« last day of december last year 11 pm »))) .
‹ &dateFin= › . urlencode(date(« Y-m-d\TH:i:s.000\Z », strtotime(« now »))) .
‹ &charger=true&idMatiere=-1 › .
‹ &_= › . time();

// LOGIN
$scenario->setLog("################################## ETAPE 1 - LOGIN ###################################");
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url . $login_path);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, « Identifiant= » . $identifiant . « &MotDePasse= » . $mot_de_passe );

$headers = array();
$headers[] = ‹ Content-Type: application/x-www-form-urlencoded ›;
$headers[] = 'User-Agent: ’ . $user_agent;
$headers[] = 'Origin: ’ . $url;
$headers[] = 'Referer: ’ . $url . $login_path;

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);

if (curl_errno($ch)) {
$scenario->setLog("Error curl : " . curl_error($ch));
}

$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$scenario->setLog("login curl http code : " . $http_code);

if($http_code != 200)
$scenario->stop();

sleep(3);
$scenario->setLog("################################# ETAPE 2 - COLLECTE #################################");
$scenario->setLog("Query: " . $url . $collecte_path . $collecte_query);
$json_collecte = curl_ecocito($url . $collecte_path . $collecte_query, $user_agent, $cookie_file_path);
$scenario->setLog("curl result : " . $json_collecte);

////////////// ENREGISTREMENT DES DONNEES //////////////

$json_collecte = json_decode($json_collecte);
$count_collecte = count($json_collecte->data);
$old_count_collecte = $scenario->getData(‹ ecocito_collecte_count ›, false, 999);
$count_collecte_ordures_menageres = 0;
$count_collecte_ordures_selectives = 0;

if($old_count_collecte == 999 || ($old_count_collecte != $count_collecte)) {
$scenario->setData(‹ ecocito_collecte_count ›, $count_collecte);
$scenario->setLog($count_collecte);
if($count_collecte > 0)
$scenario->setData(‹ ecocito_collecte_last_date ›, str_replace(« T », " à ", $json_collecte->data[0]->DATE_DONNEE));

	foreach($json_collecte->data as $data) {
        $orduresMenageres = false;
	    $orduresSelectives = false;
		if($data->MATIERE__LIBELLE == "Ordures ménagères") {
			$orduresMenageres = true;
			$count_collecte_ordures_menageres++;
            
		}
		if($data->MATIERE__LIBELLE == "Collecte sélective") {
			$orduresSelectives = true;
			$count_collecte_ordures_selectives++;
            
        }
	}
    
	$scenario->setData('ecocito_collecte_ordures_menageres', ($orduresMenageres ? 1 : 0));
	$scenario->setData('ecocito_collecte_ordures_selectives', ($orduresSelectives ? 1 : 0));
	$scenario->setData('ecocito_collecte_count_ordures_menageres', $count_collecte_ordures_menageres);
	$scenario->setData('ecocito_collecte_count_ordures_selectives', $count_collecte_ordures_selectives);

}

function curl_ecocito($q, $user_agent, $cookie_file_path) {
global $scenario;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $q);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$headers = array();
$headers[] = 'User-Agent: ' . $user_agent;
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$response = curl_exec($ch);
if (curl_errno($ch))
	$scenario->setLog("Error curl : " . curl_error($ch));

curl_close($ch);
return $response;

}

Merci encore beaucoup à toi pour ton aide précieuse !!!

Jo