|
@@ -7,12 +7,39 @@ import experimental/parser as newParser
|
|
|
proc mediaUrl(id: string; cursor: string): SessionAwareUrl =
|
|
proc mediaUrl(id: string; cursor: string): SessionAwareUrl =
|
|
|
let
|
|
let
|
|
|
cookieVariables = userMediaVariables % [id, cursor]
|
|
cookieVariables = userMediaVariables % [id, cursor]
|
|
|
- oauthVariables = userTweetsVariables % [id, cursor]
|
|
|
|
|
|
|
+ oauthVariables = restIdVariables % [id, cursor]
|
|
|
result = SessionAwareUrl(
|
|
result = SessionAwareUrl(
|
|
|
cookieUrl: graphUserMedia ? {"variables": cookieVariables, "features": gqlFeatures},
|
|
cookieUrl: graphUserMedia ? {"variables": cookieVariables, "features": gqlFeatures},
|
|
|
oauthUrl: graphUserMediaV2 ? {"variables": oauthVariables, "features": gqlFeatures}
|
|
oauthUrl: graphUserMediaV2 ? {"variables": oauthVariables, "features": gqlFeatures}
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
+proc userTweetsUrl(id: string; cursor: string): SessionAwareUrl =
|
|
|
|
|
+ let
|
|
|
|
|
+ cookieVariables = userTweetsVariables % [id, cursor]
|
|
|
|
|
+ oauthVariables = restIdVariables % [id, cursor]
|
|
|
|
|
+ result = SessionAwareUrl(
|
|
|
|
|
+ cookieUrl: graphUserTweets ? {"variables": cookieVariables, "features": gqlFeatures, "fieldToggles": fieldToggles},
|
|
|
|
|
+ oauthUrl: graphUserTweetsV2 ? {"variables": oauthVariables, "features": gqlFeatures}
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+proc userTweetsAndRepliesUrl(id: string; cursor: string): SessionAwareUrl =
|
|
|
|
|
+ let
|
|
|
|
|
+ cookieVariables = userTweetsAndRepliesVariables % [id, cursor]
|
|
|
|
|
+ oauthVariables = restIdVariables % [id, cursor]
|
|
|
|
|
+ result = SessionAwareUrl(
|
|
|
|
|
+ cookieUrl: graphUserTweetsAndReplies ? {"variables": cookieVariables, "features": gqlFeatures, "fieldToggles": fieldToggles},
|
|
|
|
|
+ oauthUrl: graphUserTweetsAndRepliesV2 ? {"variables": oauthVariables, "features": gqlFeatures}
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+proc tweetDetailUrl(id: string; cursor: string): SessionAwareUrl =
|
|
|
|
|
+ let
|
|
|
|
|
+ cookieVariables = tweetDetailVariables % [id, cursor]
|
|
|
|
|
+ oauthVariables = tweetVariables % [id, cursor]
|
|
|
|
|
+ result = SessionAwareUrl(
|
|
|
|
|
+ cookieUrl: graphTweetDetail ? {"variables": cookieVariables, "features": gqlFeatures, "fieldToggles": tweetDetailFieldToggles},
|
|
|
|
|
+ oauthUrl: graphTweet ? {"variables": oauthVariables, "features": gqlFeatures}
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
proc getGraphUser*(username: string): Future[User] {.async.} =
|
|
proc getGraphUser*(username: string): Future[User] {.async.} =
|
|
|
if username.len == 0: return
|
|
if username.len == 0: return
|
|
|
let
|
|
let
|
|
@@ -33,13 +60,11 @@ proc getGraphUserTweets*(id: string; kind: TimelineKind; after=""): Future[Profi
|
|
|
if id.len == 0: return
|
|
if id.len == 0: return
|
|
|
let
|
|
let
|
|
|
cursor = if after.len > 0: "\"cursor\":\"$1\"," % after else: ""
|
|
cursor = if after.len > 0: "\"cursor\":\"$1\"," % after else: ""
|
|
|
- variables = userTweetsVariables % [id, cursor]
|
|
|
|
|
- params = {"variables": variables, "features": gqlFeatures}
|
|
|
|
|
js = case kind
|
|
js = case kind
|
|
|
of TimelineKind.tweets:
|
|
of TimelineKind.tweets:
|
|
|
- await fetch(graphUserTweets ? params, Api.userTweets)
|
|
|
|
|
|
|
+ await fetch(userTweetsUrl(id, cursor), Api.userTweets)
|
|
|
of TimelineKind.replies:
|
|
of TimelineKind.replies:
|
|
|
- await fetch(graphUserTweetsAndReplies ? params, Api.userTweetsAndReplies)
|
|
|
|
|
|
|
+ await fetch(userTweetsAndRepliesUrl(id, cursor), Api.userTweetsAndReplies)
|
|
|
of TimelineKind.media:
|
|
of TimelineKind.media:
|
|
|
await fetch(mediaUrl(id, cursor), Api.userMedia)
|
|
await fetch(mediaUrl(id, cursor), Api.userMedia)
|
|
|
result = parseGraphTimeline(js, after)
|
|
result = parseGraphTimeline(js, after)
|
|
@@ -48,7 +73,7 @@ proc getGraphListTweets*(id: string; after=""): Future[Timeline] {.async.} =
|
|
|
if id.len == 0: return
|
|
if id.len == 0: return
|
|
|
let
|
|
let
|
|
|
cursor = if after.len > 0: "\"cursor\":\"$1\"," % after else: ""
|
|
cursor = if after.len > 0: "\"cursor\":\"$1\"," % after else: ""
|
|
|
- variables = listTweetsVariables % [id, cursor]
|
|
|
|
|
|
|
+ variables = restIdVariables % [id, cursor]
|
|
|
params = {"variables": variables, "features": gqlFeatures}
|
|
params = {"variables": variables, "features": gqlFeatures}
|
|
|
js = await fetch(graphListTweets ? params, Api.listTweets)
|
|
js = await fetch(graphListTweets ? params, Api.listTweets)
|
|
|
result = parseGraphTimeline(js, after).tweets
|
|
result = parseGraphTimeline(js, after).tweets
|
|
@@ -94,9 +119,7 @@ proc getGraphTweet(id: string; after=""): Future[Conversation] {.async.} =
|
|
|
if id.len == 0: return
|
|
if id.len == 0: return
|
|
|
let
|
|
let
|
|
|
cursor = if after.len > 0: "\"cursor\":\"$1\"," % after else: ""
|
|
cursor = if after.len > 0: "\"cursor\":\"$1\"," % after else: ""
|
|
|
- variables = tweetVariables % [id, cursor]
|
|
|
|
|
- params = {"variables": variables, "features": gqlFeatures}
|
|
|
|
|
- js = await fetch(graphTweet ? params, Api.tweetDetail)
|
|
|
|
|
|
|
+ js = await fetch(tweetDetailUrl(id, cursor), Api.tweetDetail)
|
|
|
result = parseGraphConversation(js, id)
|
|
result = parseGraphConversation(js, id)
|
|
|
|
|
|
|
|
proc getReplies*(id, after: string): Future[Result[Chain]] {.async.} =
|
|
proc getReplies*(id, after: string): Future[Result[Chain]] {.async.} =
|