ventilaar
/
twitter_zuil
Archived
1
Fork 0

database model af, moderator create account af

This commit is contained in:
ventilaar 2020-10-19 17:58:20 +02:00
parent 5c03e8064d
commit 35aa849680
15 changed files with 174 additions and 43 deletions

View File

@ -0,0 +1 @@
<mxfile host="Electron" modified="2020-10-19T13:30:06.202Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.6.2 Chrome/83.0.4103.122 Electron/9.2.0 Safari/537.36" etag="kfalz6tyMa85AB49RY_T" version="13.6.2" type="device"><diagram id="JNM6W-7HF5Xyfk11UdC0" name="Page-1">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</diagram></mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

View File

@ -0,0 +1,38 @@
CREATE TABLE locaties(
locatieid serial PRIMARY KEY,
naam varchar(64) NOT NULL
);
CREATE TABLE moderators(
moderatorid serial PRIMARY KEY,
naam varchar(64) NOT NULL,
hash varchar(255),
lastseen timestamp
);
CREATE TABLE twitterberichten(
twitterid bigint PRIMARY KEY,
datumpublished date NOT NULL,
tijdpublished time NOT NULL
);
CREATE TABLE berichten(
berichtid serial PRIMARY KEY,
bericht varchar(140) NOT NULL,
datumontvangen date NOT NULL,
tijdontvangen time NOT NULL,
naamposter varchar(32),
moderatorid int,
datumgekeurd date,
tijdgekeurd time,
locatieid int NOT NULL,
twitterid bigint,
FOREIGN KEY (twitterid) REFERENCES twitterberichten(twitterid),
FOREIGN KEY (locatieid) REFERENCES locaties(locatieid),
FOREIGN KEY (moderatorid) REFERENCES moderators(moderatorid)
);
INSERT INTO locaties(naam) VALUES ('Utrecht Centraal');
INSERT INTO locaties(naam) VALUES ('Amsterdam Centraal');
INSERT INTO locaties(naam) VALUES ('Rotterdam Centraal');
INSERT INTO moderators(naam) VALUES ('administrator');

View File

@ -0,0 +1 @@
<mxfile host="Electron" modified="2020-10-19T13:26:46.696Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.6.2 Chrome/83.0.4103.122 Electron/9.2.0 Safari/537.36" etag="Hvc4sliGyR4v6YbtPxLC" version="13.6.2" type="device"><diagram id="JNM6W-7HF5Xyfk11UdC0" name="Page-1">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</diagram></mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 KiB

View File

@ -0,0 +1 @@
<mxfile host="Electron" modified="2020-10-19T13:29:16.209Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.6.2 Chrome/83.0.4103.122 Electron/9.2.0 Safari/537.36" etag="Wm12LA_wLMCQzkUFTVvu" version="13.6.2" type="device"><diagram id="JNM6W-7HF5Xyfk11UdC0" name="Page-1">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</diagram></mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

View File

