diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2014-07-23 21:21:17 -0700 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2014-07-23 21:21:17 -0700 |
| commit | 2c55f4da462383ee6c7b89ea44e5c40cd5badf0c (patch) | |
| tree | 078672f2b221cfb7d0aa765f438002a277914c9f /client/modules/HN.py | |
| parent | 8a5e5ed385a5c467260c2f1b20816a66cebfc1c6 (diff) | |
| download | jasper-client-2c55f4da462383ee6c7b89ea44e5c40cd5badf0c.tar.gz jasper-client-2c55f4da462383ee6c7b89ea44e5c40cd5badf0c.zip | |
Google STT works on OS X
Diffstat (limited to 'client/modules/HN.py')
| -rw-r--r-- | client/modules/HN.py | 130 |
1 files changed, 0 insertions, 130 deletions
diff --git a/client/modules/HN.py b/client/modules/HN.py deleted file mode 100644 index 493fa1d..0000000 --- a/client/modules/HN.py +++ /dev/null @@ -1,130 +0,0 @@ -import urllib2 -import re -import random -from bs4 import BeautifulSoup -import app_utils -from semantic.numbers import NumberService - -WORDS = ["HACKER", "NEWS", "YES", "NO", "FIRST", "SECOND", "THIRD"] - -PRIORITY = 4 - -URL = 'http://news.ycombinator.com' - - -class HNStory: - - def __init__(self, title, URL): - self.title = title - self.URL = URL - - -def getTopStories(maxResults=None): - """ - Returns the top headlines from Hacker News. - - Arguments: - maxResults -- if provided, returns a random sample of size maxResults - """ - hdr = {'User-Agent': 'Mozilla/5.0'} - req = urllib2.Request(URL, headers=hdr) - page = urllib2.urlopen(req).read() - soup = BeautifulSoup(page) - matches = soup.findAll('td', class_="title") - matches = [m.a for m in matches if m.a and m.text != u'More'] - matches = [HNStory(m.text, m['href']) for m in matches] - - if maxResults: - num_stories = min(maxResults, len(matches)) - return random.sample(matches, num_stories) - - return matches - - -def handle(text, mic, profile): - """ - Responds to user-input, typically speech text, with a sample of - Hacker News's top headlines, sending them to the user over email - if desired. - - Arguments: - text -- user-input, typically transcribed speech - mic -- used to interact with the user (for both input and output) - profile -- contains information related to the user (e.g., phone number) - """ - mic.say("Pulling up some stories.") - stories = getTopStories(maxResults=3) - all_titles = '... '.join(str(idx + 1) + ") " + - story.title for idx, story in enumerate(stories)) - - def handleResponse(text): - - def extractOrdinals(text): - output = [] - service = NumberService() - for w in text.split(): - if w in service.__ordinals__: - output.append(service.__ordinals__[w]) - return [service.parse(w) for w in output] - - chosen_articles = extractOrdinals(text) - send_all = chosen_articles is [] and app_utils.isPositive(text) - - if send_all or chosen_articles: - mic.say("Sure, just give me a moment") - - if profile['prefers_email']: - body = "<ul>" - - def formatArticle(article): - tiny_url = app_utils.generateTinyURL(article.URL) - - if profile['prefers_email']: - return "<li><a href=\'%s\'>%s</a></li>" % (tiny_url, - article.title) - else: - return article.title + " -- " + tiny_url - - for idx, article in enumerate(stories): - if send_all or (idx + 1) in chosen_articles: - article_link = formatArticle(article) - - if profile['prefers_email']: - body += article_link - else: - if not app_utils.emailUser(profile, SUBJECT="", BODY=article_link): - mic.say( - "I'm having trouble sending you these articles. Please make sure that your phone number and carrier are correct on the dashboard.") - return - - # if prefers email, we send once, at the end - if profile['prefers_email']: - body += "</ul>" - if not app_utils.emailUser(profile, SUBJECT="From the Front Page of Hacker News", BODY=body): - mic.say( - "I'm having trouble sending you these articles. Please make sure that your phone number and carrier are correct on the dashboard.") - return - - mic.say("All done.") - - else: - mic.say("OK I will not send any articles") - - if not profile['prefers_email'] and profile['phone_number']: - mic.say("Here are some front-page articles. " + - all_titles + ". Would you like me to send you these? If so, which?") - handleResponse(mic.activeListen()) - - else: - mic.say( - "Here are some front-page articles. " + all_titles) - - -def isValid(text): - """ - Returns True if the input is related to Hacker News. - - Arguments: - text -- user-input, typically transcribed speech - """ - return bool(re.search(r'\b(hack(er)?|HN)\b', text, re.IGNORECASE)) |
