summaryrefslogtreecommitdiff
path: root/oedquery.sh
diff options
context:
space:
mode:
Diffstat (limited to 'oedquery.sh')
-rwxr-xr-xoedquery.sh148
1 files changed, 148 insertions, 0 deletions
diff --git a/oedquery.sh b/oedquery.sh
new file mode 100755
index 0000000..6bdad65
--- /dev/null
+++ b/oedquery.sh
@@ -0,0 +1,148 @@
+#!/bin/bash
+
+read word
+word=$(echo $word | tr '[:upper:]' '[:lower:]')
+appId=
+appKey=
+language=en-gb
+OPTS='--silent -L -H "app_id: $appId" -H "app_key: $appKey"'
+maxSynonyms=10
+
+# function to provide data to a for loop
+_jq() {
+ echo ${json} | base64 --decode | jq -r ${1}
+}
+
+_getdata() {
+ # Take everything after final space as the requested word (assuming everything before the last space is a flag)
+ word=$(echo $word | sed 's/.* //')
+ lemmasUrl=https://od-api.oxforddictionaries.com/api/v2/lemmas/$language/$word
+ # get lemmas to link an inflected form back to its headword (required to get definition)
+ result=$(eval curl $OPTS $lemmasUrl)
+ ret=$?
+ if [ "$ret" -ne 0 ]
+ then
+ echo "cURL error $ret when fetching."
+ exit
+ fi
+
+ # get definition of headword if it exists
+ headWord=$(echo $result | jq '.results[0].lexicalEntries[0].inflectionOf[0].id')
+ if [ "$headWord" == "null" ]
+ then
+ echo "Word not found. Use -h for help."
+ exit
+ fi
+ entriesUrl=https://od-api.oxforddictionaries.com/api/v2/entries/$language/$headWord
+ result=$(eval curl $OPTS $entriesUrl)
+ ret=$?
+ if [ "$ret" -ne 0 ]
+ then
+ echo "cURL error $ret when fetching."
+ exit
+ fi
+}
+
+# Return definition for the first sense of each lexical entry and create output string
+_define() {
+ _getdata
+ for json in $(echo "${result}" | jq -r '.results[].lexicalEntries[] | @base64')
+ do
+ output="$output $(_jq '.lexicalCategory.text'): "
+ output="$output $(_jq '.entries[0].senses[0].definitions[0]') "
+ examplePhrase=$(_jq '.entries[0].senses[0].examples[0].text')
+ if [[ "$examplePhrase" != "null" ]]
+ then
+ output=$output" "$examplePhrase
+ fi
+ done
+ echo $output
+ exit 0
+}
+
+# Return etymology if available
+_etym() {
+ _getdata
+ output=$(echo "${result}" | jq '.results[].lexicalEntries[0].entries[0].etymologies[0]' | tr -d \")
+ if [ -z "$output" ]
+ then
+ echo "No etymology found."
+ else
+ echo $output
+ fi
+ exit 0
+}
+
+# Return synonyms of first sense of first lexical entry
+_thes() {
+ _getdata
+ count=0
+ for json in $(echo "${result}" | jq -r '.results[].lexicalEntries[0].entries[0].senses[0].synonyms[] | @base64'); do
+ output="$output $(_jq '.text') "
+ ((count=count+1))
+ # Limit output to a resonable number of synonyms
+ if [[ $count -ge $maxSynonyms ]]
+ then
+ break
+ fi
+ done
+ echo $output
+ exit 0
+}
+
+# Get URL for first audio file in returned data
+_audio() {
+ _getdata
+ output=$(echo "${result}" | jq '.results[0].lexicalEntries[0].entries[0].pronunciations[0].audioFile' | tr -d \")
+ echo $output
+ exit 0
+}
+
+# Return first defintion with lexical category for Lexico's word of the day.
+_wod() {
+ # Get word from lexico
+ word=$( curl --silent https://www.lexico.com/ | hxnormalize -x | hxselect -i "a.linkword" | grep -o '>.*<' | sed 's/[><]//g')
+ _getdata
+ definition=$(echo $result | jq '.results[].lexicalEntries[].entries[0].senses[0].definitions[]')
+ lexicalCategory=$(echo $result | jq '.results[].lexicalEntries[0].lexicalCategory.text')
+ examplePhrase=$(echo $result | jq '.results[].lexicalEntries[0].entries[0].senses[0].examples[0].text')
+ # Remove surrounding quotes
+ definition=$(echo "${definition:1: -1}")
+ lexicalCategory=$(echo "${lexicalCategory:1: -1}")
+ if [[ "$examplePhrase" != "null" ]]
+ then
+ output=$word" - "$lexicalCategory" - "$definition" - "$examplePhrase
+ else
+ output=$word" - "$lexicalCategory" - "$definition
+ fi
+ echo $output
+ exit 0
+}
+
+_help() {
+ echo "Usage: !oeddefine [option] [word]. Options: -h help -t thesaurus -e etymology -d define -a audio -s source"
+ exit 0
+}
+
+if [[ ${word} == "-h" ]] || [[ ${word} == "--help" ]] || [[ -z $word ]]
+then
+ _help
+elif [[ ${word} == "--source" ]] || [[ ${word} == "-s" ]]
+then
+ echo "https://www.blatech.co.uk/ars/oeddefine"
+ exit 0
+elif [[ ${word} =~ "-t" ]]
+then
+ _thes
+elif [[ ${word} =~ "-et" ]]
+then
+ _etym
+elif [[ ${word} =~ "-a" ]]
+then
+ _audio
+elif [[ ${word} =~ "-d" ]]
+then
+ _wod
+else
+ _define
+fi