@ -1,4 +1,40 @@
# twitter_zuil
# NS-Consumenten zuil (casus)
De Nederlandse Spoorwegen vinden het erg belangrijk dat zij goed kunnen communiceren met hun klanten én van hun klanten goede of minder goede ervaringen horen. Daarom houden ze van tijd tot tijd een enquête onder de reizigers. Het nadeel van een enquête is dat het lang duurt voordat je de resultaten krijgt. De NS heeft gemerkt dat Twitter veel sneller werkt. Het lijkt de directie daarom een goed plan dat klanten hun opmerkingen/complimenten via een computer, aanwezig op elk het station, kunnen invoeren en dat deze opmerkingen dan zichtbaar worden in die stationshal.
De directie is echter ook wel een beetje bang voor Twitter, want men heeft gemerkt dat het ook gebruikt kan worden als uitlaatklep voor ontevreden reizigers. Daarom is het belangrijk dat de inhoud van de Tweets worden gelezen voordat ze worden gepost op Twitter en zichtbaar worden in de stationshal. Op deze manier kunnen respectloze uitingen en bijvoorbeeld schuttingstaal eruit gefilterd worden.
Opdracht
De opdracht die jij krijg om dit uit te werken, luidt: ontwerp en bouw een systeem met behulp van Twitter waarbij de mening van klanten zichtbaar wordt voor andere reizigers.
## Eisen voor het systeem
Om dit idee concreet te maken, denkt men aan de volgende systeemeisen (requirements):
1. Op een computerzuil (module 1) op een willekeurig NS-station kunnen mensen hun berichtje (hun Tweet) van maximaal 140 karakters invoeren. Dit bericht wordt in een database opgeslagen met de datum en een eventuele naam. Als deze leeg is wordt de naam "anoniem" ingevuld.
2. Daarna krijgt een moderator van de NS het berichtje te zien en diegene kan kiezen voor “accept” of “reject”. Bij “reject” wordt een opmerking samen met datum en tijd aan het bericht in de database toegevoegd. De moderator werkt eerst aan het oudste bericht. Bij de NS zijn verschillende moderators. We willen bij een bericht opslaan welke moderator het bericht heeft beoordeeld.
3. Bij “accept” wordt het berichtje op Twitter geplaatst via een twitteraccount. Het account bevat het woord “test” in de naam, want het gaat nu nog om een Proof-of-Concept (PoC).
4. Op een ander scherm worden een aantal van de meest recente Tweets van het account getoond in de stationshal (module 3). Het is belangrijk dat deze Tweets er goed uitzien.
5. Het kan zijn dat er tijdelijk geen Tweets geplaatst worden, bijvoorbeeld als niemand gedurende een bepaalde tijd een Tweet heeft geplaatst. Zorg ervoor dat je dan het weerbericht laat zien op het scherm in de stationshal (OPTIONEEL)
6. De moderator kan een overzicht kunnen krijgen van de afgekeurde Tweets in module 2 (OPTIONEEL)
## Modules
Uiteindelijk zal je 3 modules en een database gebouwd hebben.
![architectuur](Project%20design/architectuur-1.PNG)
## Eisen aan het ontwerp (en tips)
Het ontwerp omvat een BPMN-model en Use Case diagram met twee volledig uitgewerkte Use Cases. Daarnaast is een conceptueel datamodel vereist. Dit model wordt verder uitgewerkt in een logisch en fysiek datamodel.
Tips voor de realisatie
Maak het bovengenoemde systeem met behulp van Python. Het gebruik van Tkinter kan mooie resultaten opleveren, maar is niet verplicht. Je mag ook gebruik maken van een andere Python GUI library. (mag dus ook een terminal applicatie zijn?)
Let op: de Twitter-API levert geen XML, maar JSON!
# twitter_zuil (project)
### 3rd party libraries(dependencies)
Yes we're gonna use some libraries while I'm a minimalist, but the Oauth1.0a API twitter uses is just too much work to implement.
@ -7,6 +43,7 @@ Yes we're gonna use some libraries while I'm a minimalist, but the Oauth1.0a API
- TwitterAPI (by Geduldig, looks pretty maintained)
- requests (Kenneth Reitz, voor de OWM API)
- flask (voor de web backend)
- psycopg2
## api keys

View File

@ -1,15 +1,14 @@
import psycopg2
import database_connector
pghost = 'localhost'
pgdatabase = 'twitter_zuil'
pguser = 'pyuser'
pgpassword = 'pypassword'
conn = database_connector.conn
cur = database_connector.cur
conn = psycopg2.connect(
host=pghost,
database=pgdatabase,
user=pguser,
password=pgpassword
)
def insertdatabase(bericht):
try:
cur = conn.cursor()
def feedback():

18
database_connector.py Normal file
View File

