index.py 5.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #!/usr/bin/env python
  2. # -*- coding: utf8 -*-
  3. import sqlite3
  4. import random
  5. import os
  6. db_path = "/var/www/cyber_generator/de_DE.sqlite"
  7. try:
  8. db_connection = sqlite3.connect(db_path)
  9. db_cursor = db_connection.cursor()
  10. except sqlite3.OperationalError:
  11. html = u"""
  12. <!DOCTYPE HTML>
  13. <html>
  14. <head>
  15. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  16. <title>Internal server error!</title>
  17. </head>
  18. <body>
  19. <h1>Error: Could not connect to database!</h1>
  20. </body>
  21. </html>"""
  22. status = "503 Internal server error"
  23. print "Database connection could not be established!"
  24. else:
  25. num_words = db_cursor.execute("SELECT COUNT(*) FROM wordlist")
  26. num_words = int(num_words.fetchall()[0][0])
  27. html = u"""
  28. <!DOCTYPE HTML>
  29. <html>
  30. <head>
  31. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  32. <title>cyber-everything.de: Der ultimative Cyber-Generator!</title>
  33. <body>
  34. <h1 style="text-align:left;">Cyber-Generator</h1>
  35. <nav><ul style="padding:0"><li style="display:inline;padding:5px;"><a href="#word">Wort</a></li>
  36. <li style="display:inline;padding:5px;"><a href="#cyber">Cyber?</a></li>
  37. <li style="display:inline;padding:5px;"><a href="#disclaimer">Disclaimer</a></li>
  38. <li style="display:inline;padding:5px;"><a href="/impressum">Impressum</a></li></ul></nav>
  39. <div style="text-align:center;font-size:large;" id="word">Das Cyber-Wort der Sekunde:</div>
  40. <div style="font-size:xx-large;font-family:sans-serif;text-align:center;padding-top:15px;padding-bottom:10px;color:#FA5882;">Cyber-%s</div>
  41. <div style="text-align:right;font-size:small">Dieses Ergebnis wurde bereits %s Mal generiert</p>
  42. <hr>
  43. <h2 style="padding-top:20px;text-align:left;" id="cyber">Cyber?</h2>
  44. <div style="text-align:left;font-size:medium;">
  45. Das Wort bzw. besser das Präfix Cyber stammt laut <a href="http://de.wikipedia.org/wiki/Cyber">Wikipedia</a> aus dem Altgriechischen, bedeutet "Steuerung" und bezog sich ursprünglich auf die Seefahrt. Irgendwann wurde dieser Präfix dann mit der Computertechnik in Verbindung gebracht und dürfte den meisten zumindest durch den seit längerem etablierten Begriff "Cyberspace" bekannt sein. Eben diese Assoziation mit Computer- bzw. Netzwerktechnik haben sich in letzter Zeit viele Personen - vor allem Politiker aus Regierung und Opposition - zunutze gemacht, um dieses Präfix allen möglichen Wörtern voranzustellen, die irgendwie in diesen Themenbereich zu passen scheinen. Entstanden sind dabei Stilblüten wie ein "Cyber-Abwehrzentrum", "Cyber-Sicherheit", "Cyber-Kriminelle", eine "Cyber-Strategie" und viele Weitere.</div>
  46. <div style="text-align:left;font-size:medium;">
  47. Wie man sicherlich merkt, klingt diese Wortzusammensetzung einerseits modern, führt aber andererseits auch zu einem Bedeutungsverlust. Im Endeffekt weiß der Sprecher, wovon er spricht, der Höhrer kann sich aber alles Mögliche darunter vorstellen, irgendetwas mit Computern und Internet wird es schon zu tun haben. Aus diesem Grund gibt es hier jetzt den ultimativen Cyber-Generator, mit dem sich Jeder in der Art einer Phrasen-Dreschmaschine ein zufälliges Wort bestehend aus dem Präfix "Cyber" und einem deutschen Substantiv generieren lassen kann. Ein Sinn-Zusammenhang kann dabei natürlich nicht garantiert, gerne aber hereininterpretiert werden (das muss dann die "Cyber-Interpretation" sein oder so). Ein weiteres Wort gefällig? Lade einfach die Seite neu!
  48. </div>
  49. <h2 style="padding-top:20px;text-align:left;" id="disclaimer">Disclaimer</h2>
  50. <div style="text-align:left;font-size:medium;">
  51. Wie bereits erwähnt, wird bei jedem Aufruf dieser Seite ein zufälliges Wort auf Basis einer Datenbank mit Substantiven der deutschen Sprache generiert. Diese Datenbank ist nicht gefiltert und enthält daher auch alle weniger schönen Substantive, daher auch solche, die von einzelnen Personen als diskriminierend, beleidigend oder sonst irgendwie anstößig empfunden werden könnten. Ich bitte daher darum, das Ergebnis als das zu betrachten, was es ist: Ein zufälliges Ergebnis, produziert von gefühlslosem Code. Ich übernehme ausdrücklich keine Verantwortung für erschütterte Weltbilder, blankes Entsetzen oder sonstige negative Reaktionen auf möglicherweise nicht gefällige Resultate.</div>
  52. </body>
  53. </html>"""
  54. status = "200 OK"
  55. class RandomWord(object):
  56. def __init__(self):
  57. """Initializes the object, getting a random word and the number
  58. of times it has been picked before from the database.
  59. """
  60. self.word_id = random.randint(2, num_words)
  61. self.__sqlword = "SELECT word,used FROM wordlist where id = ?"
  62. self.__query_result = db_cursor.execute(self.__sqlword, (self.word_id,))
  63. self.__query_result = self.__query_result.fetchall()
  64. self.word = self.__query_result[0][0]
  65. self.used = self.__query_result[0][1]
  66. def update(self):
  67. """Increments the number of uses of a word by one, writing it back to
  68. the database.
  69. """
  70. self.__new_used = self.used + 1
  71. self.__sqlupdate = "UPDATE wordlist SET used = ? WHERE id = ?"
  72. db_cursor.execute(self.__sqlupdate, (self.__new_used, self.word_id))
  73. db_connection.commit()
  74. def application(environ, start_response):
  75. if status == "200 OK" :
  76. new_word = RandomWord()
  77. response_body = html % (new_word.word, new_word.used)
  78. new_word.update()
  79. else:
  80. response_body = html
  81. response_headers = [('Content-Type', 'text/html'),
  82. ('Content-Length', str(len(response_body.encode('utf8'))))]
  83. start_response(status, response_headers)
  84. return [response_body.encode('utf8')]