Made it somehow work for now using Python requests
This commit is contained in:
parent
a3332393b0
commit
6cb8be1bad
58
bakalari.nim
58
bakalari.nim
|
@ -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)
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue