diff --git a/reader/__pycache__/siteobj.cpython-35.pyc b/reader/__pycache__/siteobj.cpython-35.pyc index 99dc716..09b8b5a 100644 Binary files a/reader/__pycache__/siteobj.cpython-35.pyc and b/reader/__pycache__/siteobj.cpython-35.pyc differ diff --git a/reader/main.py b/reader/main.py index bceb7e8..76e5796 100644 --- a/reader/main.py +++ b/reader/main.py @@ -11,33 +11,83 @@ ask = Ask(app, "/") logging.getLogger('flask_ask').setLevel(logging.DEBUG) -@ask.intent('GolemSearch', - mapping={'site': 'Site', 'searchTerm':'Topic'}, - default={'site': 'golem', 'searchTerm':''}) -def search(site, searchTerm): - print(site, searchTerm) +@ask.intent('searchon', mapping={'site': 'Site'}, default={'site': 'golem'}) +def search_on(site): + try: + session.attributes["siteName"] = site + except: + print("error") - obj = site2.Golem() + if "searchTerm" in session.attributes and session.attributes["searchTerm"] is not None and "lastCall" in session.attributes and 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": + 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 + + if site == "golem": + obj = site2.Golem() + elif site is None: + session.attributes["searchTerm"] = searchTerm + session.attributes["lastCall"] = "searchfor" + return question("Auf welcher Seite wollen Sie hiernach Suchen?") + else: + return statement("error") articles, links = obj.search_article(searchTerm) - session.attributes["lastSearch"] = links response = "Für welchen der folgenden Artikel interessieren Sie sich?" - for i in range(0, 5): - response += articles[i] - return question(response) + if len(articles) > 0: + for i in range(0, max(5, len(articles))): + response += articles[i] + else: + return question("Dazu konnte nichts gefunden werden. Möchten Sie nach etwas anderem Suchen?") -@ask.intent('News', - mapping={'site': 'Site'}, - default={'site': 'golem'}) + session.attributes["lastCall"] = "searchfor" + + return question(response + "noch etwas?") + +@ask.intent('News', mapping={'site': 'Site'}, default={'site': ''}) def news(site): - print(site) - obj = site2.Golem() + + if site == "golem": + obj = site2.Golem() + elif site == '': + session.attributes["lastCall"] = "news" + return question("Auf welcher Seite wollen Sie hiernach Suchen?") + else: + return statement("error") + news = obj.get_news() + response = "" for i in range(0, 5): - response += news[i] + response += news[i] + ". " + + session.attributes["lastCall"] = "news" + return statement(response) + +@ask.intent('SearchTwo', mapping={'number': 'Nummer'}, default={'number': 1}) +def search_answer(number): + print(number) + obj = site2.Golem() + + art = obj.read_headlines(session.attributes["lastSearch"][int(number)-1]) + response = "" + for element in art: + response += element + " " + + session.attributes["lastCall"] = "search2" return statement(response) @ask.intent('AMAZON.HelpIntent') @@ -45,9 +95,13 @@ def help(): speech_text = 'Dieser Skill erlaubt es Ihnen einige Nachrichten Websites zu nutzen' return statement(speech_text) +@ask.intent('AMAZON.FallbackIntent') +def fallback(): + return statement("ein fehler ist aufgetreten") + @ask.launch def launch(): - return search("golem", "gaming") + return question("Was möchten Sie tun?") @ask.session_ended def session_ended(): diff --git a/reader/siteobj.py b/reader/siteobj.py index 5ceab51..9e60c36 100644 --- a/reader/siteobj.py +++ b/reader/siteobj.py @@ -5,54 +5,51 @@ import re class Site: - url = "" + siteName = "" + baseURL = "" + searchURLString = "" + xPath = dict() + xPath["searchArticle"] = "" + xPath["searchLinks"] = "" + xPath["newsArticle"] = "" + xPath["readHeadlineTitle"] = "" + xPath["readHeadlineText"] = "" + xPath["readArticleText"] = "" + header_values = { 'Connection:' : 'Keep-alive', 'name' : 'Michael Foord', 'location' : 'Northampton', 'language' : 'German', 'User-Agent': 'Mozilla 4/0'} - + def __init__(self): - return None def search_article(self, topic): - return False - def get_news(self): - return False - def read_article(self, url): - return False - def read_headlines(self, url): - return False - - -class Golem(Site): - url = "golem" - def search_article(self, topic): - searchURL = "https://suche.golem.de/search.php?l=10&q=" + topic.replace(" ", "+") + searchURL = self.searchURLString + topic.replace(" ", "+") site = requests.get(searchURL) tree = html.fromstring(site.content) - articles = tree.xpath('//span[@class="dh2 head2"]/text()') - links = tree.xpath('//ol[@class="list-articles"]/li/header//@href') + articles = tree.xpath(self.xPath["searchArticle"]) + links = tree.xpath(self.xPath["searchLinks"]) return articles, links def get_news(self): - searchURL = "https://www.golem.de/" + searchURL = self.baseURL site = requests.get(searchURL) tree = html.fromstring(site.content) - articles = tree.xpath('//h2[@class="head2"]/text()') + articles = tree.xpath(self.xPath["newsArticle"]) return articles def read_headlines(self, url): site = requests.get(url) tree = html.fromstring(site.content) - title = tree.xpath('//header/h1/span[@class="dh1 head5"]/text()') - title += tree.xpath('//header/p/text()') + title = tree.xpath(self.xPath["readHeadlineTitle"] ) + title += tree.xpath(self.xPath["readHeadlineText"]) return title def read_article(self, url): @@ -60,5 +57,18 @@ class Golem(Site): tree = html.fromstring(site.content) title = self.read_headlines(url) - title += tree.xpath('//div[@class="formatted"]/p/text()') + title += tree.xpath(self.xPath["readArticleText"]) return title + + +class Golem(Site): + siteName = "golem" + baseURL = "https://www.golem.de/" + searchURLString = "https://suche.golem.de/search.php?l=10&q=" + Site.xPath["searchArticle"] = '//span[@class="dh2 head2"]/text()' + Site.xPath["searchLinks"] = '//ol[@class="list-articles"]/li/header//@href' + Site.xPath["newsArticle"] = '//h2[@class="head2"]/text()' + Site.xPath["readHeadlineTitle"] = '//header/h1/span[@class="dh1 head5"]/text()' + Site.xPath["readHeadlineText"] = '//header/p/text()' + Site.xPath["readArticleText"] = '//div[@class="formatted"]/p/text()' +