42 lines
1.2 KiB
Nim
42 lines
1.2 KiB
Nim
import httpclient, asyncdispatch, times, strutils, uri
|
|
|
|
import ".."/[types, parser, parserutils]
|
|
|
|
import utils, consts
|
|
|
|
proc getProfileFallback(username: string; headers: HttpHeaders): Future[Profile] {.async.} =
|
|
let url = base / profileIntentUrl ? {"screen_name": username}
|
|
let html = await fetchHtml(url, headers)
|
|
if html == nil: return Profile()
|
|
|
|
result = parseIntentProfile(html)
|
|
|
|
proc getProfile*(username, agent: string): Future[Profile] {.async.} =
|
|
let
|
|
headers = genHeaders(agent, base / username, xml=true)
|
|
|
|
params = {
|
|
"screen_name": username,
|
|
"wants_hovercard": "true",
|
|
"_": $(epochTime().int)
|
|
}
|
|
|
|
url = base / profilePopupUrl ? params
|
|
html = await fetchHtml(url, headers, jsonKey="html")
|
|
|
|
if html == nil: return Profile()
|
|
|
|
if html.select(".ProfileCard-sensitiveWarningContainer") != nil:
|
|
return await getProfileFallback(username, headers)
|
|
|
|
result = parsePopupProfile(html)
|
|
|
|
proc getProfileFull*(username, agent: string): Future[Profile] {.async.} =
|
|
let
|
|
url = base / username
|
|
headers = genHeaders(agent, url, auth=true)
|
|
html = await fetchHtml(url, headers)
|
|
|
|
if html == nil: return
|
|
result = parseTimelineProfile(html)
|