#lang racket ; naver-daum-top-search-scraper (C) 2015 KIM Taegyoon ; Displays Naver and Daum top searches periodically (require net/url) (require racket/date) (define (read-url url) (port->string (get-pure-port (string->url url)))) (define (list-naver) (define text (read-url "http://www.naver.com")) (define top-line-num #f) (displayln (date->string (current-date) #t)) (define result (list)) (for ([line (in-lines (open-input-string text))] [i (in-naturals 1)]) (cond [(regexp-match "" line) (set! top-line-num i)] [(and top-line-num (<= (+ top-line-num 2) i (+ top-line-num 11))) (cond [(regexp-match #px"" line) => (lambda (m) (set! result (append result (list (list-ref m 1)))))])])) result) (define (list-daum) (define text (read-url "http://www.daum.net")) (define top-line-num #f) (define last-item #f) (define result (list)) (for ([line (in-lines (open-input-string text))] [i (in-naturals 1)]) (cond [(regexp-match "" line) (set! top-line-num i)] [(and top-line-num (= (+ top-line-num 2) i)) (cond [(regexp-match #px"(<.+>)?(.+?)(<.+>)?$" line) => (lambda (m) (define item (list-ref m 2)) (unless (equal? item last-item) (set! result (append result (list item))) (set! last-item item)))])])) result) (let loop () (with-handlers ([exn? (lambda (e) (displayln e))]) (printf "Naver: ~a\nDaum: ~a\n\n" (list-naver) (list-daum))) (sleep (* 60 5)) (loop))