@@ -341,7 +341,7 @@ proc parseGraphThread(js: JsonNode): tuple[thread: Chain; self: bool] =
341341 let cursor = t{" item" , " content" , " value" }
342342 result .thread.cursor = cursor.getStr
343343 result .thread.hasMore = true
344- elif " tweet" in entryId:
344+ elif " tweet" in entryId and " promoted " notin entryId :
345345 let
346346 isLegacy = t{" item" }.hasKey (" itemContent" )
347347 (contentKey, resultKey) = if isLegacy: (" itemContent" , " tweet_results" )
@@ -369,39 +369,41 @@ proc parseGraphConversation*(js: JsonNode; tweetId: string; v2=true): Conversati
369369 if instructions.len == 0 :
370370 return
371371
372- for e in instructions[0 ]{" entries" }:
373- let entryId = e{" entryId" }.getStr
374- if entryId.startsWith (" tweet" ):
375- with tweetResult, e{" content" , contentKey, resultKey, " result" }:
376- let tweet = parseGraphTweet (tweetResult, not v2)
377-
378- if not tweet.available:
379- tweet.id = parseBiggestInt (entryId.getId ())
380-
381- if $ tweet.id == tweetId:
382- result .tweet = tweet
383- else :
384- result .before.content.add tweet
385- elif entryId.startsWith (" conversationthread" ):
386- let (thread, self) = parseGraphThread (e)
387- if self:
388- result .after = thread
389- else :
390- result .replies.content.add thread
391- elif entryId.startsWith (" tombstone" ):
392- let id = entryId.getId ()
393- let tweet = Tweet (
394- id: parseBiggestInt (id),
395- available: false ,
396- text: e{" content" , contentKey, " tombstoneInfo" , " richText" }.getTombstone
397- )
398-
399- if id == tweetId:
400- result .tweet = tweet
401- else :
402- result .before.content.add tweet
403- elif entryId.startsWith (" cursor-bottom" ):
404- result .replies.bottom = e{" content" , contentKey, " value" }.getStr
372+ for i in instructions:
373+ if i{" __typename" }.getStr == " TimelineAddEntries" :
374+ for e in i{" entries" }:
375+ let entryId = e{" entryId" }.getStr
376+ if entryId.startsWith (" tweet" ):
377+ with tweetResult, e{" content" , contentKey, resultKey, " result" }:
378+ let tweet = parseGraphTweet (tweetResult, not v2)
379+
380+ if not tweet.available:
381+ tweet.id = parseBiggestInt (entryId.getId ())
382+
383+ if $ tweet.id == tweetId:
384+ result .tweet = tweet
385+ else :
386+ result .before.content.add tweet
387+ elif entryId.startsWith (" conversationthread" ):
388+ let (thread, self) = parseGraphThread (e)
389+ if self:
390+ result .after = thread
391+ elif thread.content.len > 0 :
392+ result .replies.content.add thread
393+ elif entryId.startsWith (" tombstone" ):
394+ let id = entryId.getId ()
395+ let tweet = Tweet (
396+ id: parseBiggestInt (id),
397+ available: false ,
398+ text: e{" content" , contentKey, " tombstoneInfo" , " richText" }.getTombstone
399+ )
400+
401+ if id == tweetId:
402+ result .tweet = tweet
403+ else :
404+ result .before.content.add tweet
405+ elif entryId.startsWith (" cursor-bottom" ):
406+ result .replies.bottom = e{" content" , contentKey, " value" }.getStr
405407
406408proc parseGraphTimeline * (js: JsonNode ; root: string ; after= " " ): Profile =
407409 result = Profile (tweets: Timeline (beginning: after.len == 0 ))
0 commit comments