= [[https://is.muni.cz/auth/predmet/fi/pv277|PV277 Programming Applications for Social Robots]] (autumn 2019) = == How to get info from web? === Use API If API exists, you can usually use JSON data after send the right parameters. Example to get weather data. {{{#!python import requests url = "http://api.openweathermap.org/data/2.5/weather" params = {'q': 'Brno', 'units': 'metric', 'lang': 'cz'} r = requests.get(url=url, params=params) data = r.json() print(data['main']['temp']) }}} (Full example [raw-attachment:forecast.py:wiki:en/ProgrammingRobotsCourse/GettingWwwInfo forecast.py] ) === Parse webpage data If no API is provided, you can download and parse the webpage. {{{#!python from bs4 import BeautifulSoup import requests page = requests.get(url).text soup = BeautifulSoup(page, features="lxml") results = soup.findAll('h2', attrs={'class':'article-title'}) }}} (Full example [raw-attachment:news.py:wiki:en/ProgrammingRobotsCourse/GettingWwwInfo news.py]) == How to integrate info with robot? === Dialog variables In dialog file, set value of variable, use it in Python script in behavior. {{{#!python u:(["Můj [oblíbený nejoblíbenější] tým je" "Fandím {týmu}"] _*) $team=$1 }}} First word after sentence is available in {{{$1}}} and passed to the script as {{{team}}} variable. {{{#!python def onInput_onStart(self, team): self.team_usr = team }}} === Use TTS in script {{{#!python veta = self.team_name + " má " + str(act_team.points) + " bodů" self.tts.say(veta) }}} === Run script as service and parse service output Specify service script in manifest.xml: {{{#!xml }}} In dialog, detect variables, pass them to service, and parse call result to say answer: {{{ u:(rozvrh) Pro jakou místnost bys chtěl znát rozvrh? u1:({pro} {místnost učebnu} _~letter _~number) Podívám se na rozvrh pro $1 $2 ^call(Rozvrh.get_current_lesson($1, $2)) \pau=500\ c1:(In _* teaches _* course _*) V místnosti $1 je právě $3 s vyučujícím, který se jmenuje $2. c1:(In _* currently _*) V místnosti $1 je právě $2 }}} {{{u1}}} detects letter and number (concepts defined earlier in dialog) and calls {{{get_current_lesson()}}}. This function return strings, that are parsed in dialog and answer is translated to each locale. {{{#!python def get_current_lesson(self, letter, number): room = letter+str(number) lesson = self.rozvrh.find_current_lesson(room) if lesson: if lesson.teacher: teacher = lesson.teacher.split(' ')[-1] return "In %s teaches %s course %s" % (lesson.room, teacher, lesson.name) else: return "In %s currently %s" % (lesson.room, lesson.name) }}} === Run script as service and use TTS in script Detect variables in dialog, pass them to script and let script use TTS to say answer. {{{ u:("[řekni ukaž zobraz najdi] {mi} [odjezdy spoje] ze zastávky _~station_name") ^call(DialogKordisbot.say_answer1($1)) }}} Dialog detect word with station name and calls {{{say_answer1()}}}. No answer is passed back, answer is said directly in script. {{{#!python def say_answer1(self, station): #get data finalDepartures answer_msg = "First line {} goes to {} at {}, second line {} goes to {} at {}, third line {} goes to {} at {}".format(finalDepartures[0][0], finalDepartures[0][1], finalDepartures[0][2], finalDepartures[1][0], finalDepartures[1][1], finalDepartures[1][2], finalDepartures[2][0], finalDepartures[2][1], finalDepartures[2][2]) self.s.ALAnimatedSpeech.say(answer_msg) }}} == Examples Explore example applications in {{{/nlp/projekty/pepper/myapps}}}: * kordisbot * sport_bot * rozvrh