utils.nim 740 B

1234567891011121314151617181920212223242526272829303132
  1. import httpclient, asyncdispatch, htmlparser
  2. import strutils, json, xmltree, uri
  3. template newClient*() {.dirty.} =
  4. var client = newAsyncHttpClient()
  5. defer: client.close()
  6. client.headers = headers
  7. proc fetchHtml*(url: Uri; headers: HttpHeaders; jsonKey = ""): Future[XmlNode] {.async.} =
  8. newClient()
  9. var resp = ""
  10. try:
  11. resp = await client.getContent($url)
  12. except:
  13. return nil
  14. if jsonKey.len > 0:
  15. let json = parseJson(resp)[jsonKey].str
  16. return parseHtml(json)
  17. else:
  18. return parseHtml(resp)
  19. proc fetchJson*(url: Uri; headers: HttpHeaders): Future[JsonNode] {.async.} =
  20. newClient()
  21. var resp = ""
  22. try:
  23. resp = await client.getContent($url)
  24. result = parseJson(resp)
  25. except:
  26. return nil