Things used in this project

Hardware components:
Echo
Amazon Alexa Amazon Echo
×1
Software apps and online services:
Dp image kit 02
Amazon Alexa Alexa Skills Kit
Screen%20shot%202015 07 20%20at%206.10.26%20pm
Amazon Web Services AWS Lambda

Schematics

Voice User Interface Diagram
User interface for Daily Dinosaur
Daily dinosaur diagram ktkprv1cgi

Code

app.jsJavaScript
Daily Dinosaur Alexa app for Node.js
'use strict';
var Alexa = require('alexa-sdk'); // Add Alexa SDK for handling events
var https = require('https');     // Add https for making network calls

// App ID for Daily Dinosaur (UK)
var APP_ID = "amzn1.ask.skill.1e1568e3-4851-450e-90d9-4b3ab99f7ffd";

// URL for HP IDOL API summery for search term
// An API key is needed for this to work
var urlPrefix = 'https://api.idolondemand.com/1/api/sync/querytextindex/v1?apikey=<ENTER API KEY HERE>&max_page_results=1&summary=quick&text=';

// Alexa response messages for handling each request
var SKILL_NAME = "Daily Dinosaur";
var GET_FACT_MESSAGE = "Here's your dinosaur: ";
var HELP_MESSAGE = "You can say tell me about a dinosaur, or, you can say exit... What can I help you with?";
var HELP_REPROMPT = "What can I help you with?";
var NO_NETWORK_MESSAGE = "There is a problem connecting to the internet at this time. Please try again later";
var STOP_MESSAGE = "Goodbye!";

