public function parse($fraktion_id, $wahlperiode_id)
 {
     $fraktion_id = IntVal($fraktion_id);
     $wahlperiode_id = IntVal($wahlperiode_id);
     if (SITE_CALL_MODE != "cron") {
         echo "- Fraktion {$fraktion_id}\n";
     }
     $html_details = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_fraktionen_detail.jsp?risid={$fraktion_id}&periodeid={$wahlperiode_id}");
     $daten = new Fraktion();
     $daten->id = $fraktion_id;
     if (preg_match("/introheadline\">(.*)<\\/h3/siU", $html_details, $matches)) {
         var_dump($matches);
         $daten->name = trim(str_replace("&nbsp;", " ", $matches[1]));
     }
     $aenderungen = "";
     /** @var Fraktion $alter_eintrag */
     $alter_eintrag = Fraktion::model()->findByPk($fraktion_id);
     $changed = true;
     if ($alter_eintrag) {
         $changed = false;
         if ($alter_eintrag->name != $daten->name) {
             $aenderungen .= "Name: " . $alter_eintrag->name . " => " . $daten->name . "\n";
         }
         if ($aenderungen != "") {
             $changed = true;
         }
     }
     if ($changed) {
         if ($aenderungen == "") {
             $aenderungen = "Neu angelegt\n";
         }
     }
     if ($alter_eintrag) {
         $alter_eintrag->setAttributes($daten->getAttributes(), false);
         if (!$alter_eintrag->save()) {
             echo "Fraktion 1\n";
             var_dump($alter_eintrag->getErrors());
             die("Fehler");
         }
         $daten = $alter_eintrag;
     } else {
         if (!$daten->save()) {
             echo "Fraktion 2\n";
             var_dump($daten->getErrors());
             die("Fehler");
         }
     }
     if ($aenderungen != "") {
         echo "Fraktion {$fraktion_id}: Verändert: " . $aenderungen . "\n";
     }
     if ($aenderungen != "") {
         $aend = new RISAenderung();
         $aend->ris_id = $daten->id;
         $aend->ba_nr = null;
         $aend->typ = RISAenderung::$TYP_STADTRAT_FRAKTION;
         $aend->datum = new CDbExpression("NOW()");
         $aend->aenderungen = $aenderungen;
         $aend->save();
     }
 }
 public function run($args)
 {
     for ($i = ord('A'); $i <= ord('Z'); $i++) {
         $txt = RISTools::load_file('http://stadt-muenchen.net/strassen/index.php?name=' . chr($i));
         $txt = explode("<table class='full' border='0'>", $txt);
         $txt = explode("</table>", $txt[1]);
         preg_match_all("/<tr><td>(.*)<\\/tr>/siuU", $txt[0], $matches);
         foreach ($matches[1] as $match) {
             $y = explode('</a></td><td>', $match);
             $strassenname = preg_replace("/(s)tra(ß|ss)e\$/siu", "\\1tr.", trim(strip_tags($y[0])));
             $plz = trim(strip_tags($y[1]));
             $str = Strasse::model()->findByAttributes(["name" => $strassenname]);
             if (!$str) {
                 echo "Neu: " . $plz . " - " . $strassenname . "\n";
                 $str = new Strasse();
                 $str->name = $strassenname;
                 $str->plz = $plz;
                 $str->osm_ref = 0;
                 if (!$str->save()) {
                     var_dump($str->getErrors());
                 }
             }
         }
     }
 }
 public function parseAlle()
 {
     $text = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_referenten_trefferliste.jsp?nav=1");
     $txt = explode("<!-- ergebnisreihen -->", $text);
     $txt = explode("<div class=\"ergebnisfuss\">", $txt[1]);
     preg_match_all("/ris_referenten_detail\\.jsp\\?risid=(?<id>[0-9]+)[\"'& ][^>]*>(?<name>[^<]+)<.*target=\"_blank\">(?<referat>[^<]+)</siU", $txt[0], $matches);
     for ($i = 0; $i < count($matches["name"]); $i++) {
         $name = trim($matches["name"][$i]);
         $name = str_replace("&nbsp;", " ", $name);
         $name = preg_replace("/ *(\n *)+/siu", "\n", $name);
         $x = explode("\n", $name);
         $y = explode(", ", $x[1]);
         $name = trim($x[0]) . " " . trim($y[1]) . " " . trim($y[0]);
         $id = IntVal($matches["id"][$i]);
         $referat_name = $matches["referat"][$i];
         /** @var StadtraetIn $str */
         $str = StadtraetIn::model()->findByPk($id);
         if ($str) {
             if ($str->name != $name) {
                 RISTools::send_email(Yii::app()->params['adminEmail'], "ReferentIn Änderung", $str->name . " => " . $name, null, "system");
                 $str->name = $name;
                 $str->save();
             }
         } else {
             $str = new StadtraetIn();
             $str->name = $name;
             $str->id = $id;
             $str->referentIn = 1;
             $str->save();
         }
         /** @var Referat $referat */
         $referat = Referat::model()->findByAttributes(["name" => $referat_name]);
         if (!$referat) {
             RISTools::send_email(Yii::app()->params['adminEmail'], "Referat nicht gefunden", $referat_name, null, "system");
             return;
         }
         $gefunden = false;
         foreach ($str->stadtraetInnenReferate as $ref) {
             if ($ref->referat_id == $referat->id) {
                 $gefunden = true;
             }
         }
         if (!$gefunden) {
             $zuo = new StadtraetInReferat();
             $zuo->referat_id = $referat->id;
             $zuo->stadtraetIn_id = $str->id;
             $zuo->save();
             RISTools::send_email(Yii::app()->params['adminEmail'], "Neue ReferentInnen/Referat-Zuordnung", $referat_name . " / " . $str->name, null, "system");
         }
     }
 }
