redone site object and working dialog for news and search

This commit is contained in:
Patrice 2019-05-02 20:04:10 +02:00
parent 35f1cb3831
commit 3f0e7937c7
3 changed files with 104 additions and 40 deletions

View File

@ -11,33 +11,83 @@ ask = Ask(app, "/")
logging.getLogger('flask_ask').setLevel(logging.DEBUG) logging.getLogger('flask_ask').setLevel(logging.DEBUG)
@ask.intent('GolemSearch', @ask.intent('searchon', mapping={'site': 'Site'}, default={'site': 'golem'})
mapping={'site': 'Site', 'searchTerm':'Topic'}, def search_on(site):
default={'site': 'golem', 'searchTerm':''}) try:
def search(site, searchTerm): session.attributes["siteName"] = site
print(site, searchTerm) except:
print("error")
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() 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) articles, links = obj.search_article(searchTerm)
session.attributes["lastSearch"] = links session.attributes["lastSearch"] = links
response = "Für welchen der folgenden Artikel interessieren Sie sich?" response = "Für welchen der folgenden Artikel interessieren Sie sich?"
for i in range(0, 5):
if len(articles) > 0:
for i in range(0, max(5, len(articles))):
response += articles[i] response += articles[i]
else:
return question("Dazu konnte nichts gefunden werden. Möchten Sie nach etwas anderem Suchen?")
return question(response) session.attributes["lastCall"] = "searchfor"
@ask.intent('News', return question(response + "noch etwas?")
mapping={'site': 'Site'},
default={'site': 'golem'}) @ask.intent('News', mapping={'site': 'Site'}, default={'site': ''})
def news(site): def news(site):
print(site)
if site == "golem":
obj = site2.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() news = obj.get_news()
response = "" response = ""
for i in range(0, 5): 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) return statement(response)
@ask.intent('AMAZON.HelpIntent') @ask.intent('AMAZON.HelpIntent')
@ -45,9 +95,13 @@ def help():
speech_text = 'Dieser Skill erlaubt es Ihnen einige Nachrichten Websites zu nutzen' speech_text = 'Dieser Skill erlaubt es Ihnen einige Nachrichten Websites zu nutzen'
return statement(speech_text) return statement(speech_text)
@ask.intent('AMAZON.FallbackIntent')
def fallback():
return statement("ein fehler ist aufgetreten")
@ask.launch @ask.launch
def launch(): def launch():
return search("golem", "gaming") return question("Was möchten Sie tun?")
@ask.session_ended @ask.session_ended
def session_ended(): def session_ended():

View File

@ -5,7 +5,17 @@ import re
class Site: class Site:
url = "" siteName = ""
baseURL = ""
searchURLString = ""
xPath = dict()
xPath["searchArticle"] = ""
xPath["searchLinks"] = ""
xPath["newsArticle"] = ""
xPath["readHeadlineTitle"] = ""
xPath["readHeadlineText"] = ""
xPath["readArticleText"] = ""
header_values = { header_values = {
'Connection:' : 'Keep-alive', 'Connection:' : 'Keep-alive',
'name' : 'Michael Foord', 'name' : 'Michael Foord',
@ -15,44 +25,31 @@ class Site:
def __init__(self): def __init__(self):
return None return None
def search_article(self, topic): def search_article(self, topic):
return False searchURL = self.searchURLString + topic.replace(" ", "+")
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(" ", "+")
site = requests.get(searchURL) site = requests.get(searchURL)
tree = html.fromstring(site.content) tree = html.fromstring(site.content)
articles = tree.xpath('//span[@class="dh2 head2"]/text()') articles = tree.xpath(self.xPath["searchArticle"])
links = tree.xpath('//ol[@class="list-articles"]/li/header//@href') links = tree.xpath(self.xPath["searchLinks"])
return articles, links return articles, links
def get_news(self): def get_news(self):
searchURL = "https://www.golem.de/" searchURL = self.baseURL
site = requests.get(searchURL) site = requests.get(searchURL)
tree = html.fromstring(site.content) tree = html.fromstring(site.content)
articles = tree.xpath('//h2[@class="head2"]/text()') articles = tree.xpath(self.xPath["newsArticle"])
return articles return articles
def read_headlines(self, url): def read_headlines(self, url):
site = requests.get(url) site = requests.get(url)
tree = html.fromstring(site.content) tree = html.fromstring(site.content)
title = tree.xpath('//header/h1/span[@class="dh1 head5"]/text()') title = tree.xpath(self.xPath["readHeadlineTitle"] )
title += tree.xpath('//header/p/text()') title += tree.xpath(self.xPath["readHeadlineText"])
return title return title
def read_article(self, url): def read_article(self, url):
@ -60,5 +57,18 @@ class Golem(Site):
tree = html.fromstring(site.content) tree = html.fromstring(site.content)
title = self.read_headlines(url) title = self.read_headlines(url)
title += tree.xpath('//div[@class="formatted"]/p/text()') title += tree.xpath(self.xPath["readArticleText"])
return title 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()'