// Array of over 1000 dinosaurs species
var dinosaurList = [
	"Aardonyx",
	"Abelisaurus",
	"Abrictosaurus",
	"Abrosaurus",
	"Abydosaurus",
	"Acanthopholis",
	"Achelousaurus",
	"Acheroraptor",
	"Achillesaurus",
	"Achillobator",
	"Acristavus",
	"Acrocanthosaurus",
	"Acrotholus",
	"Adamantisaurus",
	"Adasaurus",
	"Adelolophus",
	"Adeopapposaurus",
	"Aegyptosaurus",
	"Aeolosaurus",
	"Aepisaurus",
	"Aerosteon",
	"Afrovenator",
	"Agilisaurus",
	"Agnosphitys",
	"Agujaceratops",
	"Agustinia",
	"Ahshislepelta",
	"Ajancingenia",
	"Ajkaceratops",
	"Alamosaurus",
	"Alaskacephale",
	"Albalophosaurus",
	"Albertaceratops",
	"Albertadromeus",
	"Albertonykus",
	"Albertosaurus",
	"Albinykus",
	"Alcovasaurus",
	"Alectrosaurus",
	"Aletopelta",
	"Algoasaurus",
	"Alioramus",
	"Allosaurus",
	"Alnashetri",
	"Alocodon",
	"Altirhinus",
	"Altispinax",
	"Alvarezsaurus",
	"Alwalkeria",
	"Alxasaurus",
	"Amargasaurus",
	"Amargastegos",
	"Amargatitanis",
	"Amazonsaurus",
	"Ammosaurus",
	"Ampelosaurus",
	"Amphicoelias",
	"Amtocephale",
	"Amurosaurus",
	"Amygdalodon",
	"Anabisetia",
	"Anasazisaurus",
	"Anchiceratops",
	"Anchiornis",
	"Anchisaurus",
	"Andesaurus",
	"Andhrasaurus",
	"Angolatitan",
	"Angulomastacator",
	"Aniksosaurus",
	"Animantarx",
	"Ankylosaurus",
	"Anodontosaurus",
	"Anoplosaurus",
	"Anserimimus",
	"Antarctopelta",
	"Antarctosaurus",
	"Antetonitrus",
	"Anzu",
	"Aoniraptor",
	"Aorun",
	"Apatoraptor",
	"Apatosaurus",
	"Appalachiosaurus",
	"Aquilops",
	"Aragosaurus",
	"Aralosaurus",
	"Archaeoceratops",
	"Archaeodontosaurus",
	"Archaeornithoides",
	"Archaeornithomimus",
	"Arcovenator",
	"Arcusaurus",
	"Arenysaurus",
	"Argentinosaurus",
	"Argyrosaurus",
	"Aristosuchus",
	"Arkharavia",
	"Arrhinoceratops",
	"Arstanosaurus",
	"Asiaceratops",
	"Asiatosaurus",
	"Astrodon",
	"Astrophocaudia",
	"Asylosaurus",
	"Atacamatitan",
	"Atlantosaurus",
	"Atlasaurus",
	"Atlascopcosaurus",
	"Atrociraptor",
	"Atsinganosaurus",
	"Aublysodon",
	"Aucasaurus",
	"Augustynolophus",
	"Auroraceratops",
	"Aurornis",
	"Australodocus",
	"Australovenator",
	"Austrocheirus",
	"Austroposeidon",
	"Austroraptor",
	"Austrosaurus",
	"Avaceratops",
	"Aviatyrannis",
	"Avimimus",
	"Bactrosaurus",
	"Bagaceratops",
	"Bagaraatan",
	"Bahariasaurus",
	"Bainoceratops",
	"Balaur",
	"Balochisaurus",
	"Bambiraptor",
	"Banji",
	"Baotianmansaurus",
	"Barapasaurus",
	"Barilium",
	"Barosaurus",
	"Barrosasaurus",
	"Barsboldia",
	"Baryonyx",
	"Batyrosaurus",
	"Baurutitan",
	"Becklespinax",
	"Beipiaognathus",
	"Beipiaosaurus",
	"Beishanlong",
	"Bellusaurus",
	"Berberosaurus",
	"Betasuchus",
	"Bicentenaria",
	"Bienosaurus",
	"Bihariosaurus",
	"Bissektipelta",
	"Bistahieversor",
	"Blasisaurus",
	"Blikanasaurus",
	"Bolong",
	"Bonapartenykus",
	"Bonatitan",
	"Bonitasaura",
	"Borealosaurus",
	"Boreonykus",
	"Borogovia",
	"Bothriospondylus",
	"Brachiosaurus",
	"Brachyceratops",
	"Brachylophosaurus",
	"Brachypodosaurus",
	"Brachytrachelopan",
	"Bradycneme",
	"Brasilotitan",
	"Bravoceratops",
	"Breviceratops",
	"Brohisaurus",
	"Brontomerus",
	"Bruhathkayosaurus",
	"Buitreraptor",
	"Byronosaurus",
	"Caenagnathasa",
	"Caenagnathus",
	"Calamosaurus",
	"Calamospondyls",
	"Callovosauru",
	"Camarasaurus",
	"Camarillaaurus",
	"Camelotia",
	"Camposaurus",
	"Camptosaurus",
	"Campylodniscus",
	"Canardia",
	"Carcharodntosaurus",
	"Cardiodon",
	"Carnotaurus",
	"Caseosaurus",
	"Cathartesaura",
	"Cathetosaurs",
	"Caudipteryx",
	"Cedarosaurs",
	"Cedarpelta",
	"Cedrorestes",
	"Centrosaurs",
	"Cerasinops",
	"Ceratonyus",
	"Ceratops",
	"Ceratosaurus",
	"Cetiosaurisus",
	"Cetiosaurus",
	"Changchunsaurs",
	"Changyuraptor",
	"Chaoyangsauru",
	"Charonosauru",
	"Chasmosaurs",
	"Chebsaurus",
	"Chialingosauus",
	"Chiayusaurus",
	"Chilantaisarus",
	"Chilesaurus",
	"Chindesaurus",
	"Chingkankousaurus",
	"Chinshakiangoaurus",
	"Chirostenotes",
	"Chondrosteosauus",
	"Chromogisaurus",
	"Chuandongocoelrus",
	"Chuanjiesauus",
	"Chuanqilong",
	"Chubutisaurus",
	"Chungkingosauru",
	"Chuxiongsaurus",
	"Cionodon",
	"Citipati",
	"Claosaurus",
	"Clasmodosaurus",
	"Coahuilacertops",
	"Coelophysis",
	"Coeluroies",
	"Coelurus",
	"Colepiocephale",
	"Coloradisauru",
	"Comahuesaurus",
	"Compsognathu",
	"Compsosuchus",
	"Concavenator",
	"Conchoraptor",
	"Condorraptor",
	"Coronosaurus",
	"Corythosaurs",
	"Craspedodon",
	"Craterosaurus",
	"Crichtonpelta",
	"Crichtonsaurus",
	"Cristatusaurs",
	"Cruxicheiros",
	"Cryolophosauus",
	"Cryptosarus",
	"Cumnoria",
	"Daanosaurus",
	"Dacentrurus",
	"Daemonosauus",
	"Dahalokel",
	"Dakotadon",
	"Dakotaraptor",
	"Dandakosaurus",
	"Dashanpusaurus",
	"Daspletosarus",
	"Datanglong",
	"Datonglong",
	"Datousauru",
	"Daxiatitan",
	"Deinocheiru",
	"Deinonychus",
	"Delapparenti",
	"Deltadromeus",
	"Demandasauru",
	"Denversaurus",
	"Diabloceratops",
	"Diamantinsaurus",
	"Diclonius",
	"Dicraesaurus",
	"Dilong",
	"Dilophosarus",
	"Dinodocus",
	"Diplodocus",
	"Diplotomodon",
	"Dolichosuchu",
	"Dongbeititan",
	"Dongyangopelta",
	"Dongyangsaurus",
	"Draconyx",
	"Dracopelta",
	"Dracoraptor",
	"Dracovenator",
	"Dreadnoghtus",
	"Drinker",
	"Dromaeosauroies",
	"Dromaeosauru",
	"Drusilasaua",
	"Dryosaurus",
	"Dryptosauroies",
	"Dryptosaurus",
	"Dubreuilloaurus",
	"Duriatitan",
	"Duriavenator",
	"Dyoplosaurus",
	"Dysalotoaurus",
	"Dysganus",
	"Dyslocosauru",
	"Dystrophaus",
	"Echinodon",
	"Edmontonia",
	"Edmontosurus",
	"Efraasia",
	"Einiosaurus",
	"Ekrixinatsaurus",
	"Elaltitan",
	"Elaphrosauus",
	"Elmisauru",
	"Elopteryx",
	"Elrhazosauus",
	"Emausaurus",
	"Embasaurus",
	"Enigmosaurus",
	"Eoabelisaurs",
	"Eocarchaia",
	"Eocursor",
	"Eodromaes",
	"Eolambia",
	"Eomamenchisurus",
	"Eoplophyis",
	"Eoraptor",
	"Eosinoptery",
	"Eotrachodon",
	"Eotriceratps",
	"Eotyrannus",
	"Eousdryosaurus",
	"Epachthosaurus",
	"Epichirostenoes",
	"Epidexiptryx",
	"Equijubus",
	"Erectous",
	"Erketu",
	"Erliansaurus",
	"Erlikosaurus",
	"Eshanosauru",
	"Eucamerotus",
	"Eucercosaurus",
	"Eucnemesarus",
	"Euhelopus",
	"Euoplocephals",
	"Euronychodon",
	"Europasauus",
	"Europelta",
	"Euskelosaurus",
	"Eustreptopondylus",
	"Falcarius",
	"Fendusaurus",
	"Ferganasaurus",
	"Ferganastegos",
	"Ferganocephale",
	"Foraminacephal",
	"Fosteroventor",
	"Fruitadens",
	"Fukuiraptor",
	"Fukuisaurus",
	"Fukuivenatr",
	"Fukuititn",
	"Fulengia",
	"Fulgurotherum",
	"Fusuisaurus",
	"Futalognkoaurus",
	"Galeamopus",
	"Gallimimus",
	"Galveosaurus",
	"Gannansaurus",
	"Ganzhousaurus",
	"Gargoyleosarus",
	"Garudimimu",
	"Gasosaurus",
	"Gasparinsaura",
	"Gastonia",
	"Geminiraptr",
	"Genusaurus",
	"Genyodectes",
	"Geranosaurus",
	"Gideonmantelli",
	"Giganotosauru",
	"Gigantoraptor",
	"Gigantosaurus",
	"Gigantspinosauus",
	"Gilmoreosaurs",
	"Giraffatitan",
	"Glacialisurus",
	"Glishades",
	"Glyptodontoplta",
	"Gobiceratos",
	"Gobisauru",
	"Gobititan",
	"Gobivenator",
	"Gojirasaurus",
	"Gondwanatita",
	"Gongbusaurus",
	"Gongpoquansauru",
	"Gongxianosarus",
	"Gorgosaurus",
	"Goyocephale",
	"Graciliceratos",
	"Graciliraptr",
	"Gravitholus",
	"Gryphoceatops",
	"Gryponyx",
	"Gryposaurus",
	"Guaibasarus",
	"Gualicho",
	"Guanlong",
	"Hadrosaurus",
	"Haestasauus",
	"Hagryphus",
	"Halticosauus",
	"Hanssuesia",
	"Haplocanthosurus",
	"Haplocheirs",
	"Harpmimus",
	"Haya",
	"Helioceratops",
	"Heptasteornis",
	"Herrerasaurus",
	"Hesperonychus",
	"Hesperosaurus",
	"Heterodontosarus",
	"Hexinlusarus",
	"Heyuannia",
	"Hierosauru",
	"Hippodraco",
	"Histriasaurus",
	"Homalocephale",
	"Hoplitosaurus",
	"Horshamosaurs",
	"Huabeisaurus",
	"Hualianceratps",
	"Huanansaurus",
	"Huanghetitan",
	"Huangshanlong",
	"Huaxiagnathus",
	"Huayangosauus",
	"Hudiesaurus",
	"Huehuecanauhtus",
	"Hungarosauru",
	"Hylaeosaurus",
	"Hypacrosaurus",
	"Hypselosaurus",
	"Hypselospnus",
	"Hypsibema",
	"Hypsilophodon",
	"Ichthyovenator",
	"Ignavusaurus",
	"Iguanacolossus",
	"Iguanodon",
	"Iliosuchus",
	"Ilokelesia",
	"Incisivosaurus",
	"Indosaurus",
	"Indosuchus",
	"Inosaurus",
	"Irritator",
	"Isanosaurus",
	"Ischioceratops",
	"Isisaurus",
	"Itemirus",
	"Iuticosaurus",
	"Jainosaurus",
	"Jaklapallisaurus",
	"Janenschia",
	"Jaxartosaurus",
	"Jeholosaurus",
	"Jeyawati",
	"Jianchangosaurus",
	"Jiangjunosaurus",
	"Jiangshanosaurus",
	"Jiangxisaurus",
	"Jinfengopteryx",
	"Jingshanosaurus",
	"Jintasaurus",
	"Jinzhousaurus",
	"Jiutaisaurus",
	"Jobaria",
	"Jubbulpuria",
	"Judiceratops",
	"Juratyrant",
	"Juravenator",
	"Kaatedocus",
	"Kaijiangosaurus",
	"Kakuru",
	"Kangnasaurus",
	"Karongasaurus",
	"Katepensaurus",
	"Kayentavenator",
	"Kazaklambia",
	"Kelmayisaurus",
	"Kentrosaurus",
	"Kerberosaurus",
	"Khaan",
	"Khetranisaurus",
	"Kileskus",
	"Kinnareemimus",
	"Kol",
	"Komlosaurus",
	"Koparion",
	"Koreaceratops",
	"Koreanosaurus",
	"Koshisaurus",
	"Kosmoceratops",
	"Kotasaurus",
	"Koutalisaurus",
	"Kritosaurus",
	"Kryptops",
	"Kukufeldia",
	"Kulceratops",
	"Kulindadromeus",
	"Kunbarrasaurus",
	"Kundurosaurus",
	"Labocania",
	"Laevisuchus",
	"Lambeosaurus",
	"Lametasaurus",
	"Lamplughsaura",
	"Lanzhousaurus",
	"Laosaurus",
	"Lapampasaurus",
	"Laplatasaurus",
	"Lapparentosaurus",
	"Laquintasaura",
	"Latirhinus",
	"Leaellynasaura",
	"Leinkupal",
	"Leonerasaurus",
	"Lepidus",
	"Leptoceratops",
	"Leptorhynchos",
	"Leshansaurus",
	"Lesothosaurus",
	"Lessemsaurus",
	"Levnesovia",
	"Lexovisaurus",
	"Leyesaurus",
	"Liaoceratops",
	"Liaoningosaurus",
	"Ligabueino",
	"Ligabuesaurus",
	"Liliensternus",
	"Limaysaurus",
	"Limusaurus",
	"Linhenykus",
	"Linheraptor",
	"Linhevenator",
	"Lirainosaurus",
	"Liubangosaurus",
	"Lohuecotitan",
	"Loncosaurus",
	"Lophorhothon",
	"Lophostropheus",
	"Loricatosaurus",
	"Loricosaurus",
	"Losillasaurus",
	"Lourinhanosaurus",
	"Lourinhasaurus",
	"Luanchuanraptor",
	"Lufengosaurus",
	"Luoyanggia",
	"Lurdusaurus",
	"Lusitanosaurus",
	"Lusotitan",
	"Lycorhinus",
	"Lythronax",
	"Machairasaurus",
	"Machairoceratops",
	"Macrogryphosaurus",
	"Macrurosaurus",
	"Magnapaulia",
	"Magnirostris",
	"Magnosaurus",
	"Magyarosaurus",
	"Mahakala",
	"Maiasaura",
	"Majungasaurus",
	"Malarguesaurus",
	"Malawisaurus",
	"Maleevus",
	"Mamenchisaurus",
	"Manidens",
	"Mandschurosaurus",
	"Mantellisaurus",
	"Mapusaurus",
	"Marisaurus",
	"Marshosaurus",
	"Martharaptor",
	"Masiakasaurus",
	"Massospondylus",
	"Maxakalisaurus",
	"Medusaceratops",
	"Megalosaurus",
	"Megaraptor",
	"Mei",
	"Melanorosaurus",
	"Mendozasaurus",
	"Mercuriceratops",
	"Meroktenos",
	"Metriacanthosaurus",
	"Microceratus",
	"Microcoelus",
	"Microhadrosaurus",
	"Micropachycephalosaurus",
	"Microraptor",
	"Microvenator",
	"Minmi",
	"Miragaia",
	"Mirischia",
	"Mochlodon",
	"Mongolosaurus",
	"Monkonosaurus",
	"Monoclonius",
	"Monolophosaurus",
	"Mononykus",
	"Montanoceratops",
	"Morelladon",
	"Morinosaurus",
	"Morrosaurus",
	"Mosaiceratops",
	"Murusraptor",
	"Mussaurus",
	"Muttaburrasaurus",
	"Muyelensaurus",
	"Mymoorapelta",
	"Naashoibitosaurus",
	"Nambalia",
	"Nankangia",
	"Nanningosaurus",
	"Nanosaurus",
	"Nanshiungosaurus",
	"Nanuqsaurus",
	"Nanyangosaurus",
	"Narambuenatitan",
	"Nasutoceratops",
	"Natronasaurus",
	"Nebulasaurus",
	"Nedcolbertia",
	"Neimongosaurus",
	"Nemegtomaia",
	"Nemegtosaurus",
	"Neosodon",
	"Neovenator",
	"Neuquenraptor",
	"Neuquensaurus",
	"Nigersaurus",
	"Ningyuansaurus",
	"Niobrarasaurus",
	"Nipponosaurus",
	"Noasaurus",
	"Nodocephalosaurus",
	"Nodosaurus",
	"Nomingia",
	"Nopcsaspondylus",
	"Normanniasaurus",
	"Nothronychus",
	"Notoceratops",
	"Notocolossus",
	"Notohypsilophodon",
	"Nqwebasaurus",
	"Nuthetes",
	"Ohmdenosaurus",
	"Ojoraptorsaurus",
	"Olorotitan",
	"Omeisaurus",
	"Oplosaurus",
	"Orkoraptor",
	"Ornithodesmus",
	"Ornitholestes",
	"Ornithomimoides",
	"Ornithomimus",
	"Ornithopsis",
	"Orodromeus",
	"Orthogoniosaurus",
	"Orthomerus",
	"Oryctodromeus",
	"Osmakasaurus",
	"Ostafrikasaurus",
	"Othnielia",
	"Othnielosaurus",
	"Otogosaurus",
	"Ouranosaurus",
	"Overosaurus",
	"Oviraptor",
	"Owenodon",
	"Oxalaia",
	"Ozraptor",
	"Pachycephalosaurus",
	"Pachyrhinosaurus",
	"Pachysuchus",
	"Padillasaurus",
	"Pakisaurus",
	"Palaeoscincus",
	"Paludititan",
	"Pampadromaeus",
	"Pamparaptor",
	"Panamericansaurus",
	"Panguraptor",
	"Panoplosaurus",
	"Panphagia",
	"Pantydraco",
	"Paralititan",
	"Paranthodon",
	"Pararhabdodon",
	"Parasaurolophus",
	"Parksosaurus",
	"Paronychodon",
	"Parrosaurus",
	"Parvicursor",
	"Patagonykus",
	"Patagosaurus",
	"Pawpawsaurus",
	"Pectinodon",
	"Pedopenna",
	"Pegomastax",
	"Peishansaurus",
	"Pelecanimimus",
	"Pellegrinisaurus",
	"Peloroplites",
	"Pelorosaurus",
	"Penelopognathus",
	"Pentaceratops",
	"Petrobrasaurus",
	"Phaedrolosaurus",
	"Philovenator",
	"Phuwiangosaurus",
	"Phyllodon",
	"Piatnitzkysaurus",
	"Picrodon",
	"Pinacosaurus",
	"Pisanosaurus",
	"Pitekunsaurus",
	"Piveteausaurus",
	"Planicoxa",
	"Plateosauravus",
	"Plateosaurus",
	"Platyceratops",
	"Plesiohadros",
	"Pneumatoraptor",
	"Podokesaurus",
	"Poekilopleuron",
	"Polacanthus",
	"Polyonax",
	"Ponerosteus",
	"Pradhania",
	"Prenocephale",
	"Prenoceratops",
	"Priconodon",
	"Priodontognathus",
	"Proa",
	"Probrachylophosaurus",
	"Probactrosaurus",
	"Proceratosaurus",
	"Procompsognathus",
	"Prodeinodon",
	"Propanoplosaurus",
	"Prosaurolophus",
	"Protarchaeopteryx",
	"Protoceratops",
	"Protognathosaurus",
	"Protohadros",
	"Psittacosaurus",
	"Pteropelyx",
	"Pterospondylus",
	"Puertasaurus",
	"Pukyongosaurus",
	"Pulanesaura",
	"Pycnonemosaurus",
	"Pyroraptor",
	"Qantassaurus",
	"Qianzhousaurus",
	"Qiaowanlong",
	"Qijianglong",
	"Qinlingosaurus",
	"Qingxiusaurus",
	"Qiupalong",
	"Quaesitosaurus",
	"Quetecsaurus",
	"Quilmesaurus",
	"Rahiolisaurus",
	"Rajasaurus",
	"Rapator",
	"Rapetosaurus",
	"Raptorex",
	"Ratchasimasaurus",
	"Rativates",
	"Rayososaurus",
	"Rebbachisaurus",
	"Regaliceratops",
	"Regnosaurus",
	"Rhabdodon",
	"Rhoetosaurus",
	"Riabininohadros",
	"Richardoestesia",
	"Rinchenia",
	"Rinconsaurus",
	"Riojasaurus",
	"Rocasaurus",
	"Rubeosaurus",
	"Ruehleia",
	"Rugocaudia",
	"Rugops",
	"Rukwatitan",
	"Ruyangosaurus",
	"Sahaliyania",
	"Saichania",
	"Saldamosaurus",
	"Saltasaurus",
	"Sanjuansaurus",
	"Sanpasaurus",
	"Santanaraptor",
	"Sarahsaurus",
	"Sarcolestes",
	"Sarcosaurus",
	"Sarmientosaurus",
	"Saturnalia",
	"Saurolophus",
	"Sauroniops",
	"Sauropelta",
	"Saurophaganax",
	"Sauroplites",
	"Sauroposeidon",
	"Saurornithoides",
	"Saurornitholestes",
	"Savannasaurus",
	"Scansoriopteryx",
	"Scelidosaurus",
	"Scipionyx",
	"Sciurumimus",
	"Scolosaurus",
	"Scutellosaurus",
	"Secernosaurus",
	"Sefapanosaurus",
	"Segisaurus",
	"Segnosaurus",
	"Seitaad",
	"Sellacoxa",
	"Serendipaceratops",
	"Shamosaurus",
	"Shanag",
	"Shantungosaurus",
	"Shanyangosaurus",
	"Shaochilong",
	"Shenzhousaurus",
	"Shidaisaurus",
	"Shixinggia",
	"Shuangmiaosaurus",
	"Shunosaurus",
	"Shuvuuia",
	"Siamodon",
	"Siamodracon",
	"Siamosaurus",
	"Siamotyrannus",
	"Siats",
	"Sibirosaurus",
	"Sigilmassasaurus",
	"Siluosaurus",
	"Silvisaurus",
	"Similicaudipteryx",
	"Sinocalliopteryx",
	"Sinoceratops",
	"Sinocoelurus",
	"Sinopeltosaurus",
	"Sinornithoides",
	"Sinornithomimus",
	"Sinornithosaurus",
	"Sinosauropteryx",
	"Sinosaurus",
	"Sinotyrannus",
	"Sinovenator",
	"Sinraptor",
	"Sinusonasus",
	"Sirindhorna",
	"Skorpiovenator",
	"Sonidosaurus",
	"Sonorasaurus",
	"Sphaerotholus",
	"Sphenospondylus",
	"Spiclypeus",
	"Spinophorosaurus",
	"Spinops",
	"Spinosaurus",
	"Spinostropheus",
	"Staurikosaurus",
	"Stegoceras",
	"Stegopelta",
	"Stegosaurides",
	"Stegosaurus",
	"Stenopelix",
	"Stokesosaurus",
	"Stormbergia",
	"Streptospondylus",
	"Struthiomimus",
	"Struthiosaurus",
	"Styracosaurus",
	"Suchomimus",
	"Sulaimanisaurus",
	"Supersaurus",
	"Suuwassea",
	"Suzhousaurus",
	"Szechuanosaurus",
	"Tachiraptor",
	"Talarurus",
	"Talenkauen",
	"Talos",
	"Tambatitanis",
	"Tangvayosaurus",
	"Tanius",
	"Tanycolagreus",
	"Tanystrosuchus",
	"Taohelong",
	"Tapuiasaurus",
	"Tarascosaurus",
	"Tarbosaurus",
	"Tarchia",
	"Tastavinsaurus",
	"Tatankacephalus",
	"Tataouinea",
	"Tatisaurus",
	"Taurovenator",
	"Taveirosaurus",
	"Tawa",
	"Tazoudasaurus",
	"Tehuelchesaurus",
	"Teinurosaurus",
	"Telmatosaurus",
	"Tendaguria",
	"Tenontosaurus",
	"Teratophoneus",
	"Tethyshadros",
	"Texacephale",
	"Texasetes",
	"Teyuwasu",
	"Thecocoelurus",
	"Thecodontosaurus",
	"Thecospondylus",
	"Theiophytalia",
	"Therizinosaurus",
	"Thescelosaurus",
	"Tianchisaurus",
	"Tianyulong",
	"Tianyuraptor",
	"Tichosteus",
	"Tienshanosaurus",
	"Timimus",
	"Timurlengia",
	"Titanoceratops",
	"Titanosaurus",
	"Tochisaurus",
	"Tonganosaurus",
	"Tongtianlong",
	"Tornieria",
	"Torosaurus",
	"Torvosaurus",
	"Tototlmimus",
	"Trachodon",
	"Traukutitan",
	"Triceratops",
	"Trigonosaurus",
	"Trimucrodon",
	"Trinisaura",
	"Troodon",
	"Tsaagan",
	"Tsagantegia",
	"Tsintaosaurus",
	"Tugulusaurus",
	"Tuojiangosaurus",
	"Turanoceratops",
	"Turiasaurus",
	"Tylocephale",
	"Tyrannosaurus",
	"Tyrannotitan",
	"Uberabatitan",
	"Udanoceratops",
	"Ugrunaaluk",
	"Ultrasaurus",
	"Unaysaurus",
	"Unenlagia",
	"Unescoceratops",
	"Unquillosaurus",
	"Urbacodon",
	"Utahceratops",
	"Utahraptor",
	"Vagaceratops",
	"Vahiny",
	"Valdoraptor",
	"Valdosaurus",
	"Variraptor",
	"Vectisaurus",
	"Velafrons",
	"Velocipes",
	"Velociraptor",
	"Velocisaurus",
	"Venenosaurus",
	"Veterupristisaurus",
	"Viavenator",
	"Vitakridrinda",
	"Vitakrisaurus",
	"Volkheimeria",
	"Vulcanodon",
	"Wakinosaurus",
	"Walgettosuchus",
	"Wannanosaurus",
	"Wendiceratops",
	"Wiehenvenator",
	"Willinakaqe",
	"Wintonotitan",
	"Wuerhosaurus",
	"Wulagasaurus",
	"Wulatelong",
	"Xenoceratops",
	"Xenoposeidon",
	"Xenotarsosaurus",
	"Xianshanosaurus",
	"Xiaosaurus",
	"Xiaotingia",
	"Xinjiangovenator",
	"Xinjiangtitan",
	"Xiongguanlong",
	"Xixianykus",
	"Xixiasaurus",
	"Xixiposaurus",
	"Xuanhanosaurus",
	"Xuanhuaceratops",
	"Xuwulong",
	"Yamaceratops",
	"Yandusaurus",
	"Yangchuanosaurus",
	"Yaverlandia",
	"Yi",
	"Yimenosaurus",
	"Yingshanosaurus",
	"Yinlong",
	"Yixianosaurus",
	"Yongjinglong",
	"Yuanmousaurus",
	"Yueosaurus",
	"Yulong",
	"Yunganglong",
	"Yunmenglong",
	"Yunnanosaurus",
	"Yurgovuchia",
	"Yutyrannus",
	"Zalmoxes",
	"Zanabazar",
	"Zapalasaurus",
	"Zapsalis",
	"Zaraapelta",
	"Zby",
	"Zephyrosaurus",
	"Zhanghenglong",
	"Zhejiangosaurus",
	"Zhenyuanlong",
	"Zhongornis",
	"Zhuchengceratops",
	"Zhuchengtyrannus",
	"Ziapelta",
	"Zigongosaurus",
	"Zizhongosaurus",
	"Zuniceratops",
	"Zuolong",
	"Zuoyunlong",
	"Zupaysaurus"
];

