Made it somehow work for now using Python requests

This commit is contained in:
Adam Blažek 2020-06-16 12:02:52 +02:00
parent a3332393b0
commit 6cb8be1bad
1 changed files with 43 additions and 15 deletions

View File

@ -1,4 +1,7 @@
import httpclient, json, times, uri
import httpclient, json, times, uri, httpcore
import nimpy
let requests = pyImport("requests")
type
Bakalari = ref object
@ -12,26 +15,29 @@ type
content: string
startTime: DateTime
endTime: DateTime
Message = object
title: string
sender: string
text: string
sentTime: DateTime
const
iso8601 = initTimeFormat("yyyy-MM-dd'T'HH:mm")
let
client = newHttpClient()
iso8601 = initTimeFormat("yyyy-MM-dd'T'HH:mm:sszzz")
proc newBakalari*(website: Uri, username: string, password: string): Bakalari =
new result
result.website = website
let
api = website / "api/login"
data = newMultipartData {
data = {
"client_id": "ANDR",
"grant_type": "password",
"username": username,
"password": password,
}
response = client.post($api, multipart = data)
body = response.body
# response = client.post($api, multipart = data)
# body = response.body
body = requests.post($api, data).text.to(string)
root = body.parseJson
result.accessToken = root{"access_token"}.getStr
result.refreshToken = root{"refresh_token"}.getStr
@ -45,13 +51,14 @@ func refreshToken*(bakalari: Bakalari): string =
proc renewTokens(bakalari: Bakalari) =
let
api = bakalari.website / "api/login"
data = newMultipartData {
data = {
"client_id": "ANDR",
"grant_type": "refresh_token",
"refresh_token": bakalari.refreshToken,
}
response = client.post($api, multipart = data)
body = response.body
# response = client.post($api, multipart = data)
# body = response.body
body = requests.post($api, data).text.to(string)
root = body.parseJson
bakalari.accessToken = root{"access_token"}.getStr
bakalari.refreshToken = root{"refresh_token"}.getStr
@ -59,17 +66,28 @@ proc renewTokens(bakalari: Bakalari) =
proc getEndpoint*(bakalari: Bakalari, endpoint: string): JsonNode =
let
api = bakalari.website / "api/3" / endpoint
data = newMultipartData {
client = newHttpClient(headers = newHttpHeaders {
"Authorization": "Bearer " & bakalari.accessToken,
}
response = client.post($api, multipart = data)
})
response = client.get($api)
body = response.body
bakalari.renewTokens
result = body.parseJson
proc postEndpoint*(bakalari: Bakalari, endpoint: string): JsonNode =
let
api = bakalari.website / "api/3" / endpoint
client = newHttpClient(headers = newHttpHeaders {
"Authorization": "Bearer " & bakalari.accessToken,
})
response = client.post($api)
body = response.body
bakalari.renewTokens
result = body.parseJson
iterator homework*(bakalari: Bakalari): Homework =
let root = bakalari.getEndpoint("homeworks")
for node in root.getElems:
for node in root{"Homeworks"}.getElems:
yield Homework(
id: node{"ID"}.getStr,
subject: node{"Subject"}{"Name"}.getStr,
@ -78,3 +96,13 @@ iterator homework*(bakalari: Bakalari): Homework =
startTime: node{"DateStart"}.getStr.parse(iso8601),
endTime: node{"DateEnd"}.getStr.parse(iso8601),
)
iterator messages*(bakalari: Bakalari): Message =
let root = bakalari.postEndpoint("komens/messages/received")
for node in root{"Messages"}.getElems:
yield Message(
title: node{"Title"}.getStr,
sender: node{"Sender"}{"Name"}.getStr,
text: node{"Text"}.getStr,
sentTime: node{"SentDate"}.getStr.parse(iso8601)
)