I've been trying to figure this one out for hours, to no avail.
response = requests.get("https://api.dictionaryapi.dev/api/v2/entries/en/hello") # public api
Now, the raw response.json() looks like so:
[
{
"word": "hello",
"phonetics": [
{
"audio": "https://api.dictionaryapi.dev/media/pronunciations/en/hello-au.mp3",
"sourceUrl": "https://commons.wikimedia.org/w/index.php?curid=75797336",
"license": {
"name": "BY-SA 4.0",
"url": "https://creativecommons.org/licenses/by-sa/4.0"
}
},
{
"text": "/həˈləʊ/",
"audio": "https://api.dictionaryapi.dev/media/pronunciations/en/hello-uk.mp3",
"sourceUrl": "https://commons.wikimedia.org/w/index.php?curid=9021983",
"license": {
"name": "BY 3.0 US",
"url": "https://creativecommons.org/licenses/by/3.0/us"
}
},
{
"text": "/həˈloʊ/",
"audio": ""
}
],
"meanings": [
{
"partOfSpeech": "noun",
"definitions": [
{
"definition": "\"Hello!\" or an equivalent greeting.",
"synonyms": [],
"antonyms": []
}
],
"synonyms": [
"greeting"
],
"antonyms": []
},
{
"partOfSpeech": "verb",
"definitions": [
{
"definition": "To greet with \"hello\".",
"synonyms": [],
"antonyms": []
}
],
"synonyms": [],
"antonyms": []
},
{
"partOfSpeech": "interjection",
"definitions": [
{
"definition": "A greeting (salutation) said when meeting someone or acknowledging someone’s arrival or presence.",
"synonyms": [],
"antonyms": [],
"example": "Hello, everyone."
},
{
"definition": "A greeting used when answering the telephone.",
"synonyms": [],
"antonyms": [],
"example": "Hello? How may I help you?"
},
{
"definition": "A call for response if it is not clear if anyone is present or listening, or if a telephone conversation may have been disconnected.",
"synonyms": [],
"antonyms": [],
"example": "Hello? Is anyone there?"
},
{
"definition": "Used sarcastically to imply that the person addressed or referred to has done something the speaker or writer considers to be foolish.",
"synonyms": [],
"antonyms": [],
"example": "You just tried to start your car with your cell phone. Hello?"
},
{
"definition": "An expression of puzzlement or discovery.",
"synonyms": [],
"antonyms": [],
"example": "Hello! What’s going on here?"
}
],
"synonyms": [],
"antonyms": [
"bye",
"goodbye"
]
}
],
"license": {
"name": "CC BY-SA 3.0",
"url": "https://creativecommons.org/licenses/by-sa/3.0"
},
"sourceUrls": [
"https://en.wiktionary.org/wiki/hello"
]
}
]
The goal is to return the values of partOfSpeech and definition for however many times they appear in meanings.
In the above case (for the word hello), I'd do:
for i in response.json():
print(
f'{i["meanings"][0]["partOfSpeech"]}: {i["meanings"][0]["definitions"][0]["definition"]}\n
{i["meanings"][1]["partOfSpeech"]}: {i["meanings"][1]["definitions"][0]["definition"]}\n
{i["meanings"][2]["partOfSpeech"]}: {i["meanings"][2]["definitions"][0]["definition"]}')
This returns:
noun: "Hello!" or an equivalent greeting.
verb: To greet with "hello".
interjection: A greeting (salutation) said when meeting someone or acknowledging someone’s arrival or presence.
However:
a) This is missing 4 more definition values for interjection.
b - and more importantly) for other words, the responses count vary altogether.
Obviously this needs the right loop (or perhaps regex) to return correct results for 'any' dictionary API query.
I tried json.loads as well as various key, value loops but all I keep getting are nasty KeyErrors upon TypeErrors.
Please help! Thanks so much!