Skip to content

Instantly share code, notes, and snippets.

@lov3catch
Last active August 15, 2022 14:13
Show Gist options
  • Save lov3catch/a82f98e619f3378e830494707104d6e7 to your computer and use it in GitHub Desktop.
Save lov3catch/a82f98e619f3378e830494707104d6e7 to your computer and use it in GitHub Desktop.
Display random quote from bash.org
#lang racket/base
(require net/http-easy
html-parsing
racket/port
sxml/sxpath
racket/string
net/url)
;; Set variables
(define chat-id 1)
(define token "token-here")
;; Request to bashorg.org
(define last-page-number 2021)
(define random-page-number (random last-page-number))
(define bashorg-url (combine-url/relative (string->url "http://bashorg.org") (string-append "/page/" (number->string random-page-number))))
(define resp (get bashorg-url))
;; Convert characterset
(define convert (bytes-open-converter "WINDOWS-1251" (locale-string-encoding)))
(define length-data (bytes-length (response-body resp)))
(define data (make-bytes length-data 5))
(bytes-convert convert (response-body resp) 0 length-data data)
(define html-as-xexp (html->xexp (bytes->string/utf-8 data)))
;; Get random quote index;
(define quotes ((sxpath "//*[@class='quote']") html-as-xexp))
(define random-quote-number (random (length quotes)))
;; Parse quote
(define xpath (string-append "//*[@id='quotes']/div[" (number->string random-quote-number) "]/div[2]/text()"))
(define selected-quote ((sxpath xpath) html-as-xexp))
;; Send message
(define send-message-url (string-append "https://api.telegram.org/bot" token "/sendMessage"))
(define res (post send-message-url #:json (hash 'chat_id chat-id 'text (string-join selected-quote "\n"))))
(response-status-message res)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment