User:Tony Sidaway/spoilers.scm

(require-extension srfi-1) (require-extension srfi-13) (require-extension irnc-base) (require-extension posix)

(define (get-page-contents wiki page) (and-let* (    [page-contents-response      (irnc-api wiki `((action. "query")		 (prop. "revisions")		 (titles. ,page)		 (rvprop. "content")))]   [page-contents-xml      (and (not (null? page-contents-response)) (cdr page-contents-response))]   [rev ((sxpath "api/query/pages/page/revisions/rev") page-contents-xml)]   [page-contents      (and (not (null? rev)) (cadar rev))]) page-contents))

(define (page-contains-pattern wiki page pattern) (and-let* (    [page-contents (get-page-contents wiki page)]) ;;(pretty-print content) (string-search pattern page-contents)))

(define (wiki-list lst) (let loop ([lst lst] [str ""]) (if (null? lst) str     (loop (cdr lst) (string-append str "* \n")))))

(define (articles-containing-spoilers wiki spoiler-list) (let* (    [possible-spoilers      (filter (lambda (article) (not (member article spoiler-list))) (irnc-search wiki "spoiler" 50000))]   [spoilers      (filter (lambda (page)	 (page-contains-pattern wiki page "[Ss][Pp][Oo][Ii][Ll][Ee][Rr]")) possible-spoilers)]) spoilers))

(define (wiki-heading level title) (let ([equals (make-string level #\=)]) (string-append     equals title equals "\n")))

(irnc-debug 0) (let* ( [config-file (string-append (getenv "HOME") "/.ironchicken")] [wiki (irnc-config config-file 'wiki)] [username (irnc-config config-file 'user)] [password (irnc-config config-file 'password)] [spoiler-file "./.spoilersrc"] [spoiler-list (with-input-from-file spoiler-file read)] [login-handle (irnc-login wiki username password)]) (or login-handle (begin (display "Login failure")(newline)(exit))) (let ((edit-handle (irnc-edit login-handle "User:Tony Sidaway/spoilers"))) (irnc-submit edit-handle     (string-append (wiki-heading 2 "Pages unexpectedly containing the word \"spoiler\"") (wiki-list (articles-containing-spoilers wiki spoiler-list)))     (string-append "List of pages unexpectedly containing the word \"spoiler\" " "compiled by " username " using " (irnc-user-agent)))))