34 lines
1.1 KiB
Racket
34 lines
1.1 KiB
Racket
|
#lang racket/base
|
||
|
(require (prefix-in easy: net/http-easy)
|
||
|
"url-utils.rkt"
|
||
|
"xexpr-utils.rkt")
|
||
|
|
||
|
(provide
|
||
|
(struct-out license)
|
||
|
license-default
|
||
|
license-auto)
|
||
|
|
||
|
(struct license (text url) #:transparent)
|
||
|
(define license-default (license "CC-BY-SA" "https://www.fandom.com/licensing"))
|
||
|
(define license-hash (make-hash))
|
||
|
(define (license-fetch wikiname)
|
||
|
(define dest-url
|
||
|
(format "https://~a.fandom.com/api.php?~a"
|
||
|
wikiname
|
||
|
(params->query '(("action" . "query")
|
||
|
("meta" . "siteinfo")
|
||
|
("siprop" . "rightsinfo")
|
||
|
("format" . "json")
|
||
|
("formatversion" . "2")))))
|
||
|
(printf "out: ~a~n" dest-url)
|
||
|
(define res (easy:get dest-url))
|
||
|
(define data (easy:response-json res))
|
||
|
(license (jp "/query/rightsinfo/text" data)
|
||
|
(jp "/query/rightsinfo/url" data)))
|
||
|
(define (license-auto wikiname)
|
||
|
(if (hash-has-key? license-hash wikiname)
|
||
|
(hash-ref license-hash wikiname)
|
||
|
(let ([result (license-fetch wikiname)])
|
||
|
(hash-set! license-hash wikiname result)
|
||
|
result)))
|