From d4974c0e5cb6dee64598796ea77926c1fefb3650 Mon Sep 17 00:00:00 2001
From: Aleksej Vanin
Date: Fri, 13 Oct 2017 16:49:01 +0300
Subject: [PATCH] First working version, prerelease
---
src/main.py | 34 ++++++-----
src/server.conf | 4 ++
src/web/fl.html | 47 ++++++++++++++++
src/web/fl_template_main.html | 54 ++++++++++++++++++
src/web/fl_template_stream.html | 6 ++
src/web/style.css | 99 +++++++++++++++++++++++++++++++++
6 files changed, 231 insertions(+), 13 deletions(-)
create mode 100644 src/web/fl.html
create mode 100644 src/web/fl_template_main.html
create mode 100644 src/web/fl_template_stream.html
create mode 100644 src/web/style.css
diff --git a/src/main.py b/src/main.py
index 0d27c8c..d811a28 100755
--- a/src/main.py
+++ b/src/main.py
@@ -11,38 +11,46 @@ class FleastServer(object):
try:
with open('.token', 'r') as reader:
self.twitch_token = reader.read().strip()
- except:
- print("Cannot read token for twitch app, abort.")
+ with open('./web/fl.html', 'r') as reader:
+ self.index = reader.read()
+ with open('./web/fl_template_main.html', 'r') as reader:
+ self.templ_main = reader.read()
+ with open('./web/fl_template_stream.html', 'r') as reader:
+ self.templ_stream = reader.read()
+ except e:
+ print("Cannot read token for twitch app or templates, abort.")
exit(1)
self.client = TwitchClient(self.twitch_token, freq = 1)
-
+
@cherrypy.expose
def index(self):
return 'Hello World'
@cherrypy.expose
- def fleast(self, game, lang):
+ def fleast(self, game=None, lang=None):
+ if game is None and lang is None:
+ return self.index
cherrypy.log('Getting game:"%s" language:%s' % (game, lang))
data = self.client.get_streams(game, lang)
if data is None:
- return 'Error!' #Do better
+ return 'Internal Error' #Do Better
+
if data['_total'] == 0:
- return 'No streams found' #Do better
+ return self.templ_main.format(data['_total'], '')
cherrypy.log('Found %d streams' % data['_total'])
- result = 'Test'
streams = sorted(data['streams'], key=lambda k: k['viewers'])
- count = 0
+ result_str = ''
for s in streams:
- result += '
{2} :: {3}
{4}
'.format( \
- s['channel']['url'], s['preview']['medium'], s['channel']['status'], \
- s['channel']['display_name'], s['viewers'])
- return result
+ result_str += self.templ_stream.format(s['channel']['url'], s['preview']['medium'],s['channel']['status'], \
+ s['channel']['display_name'], s['viewers']) +'\n'
+ return self.templ_main.format(data['_total'], result_str)
def main():
- cherrypy.quickstart(FleastServer())
+ server = FleastServer()
+ cherrypy.quickstart(server, '/','./server.conf')
if __name__ == '__main__':
diff --git a/src/server.conf b/src/server.conf
index c480dbc..342d24f 100644
--- a/src/server.conf
+++ b/src/server.conf
@@ -1,2 +1,6 @@
[global]
server.socket_port: 8080
+
+[/style.css]
+tools.staticfile.on = True
+tools.staticfile.filename = "/home/alexvanin/tmp/av/fleast/fleast/src/web/style.css"
diff --git a/src/web/fl.html b/src/web/fl.html
new file mode 100644
index 0000000..bbec523
--- /dev/null
+++ b/src/web/fl.html
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+ FLeast
+
+
+
+
+
+
+
+
+ Usage:
+ Write down a game name and choose language
+
+
+
+
+
+
+
+
diff --git a/src/web/fl_template_main.html b/src/web/fl_template_main.html
new file mode 100644
index 0000000..71f3833
--- /dev/null
+++ b/src/web/fl_template_main.html
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+ FLeast
+
+
+
+
+
+
+
+
+ Usage:
+ Write down a game name and choose language
+
+
+
+
+ Found {0} streams:
+
+
+{1}
+
+
+
+
+
+
+
diff --git a/src/web/fl_template_stream.html b/src/web/fl_template_stream.html
new file mode 100644
index 0000000..7da688e
--- /dev/null
+++ b/src/web/fl_template_stream.html
@@ -0,0 +1,6 @@
+
+
+
{2}
+
{3}
+
:{4}
+
diff --git a/src/web/style.css b/src/web/style.css
new file mode 100644
index 0000000..960a020
--- /dev/null
+++ b/src/web/style.css
@@ -0,0 +1,99 @@
+body{background: #333333; line-height:1; font-family: arial;}
+h1{font-size: 25px;}h2{font-size: 21px;}h3{font-size: 18px;}h4{font-size: 16px;}
+table{border-collapse:collapse;border-spacing:0}
+hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}
+
+#pageContent {
+ margin:0;padding:0;border:0;outline:0
+ max-width: 1000px;
+ margin: auto;
+ border: none;
+}
+
+#header {
+ padding:10px;
+
+}
+
+main {
+ float: left;
+ width: 60%;
+}
+aside {
+ float: right;
+ width: 30%;
+}
+article {
+ border-bottom: 2px dotted #999;
+ padding-bottom: 20px;
+ margin-bottom: 20px;
+}
+article h2 {
+ font-weight: normal;
+ margin-bottom: 12px;
+}
+article p {
+
+}
+main section {
+
+}
+footer {
+ background: #AEC6CF;
+ max-width: 1000px;
+ margin: auto;
+ clear: both;
+ text-align: right;
+}
+footer p {
+ padding: 20px;
+}
+
+aside > div {
+ margin: 10px auto;
+ background: #AEC6CF;
+ min-height: 100px;
+}
+
+body > section {
+ max-width: 1000px;
+ margin: auto;
+ padding: 30px 0px;
+ border-bottom: 1px solid #999;
+ color: #fff;
+}
+
+table.Input td, table.Input th {
+ border: 0px solid #AAAAAA;
+ padding: 2px 2px;
+}
+
+.container {
+ display: flex;
+ flex-wrap: wrap;
+ padding: 0px 0px 0px 10px
+}
+
+.inner {
+ overflow: auto;
+ word-wrap: break-word;
+ background-color: transparent;
+ width: 330px;
+ padding: 0px 0px 30px 0px
+}
+
+.strname {
+ font-weight: bold;
+}
+
+.struser {
+ font-size: 15px;
+ font-weight: bold;
+ color: #0f0
+}
+.strviews{
+ font-size: 15px;
+ font-weight: bold;
+ color: #f00
+}
+