Skip to content

Commit 0c15324

Browse files
authored
merge nitter (#15)
2 parents 603db07 + e40c61a commit 0c15324

File tree

2 files changed

+38
-36
lines changed

2 files changed

+38
-36
lines changed

src/auth.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import experimental/parser/session
66
# max requests at a time per session to avoid race conditions
77
const
88
maxConcurrentReqs = 2
9-
dayInSeconds = 24 * 60 * 60
9+
hourInSeconds = 60 * 60
1010
apiMaxReqs: Table[Api, int] = {
1111
Api.search: 50,
1212
Api.tweetDetail: 500,
@@ -127,7 +127,7 @@ proc isLimited(session: Session; api: Api): bool =
127127
return true
128128

129129
if session.limited and api != Api.userTweets:
130-
if (epochTime().int - session.limitedAt) > dayInSeconds:
130+
if (epochTime().int - session.limitedAt) > hourInSeconds:
131131
session.limited = false
132132
log "resetting limit: ", session.id
133133
return false

src/parser.nim

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -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

406408
proc parseGraphTimeline*(js: JsonNode; root: string; after=""): Profile =
407409
result = Profile(tweets: Timeline(beginning: after.len == 0))

0 commit comments

Comments
 (0)