diff --git a/src/fandom-request.rkt b/src/fandom-request.rkt index c306b04..966eeee 100644 --- a/src/fandom-request.rkt +++ b/src/fandom-request.rkt @@ -1,16 +1,12 @@ #lang typed/racket/base -(require racket/format - racket/string - "config.rkt" +(require "config.rkt" "../lib/url-utils.rkt") (define-type Headers (HashTable Symbol (U Bytes String))) (require/typed net/http-easy [#:opaque Timeout-Config timeout-config?] [#:opaque Response response?] [#:opaque Session session?] - [response-status-code (Response -> Natural)] [current-session (Parameter Session)] - [current-user-agent (Parameter (U Bytes String))] [make-timeout-config ([#:lease Positive-Real] [#:connect Positive-Real] -> Timeout-Config)] [get ((U Bytes String) [#:close? Boolean] @@ -26,41 +22,19 @@ fandom-get-api timeouts) -(unless (string-contains? (~a (current-user-agent)) "BreezeWiki") - (current-user-agent - (format "BreezeWiki/1.0 (~a) ~a" - (if (config-true? 'canonical_origin) - (config-get 'canonical_origin) - "local") - (current-user-agent)))) - (define timeouts (make-timeout-config #:lease 5 #:connect 5)) -(: last-failure Flonum) -(define last-failure 0.0) -(: stored-failure (Option Response)) -(define stored-failure #f) -(define failure-persist-time 30000) - (: no-headers Headers) (define no-headers '#hasheq()) (: fandom-get (String String [#:headers (Option Headers)] -> Response)) (define (fandom-get wikiname path #:headers [headers #f]) - (or - (and ((current-inexact-milliseconds) . < . (+ last-failure failure-persist-time)) stored-failure) - (let () - (define dest-url (string-append "https://www.fandom.com" path)) - (define host (string-append wikiname ".fandom.com")) - (log-outgoing wikiname path) - (define res - (get dest-url - #:timeouts timeouts - #:headers (hash-set (or headers no-headers) 'Host host))) - (when (memq (response-status-code res) '(403 406)) - (set! last-failure (current-inexact-milliseconds)) - (set! stored-failure res)) - res))) + (define dest-url (string-append "https://www.fandom.com" path)) + (define host (string-append wikiname ".fandom.com")) + (log-outgoing wikiname path) + (get dest-url + #:timeouts timeouts + #:headers (hash-set (or headers no-headers) 'Host host))) (: fandom-get-api (String (Listof (Pair String String)) [#:headers (Option Headers)] -> Response)) (define (fandom-get-api wikiname params #:headers [headers #f]) diff --git a/src/page-wiki.rkt b/src/page-wiki.rkt index da63617..f16792c 100644 --- a/src/page-wiki.rkt +++ b/src/page-wiki.rkt @@ -18,7 +18,6 @@ "config.rkt" "data.rkt" "fandom-request.rkt" - "../lib/archive-file-mappings.rkt" "../lib/pure-utils.rkt" "../lib/syntax.rkt" "../lib/thread-utils.rkt" @@ -38,9 +37,8 @@ (define (page-wiki req) (define wikiname (path/param-path (first (url-path (request-uri req))))) - (define segments (map path/param-path (cdr (url-path (request-uri req))))) (define user-cookies (user-cookies-getter req)) - (define path (string-join (cdr segments) "/")) + (define path (string-join (map path/param-path (cddr (url-path (request-uri req)))) "/")) (define source-url (format "https://~a.fandom.com/wiki/~a" wikiname path)) (define-values (dest-res siteinfo) @@ -103,31 +101,9 @@ (write-html body out))))))] [(eq? 404 (easy:response-status-code dest-res)) (next-dispatcher)] - [(memq (easy:response-status-code dest-res) '(403 406)) - (response-handler - (define body - (generate-wiki-page - `(div - (p "Sorry! Fandom isn't allowing BreezeWiki to show pages right now.") - (p "We'll automatically try again in 30 seconds, so please stay on this page and be patient.") - (p (small "In a hurry? " (a (@ (href ,source-url)) "Click here to read the page on Fandom.")))) - #:req req - #:source-url source-url - #:wikiname wikiname - #:title (url-segments->guess-title segments) - #:siteinfo siteinfo)) - (response/output - #:code 503 - #:headers (build-headers - always-headers - (header #"Retry-After" #"30") - (header #"Cache-Control" #"max-age=30, public") - (header #"Refresh" #"35")) - (λ (out) - (write-html body out))))] [else (response-handler - (error 'page-wiki "Tried to load page ~a/~a~nSadly, the page didn't load because Fandom returned status code ~a with response:~n~a" + (error 'page-wiki "Tried to load page ~a/~v~nSadly, the page didn't load because Fandom returned status code ~a with response:~n~a" wikiname path (easy:response-status-code dest-res) diff --git a/static/main.css b/static/main.css index 5b3e7e2..f8ef78d 100644 --- a/static/main.css +++ b/static/main.css @@ -218,6 +218,13 @@ a.ext-audiobutton { /* see hearthstone/wiki/Diablo_(Duels_hero) */ display: inline !important; } +/* hide slideshows since they're broken + * example: ben10/wiki/Celestialsapien_(Classic)#Powers_and_Abilities + */ +.wikia-slideshow { + display: none; +} + /* animated slots */ #mw-content-text .animated > :not(.animated-active), #mw-content-text .animated > .animated-subframe > :not(.animated-active) { display: inline-block;