// Register event handlers with Alexa SDK
exports.handler = function(event, context, callback) {
    var alexa = Alexa.handler(event, context);
    alexa.APP_ID = APP_ID;
    alexa.registerHandlers(handlers);
    alexa.execute();
};

//Handles each app requests
var handlers = {
    'LaunchRequest': function () {         // Run at app launch
        this.emit('GetDinosaurIntent');
    },
    'GetDinosaurIntent': function () {     // Run when user requests a dinosaur
        var alexasdk = this;
        getJsonEventsFromWikipedia(function (summary) {
            var speechOutput = GET_FACT_MESSAGE + summary;
            if (summary.length === 0) {
                speechOutput = NO_NETWORK_MESSAGE;
            }
            alexasdk.emit(':tellWithCard', speechOutput, SKILL_NAME, summary)
        });
    },
    'AMAZON.HelpIntent': function () {     // Called when user asks for help
        var speechOutput = HELP_MESSAGE;
        var reprompt = HELP_REPROMPT;
        this.emit(':ask', speechOutput, reprompt);
    },
    'AMAZON.CancelIntent': function () {   // Called when user cancels app
        this.emit(':tell', STOP_MESSAGE);
    },
    'AMAZON.StopIntent': function () {     // Called when user exits app
        this.emit(':tell', STOP_MESSAGE);
    }
};

