#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))