diff --git a/src/api.nim b/src/api.nim index eab5b3c..503af9e 100644 --- a/src/api.nim +++ b/src/api.nim @@ -114,6 +114,10 @@ proc getTweet*(id: string; after=""): Future[Conversation] {.async.} = if after.len > 0: result.replies = await getReplies(id, after) +proc getStatus*(id: string): Future[Tweet] {.async.} = + let url = status / (id & ".json") ? genParams() + result = parseStatus(await fetch(url, Api.status)) + proc resolve*(url: string; prefs: Prefs): Future[string] {.async.} = let client = newAsyncHttpClient(maxRedirects=0) try: diff --git a/src/consts.nim b/src/consts.nim index 4093082..3687a54 100644 --- a/src/consts.nim +++ b/src/consts.nim @@ -9,6 +9,7 @@ const userShow* = api / "1.1/users/show.json" photoRail* = api / "1.1/statuses/media_timeline.json" + status* = api / "1.1/statuses/show" search* = api / "2/search/adaptive.json" timelineApi = api / "2/timeline" diff --git a/src/parser.nim b/src/parser.nim index 508602d..755daf2 100644 --- a/src/parser.nim +++ b/src/parser.nim @@ -372,6 +372,11 @@ proc parseConversation*(js: JsonNode; tweetId: string): Conversation = elif "cursor-bottom" in entry: result.replies.bottom = e.getCursor +proc parseStatus*(js: JsonNode): Tweet = + result = parseTweet(js) + if not result.isNil: + result.user = parseUser(js{"user"}) + proc parseInstructions[T](res: var Result[T]; global: GlobalObjects; js: JsonNode) = if js.kind != JArray or js.len == 0: return diff --git a/src/redis_cache.nim b/src/redis_cache.nim index cb1c5f6..206bb51 100644 --- a/src/redis_cache.nim +++ b/src/redis_cache.nim @@ -151,9 +151,8 @@ proc getCachedTweet*(id: int64): Future[Tweet] {.async.} = if tweet != redisNil: tweet.deserialize(Tweet) else: - let conv = await getTweet($id) - if not conv.isNil: - result = conv.tweet + result = await getStatus($id) + if result.isNil: await cache(result) proc getCachedPhotoRail*(name: string): Future[PhotoRail] {.async.} = diff --git a/src/types.nim b/src/types.nim index d132165..3ebbe0f 100644 --- a/src/types.nim +++ b/src/types.nim @@ -17,6 +17,7 @@ type listBySlug listMembers userRestId + status RateLimit* = object remaining*: int