From d01e6f10eb9afaa18af6068a196ab767939d2803 Mon Sep 17 00:00:00 2001 From: Patrice Date: Mon, 13 May 2019 11:53:13 +0200 Subject: [PATCH] refactored --- reader/__pycache__/siteobj.cpython-35.pyc | Bin 3505 -> 3518 bytes reader/__pycache__/util.cpython-35.pyc | Bin 0 -> 554 bytes reader/main.py | 103 ++++++++++++---------- reader/siteobj.py | 2 + reader/util.py | 21 +++++ 5 files changed, 80 insertions(+), 46 deletions(-) create mode 100644 reader/__pycache__/util.cpython-35.pyc create mode 100644 reader/util.py diff --git a/reader/__pycache__/siteobj.cpython-35.pyc b/reader/__pycache__/siteobj.cpython-35.pyc index 6f1710410e1c4f407edcd90a271b0b46788376a7..39ceb47525faecb43bba33c3ed0088fb4b04d33a 100644 GIT binary patch delta 217 zcmdley-%7`oR^ntrs2()IU6~zvhf=+FfbHz0SN|1enuhY$#2=VGjkR(PyWq0akB-- zB1T4=&9^x@7^Btn^;0s-q8*ZR5{rv%m5Ngni;^>ROHvbyQ;U>h^$YY%QY%U{G>ce) zCRGtstnZLfl$ut=22xx$S&>I{b11h1qq-rgC5c5PnaMe+y2YuC;#T0xY>eZ q5hJ73WPV=x$-g*XPVV4{*=)-l#yB~TGlNwRsKXs7wT9VPj28eE+80Ow diff --git a/reader/__pycache__/util.cpython-35.pyc b/reader/__pycache__/util.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..298c6f912def718a0492af538520ade39799729d GIT binary patch literal 554 zcmZ9I%}T>S5XWaXO*3*{3mA z-@=nKqy5k!JNwTpGxM7{=yrF8ryuHF0DQuhNz|8k>;PScpMWL60}2V5!&*Srg3M)& zK@Xy!ol+hd-B=T@@z@qRED!}U9KAsxo4(c7=H>LNs!aY^SK2mCq34D&*nJJsGj(sZ zvFffIPt{P{qAF+VHX13TlS~^`SNY^*HgEdrSf@q&TQPnrjYB;dL>L!!N&zyuDb7%b zC>8=10EGvp$ACCogu_OG6OL{eBybF6aLvYjO(wP8P#PMn>8)DxYnFZV XwRrVBPv`ul%<750;5|~vcYW_0&$DC1 literal 0 HcmV?d00001 diff --git a/reader/main.py b/reader/main.py index 4a35a2c..c3cb906 100644 --- a/reader/main.py +++ b/reader/main.py @@ -5,102 +5,113 @@ from flask_ask import Ask, request, session, question, statement import random import yaml import siteobj as site2 +import util app = Flask(__name__) ask = Ask(app, "/") logging.getLogger('flask_ask').setLevel(logging.DEBUG) +### ### +# Helper # +### ### + +def get_site_obj(site): + if site == "golem": + obj = site2.Golem() + elif site.lower() == "spiegel": + obj = site2.Spiegel() + else: + obj = None + return obj + +### ### +# CONTROLLER # +### ### @ask.intent('searchon', mapping={'site': 'Site'}, default={'site': 'golem'}) def search_on(site): - try: - session.attributes["siteName"] = site - print(session.attributes["siteName"]) - except: - print("error") + session.attributes["siteName"] = site - if "searchTerm" in session.attributes and session.attributes["searchTerm"] is not None and "lastCall" in session.attributes and session.attributes["lastCall"] == "searchfor": + if not util.session_value_is(session.attributes, "searchTerm", None) and util.session_value_is(session.attributes, "lastCall", "searchfor"): searchTerm = session.attributes["searchTerm"] - session.attributes["searchTerm"] = None return search_for(searchTerm) - if "lastCall" in session.attributes and session.attributes["lastCall"] == "news": + + if util.session_value_is(session.attributes, "lastCall", "news"): return news(site) + session.attributes["lastCall"] = "searchon" return question("Wonach?") @ask.intent('searchfor', mapping={'searchTerm':'Topic'}, default={'searchTerm':''}) def search_for(searchTerm): - try: - site = session.attributes["siteName"] - except: - site = None + site = util.get_session_value(session.attributes, "siteName") - if site == "golem": - obj = site2.Golem() - elif site.lower() == "spiegel": - obj = site2.Spiegel() - elif site is None: + if site is not None: + obj = get_site_obj(site) + else: session.attributes["searchTerm"] = searchTerm session.attributes["lastCall"] = "searchfor" return question("Auf welcher Seite wollen Sie hiernach Suchen?") - else: - return statement("error") + + if obj is None: # should never be called + return question("Error. Auf welcher Seite wollen Sie hiernach suchen?") articles, links = obj.search_article(searchTerm) - session.attributes["lastSearch"] = links - response = "Für welchen der folgenden Artikel interessieren Sie sich?" + session.attributes["lastSearch"] = links + session.attributes["lastCall"] = "searchfor" + + response = "Für welchen der folgenden Artikel interessieren Sie sich?" if len(articles) > 0: for i in range(0, min(5, len(articles))): response += articles[i] else: return question("Dazu konnte nichts gefunden werden. Möchten Sie nach etwas anderem Suchen?") - session.attributes["lastCall"] = "searchfor" return question(response + "noch etwas?") @ask.intent('News', mapping={'site': 'Site'}, default={'site': ''}) def news(site): - try: - session.attributes["siteName"] = site - except: - print("error") - print(site) - if site == "golem": - obj = site2.Golem() - elif site.lower() == "spiegel": - obj = site2.Spiegel() - elif site == '': + site = util.get_session_value(session.attributes, "siteName") + + if site is not None: + obj = get_site_obj(site) + else: session.attributes["lastCall"] = "news" return question("Auf welcher Seite wollen Sie hiernach Suchen?") - else: + + if obj is None: return statement("error") news, links = obj.get_news() - print(news) - session.attributes["lastSearch"] = links + session.attributes["lastSearch"] = links + session.attributes["lastCall"] = "news" + response = "" for i in range(0, min(5, len(news))): response += news[i] + ". " - session.attributes["lastCall"] = "news" return question(response) @ask.intent('SearchTwo', mapping={'number': 'Nummer'}, default={'number': 1}) def search_answer(number): - try: - site = session.attributes["siteName"] - except: - site = None - print(number) - if site == "golem": - obj = site2.Golem() - elif site.lower() == "spiegel": - obj = site2.Spiegel() + site = util.get_session_value(session.attributes, "siteName") - links = session.attributes["lastSearch"] + if site is not None: + obj = get_site_obj(site) + else: + session.attributes["lastCall"] = "search_answer" + return question("Wonach wollen Sie suchen?") + + if obj is None: # should never be called + return question("Error. Wonach wollen Sie suchen?") + + + links = util.get_session_value(session.attributes, "lastSearch") + + # if the site uses relative links, make absolute ones if "http" not in str(links): newLinks = [] for link in links: diff --git a/reader/siteobj.py b/reader/siteobj.py index 8a15a86..a90f6cb 100644 --- a/reader/siteobj.py +++ b/reader/siteobj.py @@ -46,10 +46,12 @@ class Site: title += tree.xpath(self.xPath["readHeadlineText"]) return title + # not used, who wants to listen to alexa for 10 minutes? def read_article(self, url): site = requests.get(url) tree = html.fromstring(site.content) + # may need to be reworked title = self.read_headlines(url) title += tree.xpath(self.xPath["readArticleText"]) return title diff --git a/reader/util.py b/reader/util.py new file mode 100644 index 0000000..944e3c2 --- /dev/null +++ b/reader/util.py @@ -0,0 +1,21 @@ + + +def check_session_for(sessionAttributes, key): + if key in sessionAttributes: + return True + else: + return False + +# returns value to key in session if set +# returns None if not +def session_value_is(sessionAttributes, key, value): + if key in sessionAttributes and sessionAttributes[key] == value: + return True + else: + return False + +def get_session_value(sessionAttributes, key): + if key in sessionAttributes: + return sessionAttributes[key] + else: + return None