bot that uploads mario artwork to the fediverse every 30 mins
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

48 lines
1.3KB

  1. #lang racket/base
  2. (require net/http-client json net/url racket/port web-server/private/timer)
  3. (define server (getenv "SERVER"))
  4. (define token(getenv "ACCESS_TOKEN"))
  5. (define safebooru "safebooru.donmai.us")
  6. (define limit "20")
  7. (define page "2")
  8. (define tags "mario_(series)")
  9. (define pos (random 20))
  10. (define (search-safebooru)
  11. (define-values (status header response)(http-sendrecv safebooru (string-append "/posts.json?limit=" limit "&page=" page "&tags="tags ) #:ssl? #t))
  12. (define posts (read-json response))
  13. (list-ref posts pos))
  14. (define (download-image)
  15. (define post (search-safebooru))
  16. (define url (hash-ref post 'file_url))
  17. (define md5 (hash-ref post 'md5))
  18. (define file-ext (hash-ref post 'file_ext))
  19. (define filename (string-append md5 "." file-ext))
  20. (call-with-output-file filename
  21. (lambda (in) (port->bytes (get-pure-port (string->url url))))
  22. #:exists 'replace))
  23. (define (upload-image)
  24. (define-values (status headers response)
  25. (http-sendrecv server (string-append "/api/v1/media") #:ssl? #t #:method "POST" #:headers (list (string-append "Authorization: Bearer " token)) #:data (download-image)))
  26. (define data (read-json response))
  27. (displayln data))
  28. (upload-image)
  29. ;define tm (start-timer-manager))
  30. ;define (loop)
  31. ;(start-timer tm 600 (upload-image))
  32. ;loop))
  33. ;loop)