// Network call for returning a discription of a dinosaur randomly selected from the dinosaur list
function getJsonEventsFromWikipedia(eventCallback) {
	var index = getRandomInt(0, dinosaurList.length - 1);
    var url = urlPrefix + dinosaurList[index];

    https.get(url, function(res) {
        var body = '';

        res.on('data', function (chunk) {
            body += chunk;
        });

        res.on('end', function () {
            var stringResult = parseJson(body);
            eventCallback(stringResult);
        });
    }).on('error', function (e) {
        console.log("Got error: ", e);
    });
}

// Returns a randon integer
function getRandomInt(min, max) {
	min = Math.ceil(min);
	max = Math.floor(max);
	return Math.floor(Math.random() * (max - min)) + min;
}

// Parses the response from the dinosaur description network call in clean and complete sentences
function parseJson(inputText) {
    var text = inputText.substring(inputText.indexOf("summary")+10, inputText.indexOf("wikipedia_category"));
    text = text.slice(0, text.lastIndexOf(".") + 1);
    if (text.indexOf("(") >= 0 && text.indexOf(")") >= 0) {
        text = text.slice(0, text.indexOf("(") - 1) + text.slice(text.indexOf(")") + 1)
    }
    return text;
}

Credits

Dscn0986
Brian Cottrell

