def handle(text, mic, profile): """ Responds to user-input, typically speech text, with a summary of the day's top news 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) """ tcp.send_out(tcp.is_new("Pulling up the news")) articles = getTopArticles(maxResults=3) titles = [" ".join(x.title.split(" - ")[:-1]) for x in articles] all_titles = "... ".join( str(idx + 1) + ")" + title for idx, title in enumerate(titles)) 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 = not chosen_articles and app_utils.isPositive(text) if send_all or chosen_articles: tcp.send_out("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(articles): 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): tcp.send_out( "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="Your Top Headlines", BODY=body): tcp.send_out( "I'm having trouble sending you these articles. " + "Please make sure that your phone number and " + "carrier are correct on the dashboard.") return tcp.send_out("All set") else: tcp.send_out("OK I will not send any articles") if 'phone_number' in profile: tcp.send_out("Here are the current top headlines. " + all_titles + ". Would you like me to send you these articles? " + "If so, which?") #handleResponse() else: tcp.send_out("Here are the current top headlines. " + all_titles)
def handle(text, mic, profile): """ Responds to user-input, typically speech text, with a summary of the day's top news 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) """ tcp.send_out(tcp.is_new("Pulling up the news")) articles = getTopArticles(maxResults=3) titles = [" ".join(x.title.split(" - ")[:-1]) for x in articles] all_titles = "... ".join(str(idx + 1) + ")" + title for idx, title in enumerate(titles)) 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 = not chosen_articles and app_utils.isPositive(text) if send_all or chosen_articles: tcp.send_out("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(articles): 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): tcp.send_out("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="Your Top Headlines", BODY=body): tcp.send_out("I'm having trouble sending you these articles. " + "Please make sure that your phone number and " + "carrier are correct on the dashboard.") return tcp.send_out("All set") else: tcp.send_out("OK I will not send any articles") if 'phone_number' in profile: tcp.send_out("Here are the current top headlines. " + all_titles + ". Would you like me to send you these articles? " + "If so, which?") #handleResponse() else: tcp.send_out("Here are the current top headlines. " + all_titles)