Add download wiki names script
This commit is contained in:
parent
e709b3cea5
commit
bf055836cc
1 changed files with 45 additions and 0 deletions
45
misc/download-wiki-names.rkt
Normal file
45
misc/download-wiki-names.rkt
Normal file
|
@ -0,0 +1,45 @@
|
|||
#lang racket/base
|
||||
(require racket/generator
|
||||
racket/list
|
||||
racket/string
|
||||
json
|
||||
net/http-easy
|
||||
html-parsing
|
||||
"src/xexpr-utils.rkt"
|
||||
"src/url-utils.rkt")
|
||||
|
||||
(define output-file "wiki-names.json")
|
||||
(define limit "5000")
|
||||
|
||||
(define (get-page offset)
|
||||
(define res (get (format "https://community.fandom.com/wiki/Special:NewWikis?~a"
|
||||
(params->query `(("offset" . ,offset)
|
||||
("limit" . ,limit))))))
|
||||
(html->xexp (bytes->string/utf-8 (response-body res))))
|
||||
|
||||
(define (convert-list-items gen)
|
||||
(for/list ([item (in-producer gen #f)])
|
||||
; '(li "\n" "\t" (a (@ (href "http://terra-hexalis.fandom.com/")) "Terra Hexalis Wiki") "\n" "\t\t\ten\t")
|
||||
(hasheq 'title (third (fourth item))
|
||||
'link (second (second (second (fourth item))))
|
||||
'lang (string-trim (sixth item)))))
|
||||
|
||||
(define (get-items-recursive [offset ""] [items null])
|
||||
(define page (get-page offset))
|
||||
(define page-content ((query-selector (attribute-selector 'class "mw-spcontent") page)))
|
||||
(define next ((query-selector (attribute-selector 'class "mw-nextlink") page-content)))
|
||||
(define next-offset
|
||||
(if next
|
||||
(second (regexp-match #rx"offset=([0-9]*)" (get-attribute 'href (bits->attributes next))))
|
||||
#f))
|
||||
(define list-item-generator (query-selector (λ (e a c) (eq? e 'li)) page-content))
|
||||
(define these-items (convert-list-items list-item-generator))
|
||||
(define all-items (append items these-items))
|
||||
(printf "page offset \"~a\" has ~a items (~a so far)~n" offset (length these-items) (length all-items))
|
||||
(if next
|
||||
(get-items-recursive next-offset all-items)
|
||||
all-items))
|
||||
|
||||
(call-with-output-file output-file #:exists 'truncate/replace
|
||||
(λ (out)
|
||||
(write-json (get-items-recursive) out)))
|
Loading…
Reference in a new issue