@ -0,0 +1,18 @@
import psycopg2
try:
pghost = 'localhost'
pgdatabase = 'twitter_zuil'
pguser = 'pyuser'
pgpassword = 'pypassword'
conn = psycopg2.connect(
host=pghost,
database=pgdatabase,
user=pguser,
password=pgpassword
)
cur = conn.cursor()
except:
print('error connecting to database')

View File

@ -1 +1 @@
<mxfile host="Electron" modified="2020-10-07T16:54:27.068Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.6.2 Chrome/83.0.4103.122 Electron/9.2.0 Safari/537.36" etag="TuTYWAag7M8v7AJWK40V" version="13.6.2" type="device"><diagram name="Page-1" id="2ca16b54-16f6-2749-3443-fa8db7711227">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</diagram></mxfile>
<mxfile host="Electron" modified="2020-10-19T12:35:11.043Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.6.2 Chrome/83.0.4103.122 Electron/9.2.0 Safari/537.36" etag="Pxkaj88VKokg5vDDAsFv" version="13.6.2" type="device"><diagram name="Page-1" id="2ca16b54-16f6-2749-3443-fa8db7711227">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</diagram></mxfile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 385 KiB

After

Width:  |  Height:  |  Size: 387 KiB

30
main.py
View File

@ -1,29 +1 @@
from tkinter import *
class Window(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
menu = Menu(self.master)
self.master.config(menu=menu)
fileMenu = Menu(menu)
fileMenu.add_command(label="Item")
fileMenu.add_command(label="Exit", command=self.exitProgram)
menu.add_cascade(label="File", menu=fileMenu)
editMenu = Menu(menu)
editMenu.add_command(label="Undo")
editMenu.add_command(label="Redo")
menu.add_cascade(label="Edit", menu=editMenu)
def exitProgram(self):
exit()
root = Tk()
app = Window(root)
root.wm_title("Tkinter window")
root.mainloop()
import hashlib

View File

@ -0,0 +1,64 @@
import hashlib
import getpass
import database_connector
import api_keys
conn = database_connector.conn
cur = database_connector.cur
def newaccount():
"""
Spreekt voorzich
:returns True on success, False on error
"""
try:
username = input('Gebruikers naam: ')
if len(username) > 64 or len(username) < 3:
print('Gebruikersnaam lengte is ongeldig, gebruik minimaal 3 en maximaal 64 tekens!')
return False
except:
print('Ongeldige invoer')
return False
try:
password1 = getpass.getpass('Voer wachtwoord in: ')
password2 = getpass.getpass('Herhaal wachtwoord: ')
if len(password1) < 4:
print('Wachtwoord lengte is te weinig, gebruik minimaal 4 tekens!')
return False
elif password1 != password2:
print('Wachtwoorden zijn niet hetzelfde!')
except:
print('Ongeldige invoer')
return False
cur.execute("SELECT naam FROM moderators WHERE naam = (%s);", (username, ))
sqlreturn = cur.fetchone()
if sqlreturn == None:
"""
password1 appenden met saltedlol an beide encoden als utf8(ja ik weet het, zo werkt salting niet)
daarna hashen met sha256(ja ik weet het er zijn betere manieren)
na al dat gedoe, in de database inserten met gebruikersnaam en hash
"""
hashedpass = hashlib.sha256(password1.encode('UTF-8') + 'saltandpepper'.encode('UTF-8')).hexdigest()
try:
cur.execute("INSERT INTO moderators(naam, hash) VALUES (%s, %s)", (username, hashedpass))
conn.commit()
print('Account aangemaakt!')
return True
except:
print('Fout bij het aanmaken van account!')
return False
else:
print('Gebruiker bestaat al!')
return False
def publish(berichtid):
"""
ontvangt lokaal bericht id en published dat bericht naar twitter
na het publishen, de functie pakt dan de twitter uniek id en zet het in de twitter berichten table met alle
waarden die twitter mee heeft gegeven zoals: id, tijd, datum
:returns True on success, False on error
"""