From 8516ebe2b7ac772f4f33ee141f2e03fdf4d21467 Mon Sep 17 00:00:00 2001 From: Zed Date: Sat, 29 Nov 2025 00:36:44 +0100 Subject: [PATCH] Fix 'key not found in object: expanded_url' error Fixes #1318 --- src/parser.nim | 4 ++-- src/parserutils.nim | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/parser.nim b/src/parser.nim index 7b1e1c0..9b4dc2f 100644 --- a/src/parser.nim +++ b/src/parser.nim @@ -184,7 +184,7 @@ proc parseMediaEntities(js: JsonNode; result: var Tweet) = # Remove media URLs from text with mediaList, js{"legacy", "entities", "media"}: for url in mediaList: - let expandedUrl = url{"expanded_url"}.getStr + let expandedUrl = url.getExpandedUrl if result.text.endsWith(expandedUrl): result.text.removeSuffix(expandedUrl) result.text = result.text.strip() @@ -267,7 +267,7 @@ proc parseCard(js: JsonNode; urls: JsonNode): Card = for u in ? urls: if u{"url"}.getStr == result.url: - result.url = u{"expanded_url"}.getStr + result.url = u.getExpandedUrl(result.url) break if kind in {videoDirectMessage, imageDirectMessage}: diff --git a/src/parserutils.nim b/src/parserutils.nim index 72c50e1..b6ccd52 100644 --- a/src/parserutils.nim +++ b/src/parserutils.nim @@ -112,6 +112,9 @@ proc getImageStr*(js: JsonNode): string = template getImageVal*(js: JsonNode): string = js{"image_value", "url"}.getImageStr +template getExpandedUrl*(js: JsonNode; fallback=""): string = + js{"expanded_url"}.getStr(js{"url"}.getStr(fallback)) + proc getCardUrl*(js: JsonNode; kind: CardKind): string = result = js{"website_url"}.getStrVal if kind == promoVideoConvo: @@ -177,7 +180,7 @@ proc extractSlice(js: JsonNode): Slice[int] = proc extractUrls(result: var seq[ReplaceSlice]; js: JsonNode; textLen: int; hideTwitter = false) = let - url = js["expanded_url"].getStr + url = js.getExpandedUrl slice = js.extractSlice if hideTwitter and slice.b.succ >= textLen and url.isTwitterUrl: @@ -238,7 +241,7 @@ proc expandUserEntities*(user: var User; js: JsonNode) = ent = ? js{"entities"} with urls, ent{"url", "urls"}: - user.website = urls[0]{"expanded_url"}.getStr + user.website = urls[0].getExpandedUrl var replacements = newSeq[ReplaceSlice]() @@ -268,7 +271,7 @@ proc expandTextEntities(tweet: Tweet; entities: JsonNode; text: string; textSlic replacements.extractUrls(u, textSlice.b, hideTwitter = hasRedundantLink) if hasCard and u{"url"}.getStr == get(tweet.card).url: - get(tweet.card).url = u{"expanded_url"}.getStr + get(tweet.card).url = u.getExpandedUrl with media, entities{"media"}: for m in media: