-
Notifications
You must be signed in to change notification settings - Fork 21
Pentru dezvoltatorii noi
Acesta este un document pentru dezvoltatorii noi în proiect, care explică în mare care sunt componentele implicate și cum să testezi o schimbare.
Important: Dacă vrei să dezvolți cod pentru harta politicii, trebuie să te înscrii în hartapoliticii-dev și să anunți acolo ce vrei să faci.
Harta politicii are următoarele componente mari:
Codul șade în /www/
. Este, făcut în PHP.
Baza de date din spatele lui este în MySQL și structura se găsește în /db/
.
Dacă vrei să rulezi site-ul local:
-
Trebuie să ai un server de web care suportă php (Apache is most common) și cu un server de MySQL în spate. Eu am folosit multă vreme MAMP, dar fiecare folosește ce are.
-
După ce le ai instalate, crează o bază de date
hartapoliticii_pistruiatul
și importă ce este în/db
în ea. -
Apoi pune-ți folderul
www
somehow să fie servit de serverul tău local. -
Copiază sau redenumește
/www/secret/db_user.php.sample
în/www/secret/db_user.php
.
În acest moment în /db/hartapoliticii_mock_data.sql
sunt câteva date pentru Crin Antonescu și ăsta va fi singurul lucru pe care îl veți vedea local. Dacă credeți că este nevoie de mai multe date pentru dezvoltare locală spuneți și le putem adăuga pe măsură ce descoperim de ce anume este nevoie.
- Arhitectură frontend - citește dacă vrei să faci schimbări în site.
Este organizat ca un pipeline, cel mai ușor poți vedea exact ce rulează în scriptul din /tools/cdep.sh.
Pașii sunt următorii (pentru cdep, dar sunt la fel și pentru senat, doar implementarea este un pic diferită):
-
/python/src/ro/vivi/cdep_crawler/1_get_votes_pages.py
- aduce toate paginile care conțin voturi de pe cdep.ro într-un director local. -
/python/src/ro/vivi/cdep_crawler/2_parse_votes.py
- parsează paginile de la scriptul anterior și extrage legile, voturile, apartenența la partid și agreghează doar aceste date într-un format mai simplu, într-un singur fișier. -
/java/src/ro/vivi/pistruiatul/Main.java
- știe să citească formatul produs de punctul doi și să creeze un model al problemei în memorie: toate legile, toate voturile, agregate per deputat sau senator, agregate pe partid, etc. Când termină de citit formatul, scriptul pune toate rezultatele în baza de date. Dacă vrei să înțelegi pasul ăsta cel mai bine este să te uiți la VotesImporter.run().
În acest moment pașii 1 și 2 pot rula local fără nici o schimbare, pasul 3 va da erori pentur că face error checking agresiv și se oprește când ceva nu este în regulă (nu găsește partide, nu găsește oameni pe care se așteaptă să existe în baza de date).
TODO: scripturile python presupun că anumite librării sunt deja instalate pe mașina pe care rulează (un exemplu ar fi BeautifulSoup ). Asta ar trebui documentat și poate semi-automatizat.
Pentru toate tag-urile și știrile la zi de pe prima pagină, o dată la șase ore rulează un script care crawluiește mediafax și hotnews, identifică personajele politice din știrile respective, și le pune în baza de date.
Și aceste este organizat ca un pipeline cu doi pași (rulat din /tools/news_parser.sh).
-
src/ro/vivi/news_parser/rss_parse_mediafax.py
- preia RSS feed-ul mediafax și transformă fiecare articol într-un fișier într-un cache local pe disk, într-un XML local. -
src/ro/vivi/news_parser/entity_extractor.py
- citește XML-ul local și rulează niște analize pe text - identifică personajele politice, încearcă să identifice fapte despre aceștia - și apoi publică rezultatele pe hartapoliticii.ro
Dacă în entity_extractor.py
editați BASE_URL='http://localhost' atunci puteți să vedeți rezultatele acestui parsing de știri la voi local, chiar dacă singura persoană identificată în știri va fi Crin Antonescu. Dacă adăugați mai mulți oameni în baza de date, atunci va identifica mai mulți oameni.
Din câte văd eu, cel mai bine ar fi să aveți instalat:
- Python 2.7.x. Parserul dă niște erori cu python2.6 și nu am avut timp să le identific.
- python-dateutil-1.5 - python-dateutil-2.0 este pentru python3 și dă erori dacă e folosit cu python2.x.
- BeautifulSoup 3.2.x