用racket重写随机图片API!


用racket重写随机图片API!

之前我写过一篇用nodejs进行随机图片的API,作为一个lisp信徒我决定用racket——一门sheme的方言来重写它

先安装racket

以下是Ubuntu上的安装方法

1
sudo apt install racket

然后在一个目录下新建data.txt,把你的图片的链接都放进去

接着新建一个web.rkt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#lang racket

(require web-server/servlet)
(require web-server/servlet-env)

(define url-list '())

(call-with-input-file "data.txt"
(lambda (in)
(let loop ((this-line (read-line in)))
(cond ((not (eof-object? this-line)) (set! url-list (append url-list (list this-line)))
(loop (read-line in))
)
)
)))

(define (random-url req)
(response/xexpr (list-ref url-list (random (length url-list))))
)

(define (random-html req)

(response/xexpr `(html (head (title "zhaose's api"))
(body (h1 "zhaose's api")
(p (img (( src ,(list-ref url-list (random (length url-list)))))))
)
)
))

(define (my-random req)
(if (empty? (url-query (request-uri req))) (random-html req)
(random-url req)
))


(serve/servlet my-random #:port 8080 #:listen-ip "0.0.0.0" #:servlet-path "/")

保存好之后用racket web.rkt就可以运行了

这是要注意的是如果你不加get请求参数返回的是一个html界百,加了get请求参数的话则会返回一个链接或者303跳转,可以用于机器人等的使用,如:

http://49.234.70.34:8080是html界面

http://49.234.70.34:8080?mode=text返回的是链接

http://49.234.70.34:8080?mode=jump是303跳转

这确实是lisper的自我修养

by 从晴朗的朝色泛起之际开始