add json api

This commit is contained in:
Götz 2017-09-24 02:00:33 +02:00
parent 4aa40b69f6
commit bd3d868312
19 changed files with 9389 additions and 26 deletions

8185
bootstrap.css vendored Normal file

File diff suppressed because it is too large Load Diff

168
food.html Normal file
View File

@ -0,0 +1,168 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="description" content="Sammelwebsite für das Essen der Uni Bamberg">
<meta name="keywords" content="OFU, Otto-Friedrich, Universität, Bamberg">
<link rel="stylesheet" href=" bootstrap.css ">
<title>Essen an der OFU</title>
</head>
<body>
<h1>Food for Students</h1>
<p>Last execute: Sunday, 24.09.2017</p>
<div class="container">
<div class="row">
<div class="col">
<h2>Cafeteria Erba-Insel</h2>
<p><span>24.07.</span><span>Rinderhacksteak an Cognacsoße und Spätzle</span></p>
<p><span>25.07.</span><span>Gemüseschnitzel mit Kräutercreme und Kartoffeln</span></p>
<p><span>26.07.</span><span>Penne-Nudeln mit Hackfleischsoße</span></p>
<p><span>27.07.</span><span>Kaiserschmarrn mit Apfelmus</span></p>
</div>
<div class="col">
<h2>Cafeteria Markusplatz</h2>
<p><span>24.07.</span><span>Vegetarisches Chili sin Carne</span></p>
<p><span>25.07.</span><span>Gemüseschnitzel mit Kräutercreme und Kartoffeln</span></p>
<p><span>26.07.</span><span>Überbackene Zucchini an Paprikasoße mit Püree</span></p>
<p><span>27.07.</span><span>Kaiserschmarrn mit Apfelmus</span></p>
</div>
</div>
<div class="row">
<div class="col">
<h2>Speiseplan für Austraße Bamberg</h2>
<h3>Montag 18.09.</h3>
<p>Rindergeschnetzeltes "Provencial"</p>
<p>Pizza "Speciale"</p>
<p>Gebackene Kartoffeltaschen "Kräuterfrischkäse" an Salatgarnitur</p>
<h3>Dienstag 19.09.</h3>
<p>Hähnchenpiccata an Tomatenragout</p>
<p>Schweinenackensteak vom Grill mit hausgemachter Kräuterbutter</p>
<p>Pizza "Speciale"</p>
<p>Kokos Gemüsecurry "Thai Style" mit Wildreis</p>
<h3>Mittwoch 20.09.</h3>
<p>Rindfleisch mit Meerrettich</p>
<p>Griechischer Teller "Kreta" mit Suflaki, Calamari, Bifteki und hausgemachtem Kräuterdip</p>
<p>Nudelpfanne "Mediterrane"</p>
<h3>Donnerstag 21.09.</h3>
<p>Lasagne von der Pute</p>
<p>Apfelstrudel "Tiroler Art" mit Vanillesoße</p>
<p>Wedges mit Kräuterquark</p>
<h3>Freitag 22.09.</h3>
<p>Pangasiusfilet an fränkischer Silvanersoße mit Gemüsestreifen</p>
<p>Rindergeschnetzeltes "Provencial"</p>
<p>Schweinerückensteak mit Champignonrahmsoße</p>
<p>Blumenkohlkäsemedaillon mit Pestosoße</p>
</div>
<div class="col">
<h2>Speiseplan für Feldkirchenstraße Bamberg</h2>
<h3>Montag 18.09.</h3>
<p>Rindergeschnetzeltes "Provencial"</p>
<p>Schwarzer Heilbutt an Krebsrahmsoße</p>
<p>Pizza "Speciale"</p>
<p>Gebackene Kartoffeltaschen "Kräuterfrischkäse" an Salatgarnitur</p>
<h3>Dienstag 19.09.</h3>
<p>Hähnchenpiccata an Tomatenragout</p>
<p>Pizza "Speciale"</p>
<p>Schweinenackensteak vom Grill mit hausgemachter Kräuterbutter</p>
<p>Kokos Gemüsecurry "Thai Style" mit Wildreis</p>
<h3>Mittwoch 20.09.</h3>
<p>Hähnchenpiccata an Tomatenragout</p>
<p>Rindfleisch mit Meerrettich</p>
<p>Griechischer Teller "Kreta" mit Suflaki, Calamari, Bifteki und hausgemachtem Kräuterdip</p>
<p>Kokos Gemüsecurry "Thai Style" mit Wildreis</p>
<p>Nudelpfanne "Mediterrane"</p>
<h3>Donnerstag 21.09.</h3>
<p>Lasagne von der Pute</p>
<p>Apfelstrudel "Tiroler Art" mit Vanillesoße</p>
<p>Wedges mit Kräuterquark</p>
<h3>Freitag 22.09.</h3>
<p>Lasagne von der Pute</p>
<p>Pangasiusfilet an fränkischer Silvanersoße mit Gemüsestreifen</p>
<p>Schweinerückensteak mit Champignonrahmsoße</p>
<p>Blumenkohlkäsemedaillon mit Pestosoße</p>
</div>
</div>
<div class="row">
<div class="col">
<h2>Feki.de Happy Hour Guide for Food</h2>
<h3>Sunday, 24.09.2017</h3>
<p>Leider gibt es heute keine Happy Hours :(</p>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,10 +1,144 @@
<!doctype html><html lang="de"><head><meta charset="utf-8"><meta name="description" content="Sammelwebsite für das Essen der Uni Bamberg"><meta name="keywords" content="OFU, Otto-Friedrich, Universität, Bamberg"><link rel="stylesheet" href="bootstrap.css"><title>Essen an der OFU</title></head><body><p>Last execute: 23.09.2017</p><div class="container"><h2>Cafeteria Erba-Insel</h2><p class="bodytext">24.07. Rinderhacksteak an Cognacsoße und Spätzle<br/>25.07.  Gemüseschnitzel mit Kräutercreme und Kartoffeln<br/>26.07.  Penne-Nudeln mit Hackfleischsoße<br/>27.07.  Kaiserschmarrn mit Apfelmus</p><h2>Cafeteria Markusplatz</h2><p class="bodytext">24.07.  Vegetarisches Chili sin Carne<br/>25.07.  Gemüseschnitzel mit Kräutercreme und Kartoffeln<br/>26.07.  Überbackene Zucchini an Paprikasoße mit Püree<br/>27.07.  Kaiserschmarrn mit Apfelmus</p><div><h2>Mensa Austraße</h2><h5>Montag 18.09.</h5><div class="title">Rindergeschnetzeltes "Provencial"</div><a href="https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=2&amp;tx_thmensamenu_pi2%5Baction%5D=show&amp;tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&amp;cHash=511e047953ee1370c3b82c11a04624bb#toggle">Zusatzstoffe / Allergene &amp; sonstige Informationen</a><div class="title">Pizza "Speciale"</div><a href="https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=2&amp;tx_thmensamenu_pi2%5Baction%5D=show&amp;tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&amp;cHash=511e047953ee1370c3b82c11a04624bb#toggle">Zusatzstoffe / Allergene &amp; sonstige Informationen</a><div class="title">Gebackene Kartoffeltaschen "Kräuterfrischkäse" an Salatgarnitur</div><a href="https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=2&amp;tx_thmensamenu_pi2%5Baction%5D=show&amp;tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&amp;cHash=511e047953ee1370c3b82c11a04624bb#toggle">Zusatzstoffe / Allergene &amp; sonstige Informationen</a></div><div><h2>Feki Mensa</h2><h5>Montag 18.09.</h5><div class="title">Rindergeschnetzeltes "Provencial"</div><a href="https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=3&amp;tx_thmensamenu_pi2%5Baction%5D=show&amp;tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&amp;cHash=c3fe5ebb35e5fba3794f01878e798b7c#toggle">Zusatzstoffe / Allergene &amp; sonstige Informationen</a><div class="title">Schwarzer Heilbutt an Krebsrahmsoße</div><a href="https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=3&amp;tx_thmensamenu_pi2%5Baction%5D=show&amp;tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&amp;cHash=c3fe5ebb35e5fba3794f01878e798b7c#toggle">Zusatzstoffe / Allergene &amp; sonstige Informationen</a><div class="title">Pizza "Speciale"</div><a href="https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=3&amp;tx_thmensamenu_pi2%5Baction%5D=show&amp;tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&amp;cHash=c3fe5ebb35e5fba3794f01878e798b7c#toggle">Zusatzstoffe / Allergene &amp; sonstige Informationen</a><div class="title">Gebackene Kartoffeltaschen "Kräuterfrischkäse" an Salatgarnitur</div><a href="https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=3&amp;tx_thmensamenu_pi2%5Baction%5D=show&amp;tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&amp;cHash=c3fe5ebb35e5fba3794f01878e798b7c#toggle">Zusatzstoffe / Allergene &amp; sonstige Informationen</a></div><h2>Feki.de Happy Hour Guide</h2><div class="tab-pane" id="food" role="tabpanel">
<h2>Aktuelle HappyHours</h2>
<table class="table">
</table>
<p>Leider sind gerade keine HappyHours :( </p>
<h2>Kommende HappyHours</h2>
<table class="table">
</table>
<p>Leider kommen keine HappyHours mehr :( </p>
</div></div></body></html>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="description" content="Sammelwebsite für das Essen der Uni Bamberg">
<meta name="keywords" content="OFU, Otto-Friedrich, Universität, Bamberg">
<link rel="stylesheet" href=" bootstrap.css ">
<title>Essen an der OFU</title>
</head>
<body>
<h1>Food for Students</h1>
<p>Last execute: Sunday, 24.09.2017</p>
<div class="container">
<div class="row">
<div class="col">
<h2>Cafeteria Erba-Insel</h2>
<p><span>Essen am 24.07.</span><span>['Rinderhacksteak an Cognacsoße und Spätzle']</span></p>
<p><span>Essen am 25.07.</span><span>['Gemüseschnitzel mit Kräutercreme und Kartoffeln']</span></p>
<p><span>Essen am 26.07.</span><span>['Penne-Nudeln mit Hackfleischsoße']</span></p>
<p><span>Essen am 27.07.</span><span>['Kaiserschmarrn mit Apfelmus']</span></p>
</div>
<div class="col">
<h2>Cafeteria Markusplatz</h2>
<p><span>Essen am 24.07.</span><span>['Vegetarisches Chili sin Carne']</span></p>
<p><span>Essen am 25.07.</span><span>['Gemüseschnitzel mit Kräutercreme und Kartoffeln']</span></p>
<p><span>Essen am 26.07.</span><span>['Überbackene Zucchini an Paprikasoße mit Püree']</span></p>
<p><span>Essen am 27.07.</span><span>['Kaiserschmarrn mit Apfelmus']</span></p>
</div>
</div>
<div class="row">
<div class="col">
<h2>Speiseplan für Austraße Bamberg</h2>
<h3>Montag 18.09.</h3>
<p>menu</p>
<p>date</p>
<h3>Dienstag 19.09.</h3>
<p>menu</p>
<p>date</p>
<h3>Mittwoch 20.09.</h3>
<p>menu</p>
<p>date</p>
<h3>Donnerstag 21.09.</h3>
<p>menu</p>
<p>date</p>
<h3>Freitag 22.09.</h3>
<p>menu</p>
<p>date</p>
</div>
<div class="col">
<h2>Speiseplan für Feldkirchenstraße Bamberg</h2>
<h3>Montag 18.09.</h3>
<p>menu</p>
<p>date</p>
<h3>Dienstag 19.09.</h3>
<p>menu</p>
<p>date</p>
<h3>Mittwoch 20.09.</h3>
<p>menu</p>
<p>date</p>
<h3>Donnerstag 21.09.</h3>
<p>menu</p>
<p>date</p>
<h3>Freitag 22.09.</h3>
<p>menu</p>
<p>date</p>
</div>
</div>
<div class="row">
<div class="col">
<h2>Feki.de Happy Hour Guide for Food</h2>
<h3>Sunday, 24.09.2017</h3>
<table>
<thead>
<tr>
<th>Location</th>
<th>Time</th>
<th>Description</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>

View File

@ -9,16 +9,86 @@
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="CoverageDataManager">
<SUITE FILE_PATH="coverage/ofu_food$foodplan_parser_controler.coverage" NAME="foodplan-parser-controler Coverage Results" MODIFIED="1506206083609" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/ofu_food$mensa_page_parser.coverage" NAME="mensa-page-parser Coverage Results" MODIFIED="1506198388515" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/ofu_food$fekide_happyhour_page_parser.coverage" NAME="fekide-happyhour-page-parser Coverage Results" MODIFIED="1506204094485" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/ofu_food$ofu_food.coverage" NAME="ofu-food Coverage Results" MODIFIED="1506193420790" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/ofu_food$cafete_page_parser.coverage" NAME="cafete-page-parser Coverage Results" MODIFIED="1506201552685" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/ofu_food$generator_food_page.coverage" NAME="generator-food-page Coverage Results" MODIFIED="1506210188852" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
</component>
<component name="DockManager">
<window id="1">
<content type="file-editors">
<state>
<leaf>
<file leaf-file-name="erba-cafete.json" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/Json_Files/erba-cafete.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="feki-mensa.json" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Json_Files/feki-mensa.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="252" lean-forward="false" selection-start-line="0" selection-start-column="106" selection-end-line="0" selection-end-column="252" />
<folding />
</state>
</provider>
</entry>
</file>
</leaf>
</state>
</content>
</window>
</component>
<component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
<component name="FileEditorManager">
<leaf>
<file leaf-file-name="ofu-food.py" pinned="false" current-in-tab="true">
<file leaf-file-name="ofu-food.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/ofu-food.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2860">
<caret line="143" column="29" lean-forward="false" selection-start-line="143" selection-start-column="29" selection-end-line="143" selection-end-column="29" />
<state relative-caret-position="180">
<caret line="15" column="14" lean-forward="false" selection-start-line="15" selection-start-column="14" selection-end-line="15" selection-end-column="62" />
<folding>
<element signature="e#0#15#0" expanded="true" />
<element signature="e#43#58#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="food.jinja" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/templates/food.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1460">
<caret line="73" column="60" lean-forward="false" selection-start-line="73" selection-start-column="60" selection-end-line="73" selection-end-column="60" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="foodplan-parser-controler.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/foodplan-parser-controler.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="160">
<caret line="8" column="18" lean-forward="true" selection-start-line="8" selection-start-column="18" selection-end-line="8" selection-end-column="65" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="generator-food-page.py" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/generator-food-page.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="120">
<caret line="6" column="2" lean-forward="false" selection-start-line="6" selection-start-column="2" selection-end-line="6" selection-end-column="2" />
<folding>
<element signature="e#0#13#0" expanded="true" />
</folding>
</state>
</provider>
@ -26,10 +96,23 @@
</file>
</leaf>
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Python Script" />
</list>
</option>
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/ofu-food.py" />
<option value="$PROJECT_DIR$/cafete-page-parser.py" />
<option value="$PROJECT_DIR$/mensa-page-parser.py" />
<option value="$PROJECT_DIR$/fekide-happyhour-page-parser.py" />
<option value="$PROJECT_DIR$/templates/food.jinja" />
<option value="$PROJECT_DIR$/foodplan-parser-controler.py" />
<option value="$PROJECT_DIR$/generator-food-page.py" />
</list>
</option>
</component>
@ -40,7 +123,8 @@
<sorting>DEFINITION_ORDER</sorting>
</component>
<component name="ProjectFrameBounds">
<option name="y" value="27" />
<option name="x" value="995" />
<option name="y" value="2187" />
<option name="width" value="1920" />
<option name="height" value="1053" />
</component>
@ -72,6 +156,34 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ofu-food" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ofu-food" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="templates" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ofu-food" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ofu-food" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Json_Files" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
<pane id="Scratches" />
@ -92,6 +204,261 @@
</list>
</option>
</component>
<component name="RunManager" selected="Python.generator-food-page">
<configuration default="false" name="mensa-page-parser" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/mensa-page-parser.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="false" name="foodplan-parser-controler" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/foodplan-parser-controler.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="false" name="cafete-page-parser" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/cafete-page-parser.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="false" name="fekide-happyhour-page-parser" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/fekide-happyhour-page-parser.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="false" name="generator-food-page" type="PythonConfigurationType" factoryName="Python" temporary="true">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/generator-food-page.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="true" type="DjangoTestsConfigurationType" factoryName="Django tests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="TARGET" value="" />
<option name="SETTINGS_FILE" value="" />
<option name="CUSTOM_SETTINGS" value="false" />
<option name="USE_OPTIONS" value="false" />
<option name="OPTIONS" value="" />
<method />
</configuration>
<configuration default="true" type="JavaScriptTestRunnerJest" factoryName="Jest">
<node-interpreter value="project" />
<working-dir value="" />
<envs />
<scope-kind value="ALL" />
<method />
</configuration>
<configuration default="true" type="JavaScriptTestRunnerProtractor" factoryName="Protractor">
<config-file value="" />
<node-interpreter value="project" />
<envs />
<method />
</configuration>
<configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
<method />
</configuration>
<configuration default="true" type="PyBehaveRunConfigurationType" factoryName="Behave">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="ADDITIONAL_ARGS" value="" />
<method />
</configuration>
<configuration default="true" type="PyLettuceRunConfigurationType" factoryName="Lettuce">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="ADDITIONAL_ARGS" value="" />
<method />
</configuration>
<configuration default="true" type="PythonConfigurationType" factoryName="Python">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<method />
</configuration>
<configuration default="true" type="Tox" factoryName="Tox">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<module name="ofu-food" />
<method />
</configuration>
<configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
<method />
</configuration>
<configuration default="true" type="js.build_tools.npm" factoryName="npm">
<command value="run" />
<scripts />
<node-interpreter value="project" />
<envs />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Doctests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<method />
</configuration>
<configuration default="true" type="tests" factoryName="Unittests">
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<module name="ofu-food" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
<option name="_new_additionalArguments" value="&quot;&quot;" />
<option name="_new_target" value="&quot;.&quot;" />
<option name="_new_targetType" value="&quot;PATH&quot;" />
<method />
</configuration>
<list size="5">
<item index="0" class="java.lang.String" itemvalue="Python.mensa-page-parser" />
<item index="1" class="java.lang.String" itemvalue="Python.foodplan-parser-controler" />
<item index="2" class="java.lang.String" itemvalue="Python.cafete-page-parser" />
<item index="3" class="java.lang.String" itemvalue="Python.fekide-happyhour-page-parser" />
<item index="4" class="java.lang.String" itemvalue="Python.generator-food-page" />
</list>
<recent_temporary>
<list size="5">
<item index="0" class="java.lang.String" itemvalue="Python.generator-food-page" />
<item index="1" class="java.lang.String" itemvalue="Python.foodplan-parser-controler" />
<item index="2" class="java.lang.String" itemvalue="Python.fekide-happyhour-page-parser" />
<item index="3" class="java.lang.String" itemvalue="Python.cafete-page-parser" />
<item index="4" class="java.lang.String" itemvalue="Python.mensa-page-parser" />
</list>
</recent_temporary>
</component>
<component name="ShelveChangesManager" show_recycled="false">
<option name="remove_strategy" value="false" />
</component>
@ -106,14 +473,14 @@
<servers />
</component>
<component name="ToolWindowManager">
<frame x="0" y="27" width="1920" height="1053" extended-state="7" />
<frame x="995" y="2187" width="1920" height="1053" extended-state="7" />
<editor active="true" />
<layout>
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.32896176" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
@ -129,6 +496,27 @@
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
</layout>
<layout-to-restore>
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="true" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.32896176" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="combo" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="combo" />
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="true" content_ui="tabs" />
<window_info id="Data View" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
</layout-to-restore>
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="processedProjectFiles" value="true" />
@ -137,19 +525,117 @@
<option name="myLimit" value="2678400000" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
<breakpoint-manager>
<option name="time" value="1" />
</breakpoint-manager>
<watches-manager />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/Json_Files/austr-mensa.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/food.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Json_Files/feki-mensa.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="252" lean-forward="false" selection-start-line="0" selection-start-column="106" selection-end-line="0" selection-end-column="252" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Json_Files/erba-cafete.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/food.jinja">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1460">
<caret line="73" column="60" lean-forward="false" selection-start-line="73" selection-start-column="60" selection-end-line="73" selection-end-column="60" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/ofu-food.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2860">
<caret line="143" column="29" lean-forward="false" selection-start-line="143" selection-start-column="29" selection-end-line="143" selection-end-column="29" />
<state relative-caret-position="180">
<caret line="15" column="14" lean-forward="false" selection-start-line="15" selection-start-column="14" selection-end-line="15" selection-end-column="62" />
<folding>
<element signature="e#43#58#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/foodplan-parser-controler.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="160">
<caret line="8" column="18" lean-forward="true" selection-start-line="8" selection-start-column="18" selection-end-line="8" selection-end-column="65" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Json_Files/feki-happyhour-guide.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="23" lean-forward="false" selection-start-line="0" selection-start-column="20" selection-end-line="0" selection-end-column="23" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/fekide-happyhour-page-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="660">
<caret line="48" column="19" lean-forward="false" selection-start-line="48" selection-start-column="19" selection-end-line="48" selection-end-column="19" />
<folding>
<element signature="e#0#15#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/cafete-page-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="336">
<caret line="40" column="4" lean-forward="false" selection-start-line="40" selection-start-column="4" selection-end-line="44" selection-end-column="7" />
<folding>
<element signature="e#0#15#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/mensa-page-parser.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="416">
<caret line="46" column="43" lean-forward="false" selection-start-line="46" selection-start-column="34" selection-end-line="46" selection-end-column="43" />
<folding>
<element signature="e#0#15#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/generator-food-page.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="120">
<caret line="6" column="2" lean-forward="false" selection-start-line="6" selection-start-column="2" selection-end-line="6" selection-end-column="2" />
<folding>
<element signature="e#0#13#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</component>
</project>

View File

@ -0,0 +1 @@
{"name": "Speiseplan f\u00fcr Austra\u00dfe Bamberg", "weekmenu": [{"date": "Montag 18.09.", "menu": ["Rindergeschnetzeltes \"Provencial\"", "Pizza \"Speciale\"", "Gebackene Kartoffeltaschen \"Kr\u00e4uterfrischk\u00e4se\" an Salatgarnitur"]}, {"date": "Dienstag 19.09.", "menu": ["H\u00e4hnchenpiccata an Tomatenragout", "Schweinenackensteak vom Grill mit hausgemachter Kr\u00e4uterbutter", "Pizza \"Speciale\"", "Kokos Gem\u00fcsecurry \"Thai Style\" mit Wildreis"]}, {"date": "Mittwoch 20.09.", "menu": ["Rindfleisch mit Meerrettich", "Griechischer Teller \"Kreta\" mit Suflaki, Calamari, Bifteki und hausgemachtem Kr\u00e4uterdip", "Nudelpfanne \"Mediterrane\""]}, {"date": "Donnerstag 21.09.", "menu": ["Lasagne von der Pute", "Apfelstrudel \"Tiroler Art\" mit Vanilleso\u00dfe", "Wedges mit Kr\u00e4uterquark"]}, {"date": "Freitag 22.09.", "menu": ["Pangasiusfilet an fr\u00e4nkischer Silvanerso\u00dfe mit Gem\u00fcsestreifen", "Rindergeschnetzeltes \"Provencial\"", "Schweiner\u00fcckensteak mit Champignonrahmso\u00dfe", "Blumenkohlk\u00e4semedaillon mit Pestoso\u00dfe"]}]}

View File

@ -0,0 +1 @@
{"name": "Cafeteria Erba-Insel", "weekmenu": [{"date": "24.07.", "menu": ["Rinderhacksteak an Cognacso\u00dfe und Sp\u00e4tzle"]}, {"date": "25.07.", "menu": ["Gem\u00fcseschnitzel mit Kr\u00e4utercreme und Kartoffeln"]}, {"date": "26.07.", "menu": ["Penne-Nudeln mit Hackfleischso\u00dfe"]}, {"date": "27.07.", "menu": ["Kaiserschmarrn mit Apfelmus"]}]}

View File

@ -0,0 +1 @@
{"happyhours": [], "day": "Sunday, 24.09.2017"}

View File

@ -0,0 +1 @@
{"name": "Speiseplan f\u00fcr Feldkirchenstra\u00dfe Bamberg", "weekmenu": [{"date": "Montag 18.09.", "menu": ["Rindergeschnetzeltes \"Provencial\"", "Schwarzer Heilbutt an Krebsrahmso\u00dfe", "Pizza \"Speciale\"", "Gebackene Kartoffeltaschen \"Kr\u00e4uterfrischk\u00e4se\" an Salatgarnitur"]}, {"date": "Dienstag 19.09.", "menu": ["H\u00e4hnchenpiccata an Tomatenragout", "Pizza \"Speciale\"", "Schweinenackensteak vom Grill mit hausgemachter Kr\u00e4uterbutter", "Kokos Gem\u00fcsecurry \"Thai Style\" mit Wildreis"]}, {"date": "Mittwoch 20.09.", "menu": ["H\u00e4hnchenpiccata an Tomatenragout", "Rindfleisch mit Meerrettich", "Griechischer Teller \"Kreta\" mit Suflaki, Calamari, Bifteki und hausgemachtem Kr\u00e4uterdip", "Kokos Gem\u00fcsecurry \"Thai Style\" mit Wildreis", "Nudelpfanne \"Mediterrane\""]}, {"date": "Donnerstag 21.09.", "menu": ["Lasagne von der Pute", "Apfelstrudel \"Tiroler Art\" mit Vanilleso\u00dfe", "Wedges mit Kr\u00e4uterquark"]}, {"date": "Freitag 22.09.", "menu": ["Lasagne von der Pute", "Pangasiusfilet an fr\u00e4nkischer Silvanerso\u00dfe mit Gem\u00fcsestreifen", "Schweiner\u00fcckensteak mit Champignonrahmso\u00dfe", "Blumenkohlk\u00e4semedaillon mit Pestoso\u00dfe"]}]}

View File

@ -0,0 +1 @@
{"name": "Cafeteria Markusplatz", "weekmenu": [{"date": "24.07.", "menu": ["Vegetarisches Chili sin Carne"]}, {"date": "25.07.", "menu": ["Gem\u00fcseschnitzel mit Kr\u00e4utercreme und Kartoffeln"]}, {"date": "26.07.", "menu": ["\u00dcberbackene Zucchini an Paprikaso\u00dfe mit P\u00fcree"]}, {"date": "27.07.", "menu": ["Kaiserschmarrn mit Apfelmus"]}]}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,60 @@
import requests
from bs4 import BeautifulSoup
import json
SPEISEPLAN_NAME_SELECTOR = '.csc-default .csc-header .csc-firstHeader'
def loadPage(url: str):
return requests.get(url).content
def getFoodplanName(soup):
foodplan_name = soup.select(SPEISEPLAN_NAME_SELECTOR)[0].getText()
return foodplan_name
def getRightLine(lines):
for line in list(lines):
if str(line).__contains__("<br/>"):
return line
return ""
def getFoodPerDay(soup):
days = []
lines = soup.select('.csc-default .bodytext')
line = getRightLine(lines)
foods = str(line).strip('<p class="bodytext">').strip('</').split("<br/>")
for food in foods:
dayObj = {}
day = str(food).split()[0]
foodName = str(food).replace(day, "").strip()
dayObj['date'] = day
dayObj['menu'] = [foodName]
days.append(dayObj)
return days
def parsePage(url: str):
pagecontent = {}
# {mensaspeiseplan:
# {name:"",
# weekmenu: [day:{date:, menu:[,,,]}]
# }
# }
page = loadPage(url)
mensaSpeiseplan = {}
soup = BeautifulSoup(page, "lxml")
foodplan_name = getFoodplanName(soup)
days = getFoodPerDay(soup)
mensaSpeiseplan['weekmenu'] = days
mensaSpeiseplan['name'] = foodplan_name
mensaSpeiseplanJson = json.dumps(mensaSpeiseplan)
return mensaSpeiseplanJson
# LINK_ERBA_CAFETE = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/sonderspeiseplaene/cafeteria-erba-insel.html"
# parsePage(LINK_ERBA_CAFETE)

View File

@ -0,0 +1,53 @@
import requests
from bs4 import BeautifulSoup
import datetime
import json
SPEISEPLAN_NAME_SELECTOR = '.csc-default .csc-header .csc-firstHeader'
def loadPage(url: str):
return requests.get(url).content
def getDay():
return datetime.datetime.today().strftime("%A, %d.%m.%Y")
def getHappyHours(soup):
happyhours = []
happyhourstable = soup.select('#food .table tr')
for tableline in happyhourstable:
happyhour = {}
linesoup = BeautifulSoup(str(tableline), "lxml")
location = linesoup.find("td", {"class": "location"}).getText()
time = linesoup.find("td", {"class": "time"}).getText()
description = linesoup.find("td", {"class": "description"}).getText()
description = str(description).strip()
happyhour['location'] = location
happyhour['time'] = time
happyhour['description'] = description
happyhours.append(happyhour)
return happyhours
def parsePage(url: str):
pagecontent = {}
# {
# happyhours:[{happyhour:{location: "",time: "",description: ""},,,,]
# }
happyhours = []
page = loadPage(url)
soup = BeautifulSoup(page, "lxml")
happyhours = getHappyHours(soup)
pagecontent['happyhours'] = happyhours
pagecontent['day'] = getDay()
jsondata = json.dumps(pagecontent)
return jsondata
# LINK_FEKIDE_GUIDE = "https://www.feki.de/happyhour/wochenuebersicht"
# parsePage(LINK_FEKIDE_GUIDE)

View File

@ -0,0 +1,68 @@
import importlib
mensapageparser = importlib.import_module('mensa-page-parser')
cafetepageparser = importlib.import_module('cafete-page-parser')
fekidehappyhourpageparser = importlib.import_module('fekide-happyhour-page-parser')
# JSON_OUTPUT_DIR = "./Json_Files/"
# PI
JSON_OUTPUT_DIR = "/media/data_1/www/pub-html/ofu-food/api/json/"
LINK_FEKI_MENSA = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=3&tx_thmensamenu_pi2%5Baction%5D=show&tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&cHash=c3fe5ebb35e5fba3794f01878e798b7c"
LINK_AUSTR_MENSA = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=2&tx_thmensamenu_pi2%5Baction%5D=show&tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&cHash=511e047953ee1370c3b82c11a04624bb"
LINK_ERBA_CAFETE = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/sonderspeiseplaene/cafeteria-erba-insel.html"
LINK_MARKUS_CAFETE = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/sonderspeiseplaene/cafeteria-markusplatz.html"
LINK_FEKIDE_GUIDE = "https://www.feki.de/happyhour"
def writeToFile(jsonfile, filename):
with open((JSON_OUTPUT_DIR + filename),"w") as file:
file.write(jsonfile)
def main():
try:
fekiMensaJson = mensapageparser.parsePage(LINK_FEKI_MENSA)
except IndexError:
print("Error")
fekiMensaJson = {}
try:
austrMensaJson = mensapageparser.parsePage(LINK_AUSTR_MENSA)
except IndexError:
print("Error")
austrMensaJson = {}
try:
erbaCafeteJson = cafetepageparser.parsePage(LINK_ERBA_CAFETE)
except IndexError:
print("Error")
erbaCafeteJson = {}
try:
markusCafeteJson = cafetepageparser.parsePage(LINK_MARKUS_CAFETE)
except IndexError:
print("Error")
markusCafeteJson = {}
try:
fekidehappyhourJson = fekidehappyhourpageparser.parsePage(LINK_FEKIDE_GUIDE)
except IndexError:
print("Error")
fekidehappyhourJson = {}
print(fekiMensaJson)
print(austrMensaJson)
print(erbaCafeteJson)
print(markusCafeteJson)
print(fekidehappyhourJson)
writeToFile(fekiMensaJson, "feki-mensa.json")
writeToFile(austrMensaJson, "austr-mensa.json")
writeToFile(erbaCafeteJson, "erba-cafete.json")
writeToFile(markusCafeteJson, "markus-cafete.json")
writeToFile(fekidehappyhourJson, "feki-happyhour-guide.json")
main()

View File

@ -0,0 +1,57 @@
import jinja2
import json
import datetime
CSSFILE = "bootstrap.css"
# JSON_FILES_PATH = "./Json_Files/"
# OUTPUT = "../food.html"
# PI
JSON_FILES_PATH = "/media/data_1/www/pub-html/ofu-food/api/json/"
CSSFILE_SRC = "../bootstrap-4.0.0-beta-dist/css/bootstrap.css"
CSSFILE_DEST = "/media/data_1/www/pub-html/ofu-food/bootstrap.css"
OUTPUT = "/media/data_1/www/pub-html/ofu-food/food.html"
def getJsonFromFile(path):
with open(path, "r") as file:
return json.load(file)
def main():
erbaJson = getJsonFromFile(JSON_FILES_PATH + "erba-cafete.json")
markusJson = getJsonFromFile(JSON_FILES_PATH + "markus-cafete.json")
fekiJson = getJsonFromFile(JSON_FILES_PATH + "feki-mensa.json")
austrJson = getJsonFromFile(JSON_FILES_PATH + "austr-mensa.json")
fekideJson = getJsonFromFile(JSON_FILES_PATH + "feki-happyhour-guide.json")
print(austrJson)
templateVars = {
"cssfile": CSSFILE,
"executiontime": datetime.datetime.today().strftime("%A, %d.%m.%Y"),
"erbaCafeteTitle": erbaJson['name'],
"erbaWeekmenu": erbaJson['weekmenu'],
"markusCafeteTitle": markusJson['name'],
"markusWeekmenu": markusJson['weekmenu'],
"austrMensaTitle": austrJson['name'],
"austrWeekmenu": austrJson['weekmenu'],
"fekiMensaTitle": fekiJson['name'],
"fekiWeekmenu": fekiJson['weekmenu'],
"happyHourDay": fekideJson['day'],
"happyhours": fekideJson['happyhours'],
}
templateLoader = jinja2.FileSystemLoader(searchpath="./")
templateEnv = jinja2.Environment(loader=templateLoader)
TEMPLATE_FILE = "templates/food.jinja"
template = templateEnv.get_template(TEMPLATE_FILE)
# Template Vars: cssfile, executiontime, erbaCafeteTitle, erbaWeekmenu, markusCafeteTitle, markusWeekmenu, austrMensaTitle, austrWeekmenu, fekiMensaTitle, fekiWeekmenu, happyHourDay, happyhours
html = template.render(templateVars)
with open(OUTPUT, "w") as file:
file.write(html)
main()

View File

@ -0,0 +1,48 @@
import requests
from bs4 import BeautifulSoup
import json
def loadPage(url: str):
return requests.get(url).content
def getMenuDay(soup):
return soup.find("div", {"class": "day"}).h5.contents[0]
def getFoodPerDay(soup):
days = []
for day in soup.select('.currentweek .day'):
dayObj = {}
daysoup = BeautifulSoup(str(day), "lxml")
day = getMenuDay(daysoup)
dayMenu = [e.getText() for e in daysoup.select('.menuwrap .menu .left .title')]
dayObj['date'] = day
dayObj['menu'] = dayMenu
days.append(dayObj)
return days
def parsePage(url: str):
pagecontent = {}
# {mensaspeiseplan:
# {name:"",
# weekmenu: [day:{date:, menu:[,,,]}]
# }
# }
mensaSpeiseplan = {}
page = loadPage(url)
soup = BeautifulSoup(page, "lxml")
foodplan_name = getFoodplanName(soup)
days = getFoodPerDay(soup)
mensaSpeiseplan['weekmenu'] = days
mensaSpeiseplan['name'] = foodplan_name
mensaSpeiseplanJson = json.dumps(mensaSpeiseplan)
return mensaSpeiseplanJson
def getFoodplanName(soup):
foodplan_name = soup.select('.mensamenu h2')[0].getText()
return foodplan_name

View File

@ -3,16 +3,18 @@
import requests
from bs4 import BeautifulSoup
import urllib
import datetime
from shutil import copyfile
OUTPUTFILE = "../ofu-food.html"
CSSFILE_DEST = "../bootstrap.css"
CSSFILE_WEB = "bootstrap.css"
# OUTPUTFILE = "/media/data_1/www/pub-html/ofu-food.html"
# CSSFILE = "/media/data_1/www/pub-html/bootstrap.css"
# OUTPUTFILE = "../ofu-food.html"
OUTPUTFILE = "/media/data_1/www/pub-html/ofu-food.html"
CSSFILE_SRC = "../bootstrap-4.0.0-beta-dist/css/bootstrap.css"
CSSFILE = "/media/data_1/www/pub-html/bootstrap.css"
LINK_FEKI_MENSA = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=3&tx_thmensamenu_pi2%5Baction%5D=show&tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&cHash=c3fe5ebb35e5fba3794f01878e798b7c"
LINK_AUSTR_MENSA = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/speiseplaene.html?tx_thmensamenu_pi2%5Bmensen%5D=2&tx_thmensamenu_pi2%5Baction%5D=show&tx_thmensamenu_pi2%5Bcontroller%5D=Speiseplan&cHash=511e047953ee1370c3b82c11a04624bb"
LINK_ERBA_CAFETE = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/sonderspeiseplaene/cafeteria-erba-insel.html"
@ -25,7 +27,7 @@ def getHtmlHeader():
head += '<meta charset="utf-8">'
head += '<meta name="description" content="Sammelwebsite für das Essen der Uni Bamberg">'
head += '<meta name="keywords" content="OFU, Otto-Friedrich, Universität, Bamberg">'
head += '<link rel="stylesheet" href="' + CSSFILE + '">'
head += '<link rel="stylesheet" href="' + CSSFILE_WEB + '">'
head += '<title>Essen an der OFU</title>'
head += '</head>'
return head
@ -42,12 +44,28 @@ def getFoodHtml(erbaHtml, markusHtml, austrHtml, fekiHtml, happyHourHtml):
html += '<body>'
html += getExecuteTime()
html += '<div class="container">'
html += '<div class="row">'
html += '<div class="col">'
html += str(erbaHtml)
html += '</div>'
html += '<div class="col">'
html += str(markusHtml)
html += '</div>'
html += '</div>'
html += '<div class="row">'
html += '<div class="col">'
html += str(austrHtml)
html += '</div>'
html += '<div class="col">'
html += str(fekiHtml)
html += '</div>'
html += '</div>'
html += '<div class="row">'
html += '<div class="col">'
html += str(happyHourHtml)
html += '</div>'
html += '</div>'
html += '</div>'
html += '</body>'
html += '</html>'
return html
@ -144,4 +162,4 @@ def main():
main()
copyfile(CSSFILE_SRC, CSSFILE)
copyfile(CSSFILE_SRC, CSSFILE_DEST)

View File

@ -0,0 +1,81 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="description" content="Sammelwebsite für das Essen der Uni Bamberg">
<meta name="keywords" content="OFU, Otto-Friedrich, Universität, Bamberg">
<link rel="stylesheet" href=" {{ cssfile }} ">
<title>Essen an der OFU</title>
</head>
<body>
<h1>Food for Students</h1>
<p>Last execute: {{ executiontime }}</p>
<div class="container">
<div class="row">
<div class="col">
<h2>{{ erbaCafeteTitle }}</h2>
{% for menu in erbaWeekmenu %}
<p><span>{{ menu.date }}</span><span>{{ menu.menu[0] }}</span></p>
{% endfor %}
</div>
<div class="col">
<h2>{{ markusCafeteTitle }}</h2>
{% for menu in markusWeekmenu %}
<p><span>{{ menu.date }}</span><span>{{ menu.menu[0] }}</span></p>
{% endfor %}
</div>
</div>
<div class="row">
<div class="col">
<h2>{{ austrMensaTitle }}</h2>
{% for dayMenu in austrWeekmenu %}
<h3>{{ dayMenu.date }}</h3>
{% for singleFood in dayMenu.menu %}
<p>{{ singleFood }}</p>
{% endfor %}
{% endfor %}
</div>
<div class="col">
<h2>{{ fekiMensaTitle }}</h2>
{% for dayMenu in fekiWeekmenu %}
<h3>{{ dayMenu.date }}</h3>
{% for singleFood in dayMenu.menu %}
<p>{{ singleFood }}</p>
{% endfor %}
{% endfor %}
</div>
</div>
<div class="row">
<div class="col">
<h2>Feki.de Happy Hour Guide for Food</h2>
<h3>{{ happyHourDay }}</h3>
{% if happyhours %}
<table>
<thead>
<tr>
<th>Location</th>
<th>Time</th>
<th>Description</th>
</tr>
</thead>
<tbody>
{% for happyhour in happyhours %}
<tr>
<td>{{ happyhour.location }}</td>
<td>{{ happyhour.time }}</td>
<td>{{ happyhour.description }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>Leider gibt es heute keine Happy Hours :(</p>
{% endif %}
</div>
</div>
</div>
</body>
</html>