Esempio n. 4
0
 public static function parse_stadtrat_gremien($ris_id)
 {
     $ris_id = IntVal($ris_id);
     echo "- Gremium {$ris_id}\n";
     $html_details = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_gremien_detail.jsp?risid=" . $ris_id);
     $daten = new Gremium();
     $daten->id = $ris_id;
     $daten->datum_letzte_aenderung = new CDbExpression('NOW()');
     $daten->ba_nr = null;
     if (preg_match("/introheadline\">([^>]+)<\\/h3/siU", $html_details, $matches)) {
         $daten->name = $matches[1];
     }
     if (preg_match("/rzel:.*detail_div\">([^>]*)<\\//siU", $html_details, $matches)) {
         $daten->kuerzel = $matches[1];
     }
     if (preg_match("/Gremientyp:.*detail_div\">([^>]*)<\\//siU", $html_details, $matches)) {
         $daten->gremientyp = $matches[1];
     }
     if (preg_match("/Referat:.*detail_div\">([^>]*)<\\//siU", $html_details, $matches)) {
         $daten->referat = $matches[1];
     }
     foreach ($daten as $key => $val) {
         $daten[$key] = $val === null ? null : html_entity_decode(trim($val), ENT_COMPAT, "UTF-8");
     }
     $aenderungen = "";
     /** @var Gremium $alter_eintrag */
     $alter_eintrag = Gremium::model()->findByPk($ris_id);
     $changed = true;
     if ($alter_eintrag) {
         $changed = false;
         if ($alter_eintrag->name != $daten->name) {
             $aenderungen .= "Name: " . $alter_eintrag->name . " => " . $daten->name . "\n";
         }
         if ($alter_eintrag->kuerzel != $daten->kuerzel) {
             $aenderungen .= "Kürzel: " . $alter_eintrag->kuerzel . " => " . $daten->kuerzel . "\n";
         }
         if ($alter_eintrag->gremientyp != $daten->gremientyp) {
             $aenderungen .= "Gremientyp: " . $alter_eintrag->gremientyp . " => " . $daten->gremientyp . "\n";
         }
         if ($alter_eintrag->referat != $daten->referat) {
             $aenderungen .= "Referat: " . $alter_eintrag->referat . " => " . $daten->referat . "\n";
         }
         if ($aenderungen != "") {
             $changed = true;
         }
     }
     if ($changed) {
         if ($alter_eintrag) {
             $alter_eintrag->copyToHistory();
             $alter_eintrag->setAttributes($daten->getAttributes());
             if (!$alter_eintrag->save()) {
                 echo "Gremium 1";
                 var_dump($alter_eintrag->getErrors());
                 die("Fehler");
             }
             $daten = $alter_eintrag;
         } else {
             if (!$daten->save()) {
                 echo "Gremium 2";
                 var_dump($daten->getErrors());
                 die("Fehler");
             }
         }
         $aend = new RISAenderung();
         $aend->ris_id = $daten->id;
         $aend->ba_nr = null;
         $aend->typ = RISAenderung::$TYP_STADTRAT_GREMIUM;
         $aend->datum = new CDbExpression("NOW()");
         $aend->aenderungen = $aenderungen;
         $aend->save();
     }
 }
 public function parse($ba_nr)
 {
     $ba_nr = IntVal($ba_nr);
     if (SITE_CALL_MODE != "cron") {
         echo "- BA {$ba_nr}\n";
     }
     /** @var Bezirksausschuss $ba */
     $ba = Bezirksausschuss::model()->findByPk($ba_nr);
     $ba_details = RISTools::load_file("http://www.ris-muenchen.de/RII/BA-RII/ba_bezirksausschuesse_details.jsp?Id=" . $ba->ris_id);
     preg_match("/Wahlperiode.*detail_div\">(?<wahlperiode>[^<]*)</siuU", $ba_details, $matches);
     $wahlperiode = $matches["wahlperiode"];
     $x = explode('<!-- tabellenkopf -->', $ba_details);
     $x = explode('<!-- seitenfuss -->', $x[1]);
     $gefundene_fraktionen = [];
     preg_match_all("/ba_mitglieder_details_mitgliedschaft\\.jsp\\?Id=(?<mitglied_id>[0-9]+)&amp;Wahlperiode=(?<wahlperiode>[0-9]+)[\"'& ]>(?<name>[^<]*)<.*tdborder\">(?<mitgliedschaft>[^<]*)<\\/td>.*tdborder[^>]*>(?<fraktion>[^<]*) *<\\/td>.*notdborder[^>]*>(?<funktion>[^<]*) *<\\/td.*<\\/tr/siU", $x[0], $matches);
     for ($i = 0; $i < count($matches[1]); $i++) {
         $fraktion_name = trim(html_entity_decode($matches["fraktion"][$i]));
         $name = str_replace("&nbsp;", " ", $matches["name"][$i]);
         $name = trim(str_replace(["Herr", "Frau"], [" ", " "], $name));
         if ($fraktion_name == "") {
             $fraktion_name = "Parteifrei";
         }
         /** @var StadtraetIn $strIn */
         $strIn = StadtraetIn::model()->findByPk($matches["mitglied_id"][$i]);
         if (!$strIn) {
             echo "Neu anlegen: " . $matches["mitglied_id"][$i] . " - " . $name . " (" . $fraktion_name . ")\n";
             $strIn = new StadtraetIn();
             $strIn->name = $name;
             $strIn->id = $matches["mitglied_id"][$i];
             $strIn->referentIn = 0;
             $x = explode(".", $matches["mitgliedschaft"][$i]);
             $strIn->gewaehlt_am = $x[2] . "-" . $x[1] . "-" . $x[0];
             $strIn->save();
         }
         /** @var Fraktion|null $fraktion */
         $fraktion = Fraktion::model()->findByAttributes(["ba_nr" => $ba_nr, "name" => $fraktion_name]);
         if (!$fraktion) {
             echo "Lege an: " . $fraktion_name . "\n";
             $min = Yii::app()->db->createCommand()->select("MIN(id)")->from("fraktionen")->queryColumn()[0] - 1;
             if ($min > 0) {
                 $min = -1;
             }
             $fraktion = new Fraktion();
             $fraktion->id = $min;
             $fraktion->name = $fraktion_name;
             $fraktion->ba_nr = $ba_nr;
             $fraktion->save();
         }
         $gefunden = false;
         foreach ($strIn->stadtraetInnenFraktionen as $strfrakt) {
             if ($strfrakt->fraktion_id == $fraktion->id) {
                 $gefunden = true;
                 $von_pre = $strfrakt->datum_von;
                 $bis_pre = $strfrakt->datum_bis;
                 if (preg_match("/^von (?<von_tag>[0-9]+)\\.(?<von_monat>[0-9]+)\\.(?<von_jahr>[0-9]+) bis (?<bis_tag>[0-9]+)\\.(?<bis_monat>[0-9]+)\\.(?<bis_jahr>[0-9]+)\$/", $matches["mitgliedschaft"][$i], $mitgliedschaft_matches)) {
                     $strfrakt->datum_von = $mitgliedschaft_matches["von_jahr"] . "-" . $mitgliedschaft_matches["von_monat"] . "-" . $mitgliedschaft_matches["von_tag"];
                     $strfrakt->datum_bis = $mitgliedschaft_matches["bis_jahr"] . "-" . $mitgliedschaft_matches["bis_monat"] . "-" . $mitgliedschaft_matches["bis_tag"];
                 } elseif (preg_match("/^seit (?<von_tag>[0-9]+)\\.(?<von_monat>[0-9]+)\\.(?<von_jahr>[0-9]+)\$/", $matches["mitgliedschaft"][$i], $mitgliedschaft_matches)) {
                     $strfrakt->datum_von = $mitgliedschaft_matches["von_jahr"] . "-" . $mitgliedschaft_matches["von_monat"] . "-" . $mitgliedschaft_matches["von_tag"];
                     $strfrakt->datum_bis = null;
                 }
                 if ($von_pre != $strfrakt->datum_von || $bis_pre != $strfrakt->datum_bis) {
                     $strfrakt->save();
                     echo $strIn->getName() . ": " . $von_pre . "/" . $bis_pre . " => " . $strfrakt->datum_von . "/" . $strfrakt->datum_bis . "\n";
                 }
             }
         }
         if (!$gefunden) {
             $strfrakt = new StadtraetInFraktion();
             $strfrakt->fraktion_id = $fraktion->id;
             $strfrakt->stadtraetIn_id = $strIn->id;
             $strfrakt->wahlperiode = $wahlperiode;
             $strfrakt->mitgliedschaft = $matches["mitgliedschaft"][$i];
             if (preg_match("/^von (?<von_tag>[0-9]+)\\.(?<von_monat>[0-9]+)\\.(?<von_jahr>[0-9]+) bis (?<bis_tag>[0-9]+)\\.(?<bis_monat>[0-9]+)\\.(?<bis_jahr>[0-9]+)\$/", $matches["mitgliedschaft"][$i], $mitgliedschaft_matches)) {
                 $strfrakt->datum_von = $mitgliedschaft_matches["von_jahr"] . "-" . $mitgliedschaft_matches["von_monat"] . "-" . $mitgliedschaft_matches["von_tag"];
                 $strfrakt->datum_bis = $mitgliedschaft_matches["bis_jahr"] . "-" . $mitgliedschaft_matches["bis_monat"] . "-" . $mitgliedschaft_matches["bis_tag"];
             } elseif (preg_match("/^seit (?<von_tag>[0-9]+)\\.(?<von_monat>[0-9]+)\\.(?<von_jahr>[0-9]+)\$/", $matches["mitgliedschaft"][$i], $mitgliedschaft_matches)) {
                 $strfrakt->datum_von = $mitgliedschaft_matches["von_jahr"] . "-" . $mitgliedschaft_matches["von_monat"] . "-" . $mitgliedschaft_matches["von_tag"];
                 $strfrakt->datum_bis = null;
             }
             $strfrakt->save();
         }
         if (!isset($gefundene_fraktionen[$matches["mitglied_id"][$i]])) {
             $gefundene_fraktionen[$matches["mitglied_id"][$i]] = [];
         }
         $gefundene_fraktionen[$matches["mitglied_id"][$i]][] = $fraktion->id;
     }
     foreach ($gefundene_fraktionen as $strIn => $fraktionen) {
         //SELECT a.* FROM `fraktionen` a JOIN stadtraetInnen_fraktionen b ON a.id = b.fraktion_id WHERE b.stadtraetIn_id = 3314069 AND a.ba_nr = 18 AND b.fraktion_id NOT IN (-88)
         $sql = 'DELETE FROM b USING `fraktionen` a JOIN `stadtraetInnen_fraktionen` b ON a.id = b.fraktion_id WHERE ';
         $frakts = implode(", ", array_map('IntVal', $fraktionen));
         $sql .= 'b.stadtraetIn_id = ' . IntVal($strIn) . ' AND a.ba_nr = ' . IntVal($ba_nr) . ' AND b.fraktion_id NOT IN (' . $frakts . ')';
         if (Yii::app()->db->createCommand($sql)->execute() > 0) {
             echo 'Fraktionen gelöscht bei: ' . $strIn . "\n";
         }
     }
 }
 public function parseSeite($seite, $first)
 {
     $text = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_mitglieder_trefferliste.jsp?txtPosition={$seite}");
     $txt = explode("<!-- tabellenkopf -->", $text);
     if (!isset($txt[1])) {
         if (SITE_CALL_MODE != "cron") {
             echo "- leer\n";
         }
         return [];
     } elseif ($first) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "StadträTinnenUpdate VOLL", "Erste Seite voll: {$seite}", null, "system");
     }
     $txt = explode("<div class=\"ergebnisfuss\">", $txt[1]);
     preg_match_all("/ris_mitglieder_detail\\.jsp\\?risid=([0-9]+)[\"'& ]/siU", $txt[0], $matches);
     for ($i = count($matches[1]) - 1; $i >= 0; $i--) {
         if (!in_array($matches[1][$i], $this->bearbeitete_stadtraetInnen)) {
             try {
                 $this->parse($matches[1][$i]);
             } catch (Exception $e) {
                 RISTools::send_email(Yii::app()->params['adminEmail'], "StadträTinnenUpdate Error", $matches[1][$i] . $e, null, "system");
             }
             $this->bearbeitete_stadtraetInnen[] = $matches[1][$i];
         }
     }
     return $matches[1];
 }
 public function parseSeite($seite, $first)
 {
     if (SITE_CALL_MODE != "cron") {
         echo "BA-Initiativen Seite {$seite}\n";
     }
     $text = RISTools::load_file("http://www.ris-muenchen.de/RII/BA-RII/ba_initiativen.jsp?Trf=n&Start={$seite}");
     $txt = explode("<!-- tabellenkopf -->", $text);
     $txt = explode("<div class=\"ergebnisfuss\">", $txt[1]);
     preg_match_all("/ba_initiativen_details\\.jsp\\?Id=([0-9]+)[\"'& ]/siU", $txt[0], $matches);
     if ($first && count($matches[1]) > 0) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "BA-Initiativen VOLL", "Erste Seite voll: {$seite}", null, "system");
     }
     for ($i = count($matches[1]) - 1; $i >= 0; $i--) {
         try {
             $this->parse($matches[1][$i]);
         } catch (Exception $e) {
             echo " EXCEPTION! " . $e . "\n";
         }
     }
     return $matches[1];
 }
 public function parseSeite($seite, $first)
 {
     if (SITE_CALL_MODE != "cron") {
         echo "BA-Gremien Seite {$seite}\n";
     }
     $text = RISTools::load_file("http://www.ris-muenchen.de/RII/BA-RII/ba_gremien.jsp?selWahlperiode=" . static::$WAHLPERIODE_ID . "&Trf=n&Start={$seite}");
     $txt = explode("<!-- tabellenkopf -->", $text);
     $txt = explode("<div class=\"ergebnisfuss\">", $txt[1]);
     preg_match_all("/ba_gremien_details\\.jsp\\?Id=(?<id>[0-9]+)[\"'& ]/siU", $txt[0], $matches);
     if ($first && count($matches[1]) > 0) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "BA-Gremien VOLL", "Erste Seite voll: {$seite}", null, "system");
     }
     for ($i = count($matches[1]) - 1; $i >= 0; $i--) {
         $this->parse($matches[1][$i], static::$WAHLPERIODE_ID);
     }
     return $matches[1];
 }
 public function parseSeite($seite, $alle = false)
 {
     if (SITE_CALL_MODE != "cron") {
         echo "BA-Termin Seite {$seite}\n";
     }
     $add = $alle ? "" : "&txtVon=" . date("d.m.Y", time() - 24 * 3600 * 180) . "&txtBis=" . date("d.m.Y", time() + 24 * 3600 * 356 * 2);
     $text = RISTools::load_file("http://www.ris-muenchen.de/RII/BA-RII/ba_sitzungen.jsp?Start={$seite}" . $add);
     $txt = explode("<table class=\"ergebnistab\" ", $text);
     if (count($txt) == 1) {
         return;
     }
     $txt = explode("<!-- tabellenfuss", $txt[1]);
     preg_match_all("/ba_sitzungen_details\\.jsp\\?Id=([0-9]+)[\"'& ]/siU", $txt[0], $matches);
     for ($i = count($matches[1]) - 1; $i >= 0; $i--) {
         $this->parse($matches[1][$i]);
     }
     sleep(5);
     // Scheint ziemlich aufwändig auf der RIS-Seite zu sein, mal lieber nicht überlasten :)
 }
 public function parseSeite($seite, $first)
 {
     $text = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_antrag_trefferliste.jsp?txtPosition={$seite}");
     $txt = explode("<!-- ergebnisreihen -->", $text);
     if (!isset($txt[1])) {
         if (SITE_CALL_MODE != "cron") {
             echo "- nichts\n";
         }
         return [];
     }
     $txt = explode("<div class=\"ergebnisfuss\">", $txt[1]);
     preg_match_all("/ris_antrag_detail.jsp\\?risid=([0-9]+)[\"'& ]/siU", $txt[0], $matches);
     if ($first && count($matches[1]) > 0) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "Stadtratsantrag VOLL", "Erste Seite voll: {$seite}", null, "system");
     }
     for ($i = count($matches[1]) - 1; $i >= 0; $i--) {
         try {
             $this->parse($matches[1][$i]);
         } catch (Exception $e) {
             echo " EXCEPTION! " . $e . "\n";
         }
     }
     return $matches[1];
 }
 public function parseSeite($seite, $first, $alle = false)
 {
     $add = $alle ? "" : "&txtVon=" . date("d.m.Y", time() - 24 * 3600 * 180) . "&txtBis=" . date("d.m.Y", time() + 24 * 3600 * 356 * 2);
     $text = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_sitzung_trefferliste.jsp?txtPosition={$seite}" . $add);
     $txt = explode("<!-- ergebnistabellen-bereich -->", $text);
     if ($seite > 4790 && count($txt) == 1) {
         return;
     }
     if (count($txt) == 1) {
         var_dump($txt);
     }
     $txt = explode("<!-- tabellenfuss", $txt[1]);
     preg_match_all("/ris_sitzung_detail\\.jsp\\?risid=([0-9]+)[\"'& ]/siU", $txt[0], $matches);
     if ($first && count($matches[1]) > 0) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "Stadtratstermin VOLL", "Erste Seite voll: {$seite}", null, "system");
     }
     for ($i = count($matches[1]) - 1; $i >= 0; $i--) {
         $this->parse($matches[1][$i]);
     }
     sleep(5);
     // Scheint ziemlich aufwändig auf der RIS-Seite zu sein, mal lieber nicht überlasten :)
 }