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
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
Mon cas d’utilisation:
J’ai un autre scénario en parallèle avec ces déclencheurs:
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