I am a software developer with a background in physics and low level programming and I am currently focused on web and mobile development.

Contact

Replications

Did you replicate this project? Share it!

I made one

Love this project? Think it could be improved? Tell us what you think!

Give feedback

Comments

Similar projects you might like

Cryptocurrency Price Checker!
Easy
  • 147
  • 2

Full instructions

With the recent rise in cryptocurrencies, this Price Checker will keep you up to date with the most recent market fluctuations!

Trademark Master
Easy
  • 319
  • 10

Work in progress

Trademark Master tells you if any string has already been registered.

Opening Bell
Easy
  • 1,537
  • 23

Full instructions

A simple Alexa voice skill to retrieve the current performance of a publicly traded stock (NASDAQ, NYSE) using the company name.

Brick Bot
Easy
  • 704
  • 14

Protip

A one-stop-skill for your LEGO® needs! Alexa can tell you available sets, themes, and sub-themes and give you details based on set numbers.

Funny Quoter
Easy
  • 324
  • 8

Full instructions

This has some of the weirdest quotes up her sleeve! If you're feeling blue, and need something to cheer you up, just call on Funny Quoter.

Voice Control RGB LED
Easy
  • 7,633
  • 41

Full instructions

Control your rgb kitchen lighting with Alexa and Photon.

Add projectSign up / Login