|
@@ -0,0 +1,72 @@
|
|
|
+import logging
|
|
|
+
|
|
|
+from core.NeuronModule import NeuronModule, InvalidParameterException
|
|
|
+import wikipedia
|
|
|
+
|
|
|
+logging.basicConfig()
|
|
|
+logger = logging.getLogger("kalliope")
|
|
|
+
|
|
|
+
|
|
|
+class Wikipedia(NeuronModule):
|
|
|
+ def __init__(self, **kwargs):
|
|
|
+ # we don't need the TTS cache for this neuron
|
|
|
+ cache = kwargs.get('cache', None)
|
|
|
+ if cache is None:
|
|
|
+ cache = False
|
|
|
+ kwargs["cache"] = cache
|
|
|
+ super(Wikipedia, self).__init__(**kwargs)
|
|
|
+
|
|
|
+ # get parameters form the neuron
|
|
|
+ self.query = kwargs.get('query', None)
|
|
|
+ self.language = kwargs.get('language', None)
|
|
|
+ self.sentences = kwargs.get('sentences', None)
|
|
|
+
|
|
|
+ self.may_refer = None
|
|
|
+ self.returncode = None
|
|
|
+
|
|
|
+ # check parameters
|
|
|
+ if self._is_parameters_ok():
|
|
|
+ # set the language
|
|
|
+ wikipedia.set_lang(self.language)
|
|
|
+ # do the summary search
|
|
|
+ try:
|
|
|
+ summary = wikipedia.summary(self.query, auto_suggest=True, sentences=self.sentences)
|
|
|
+ # if we are here, no exception raised, we got a summary
|
|
|
+ self.returncode = "SummaryFound"
|
|
|
+ except wikipedia.exceptions.DisambiguationError, e:
|
|
|
+ # Exception raised when a page resolves to a Disambiguation page.
|
|
|
+ # The options property contains a list of titles of Wikipedia pages that the query may refer to.
|
|
|
+ self.may_refer = e.options
|
|
|
+ # Removing duplicates in lists.
|
|
|
+ self.may_refer = list(set(self.may_refer))
|
|
|
+ self.returncode = "DisambiguationError"
|
|
|
+ summary = ""
|
|
|
+ except wikipedia.exceptions.PageError, e:
|
|
|
+ # Exception raised when no Wikipedia matched a query.
|
|
|
+ self.returncode = "PageError"
|
|
|
+ summary = ""
|
|
|
+
|
|
|
+ message = {
|
|
|
+ "summary": summary,
|
|
|
+ "may_refer": self.may_refer,
|
|
|
+ "returncode": self.returncode
|
|
|
+ }
|
|
|
+ logger.debug("Wikipedia returned message: %s" % str(message))
|
|
|
+
|
|
|
+ self.say(message)
|
|
|
+
|
|
|
+ def _is_parameters_ok(self):
|
|
|
+ """
|
|
|
+ Check if received parameters are ok to perform operations in the neuron
|
|
|
+ :return:
|
|
|
+ """
|
|
|
+ if self.query is None:
|
|
|
+ raise InvalidParameterException("Wikipedia needs a query")
|
|
|
+ if self.language is None:
|
|
|
+ raise InvalidParameterException("Wikipedia needs a language")
|
|
|
+
|
|
|
+ valid_language = wikipedia.languages().keys()
|
|
|
+ if self.language not in valid_language:
|
|
|
+ raise InvalidParameterException("Wikipedia needs a valid language: %s" % valid_language)
|
|
|
+
|
|
|
+ return True
|