中國字非常深奧,有些字的含意,有時候並不是那麼清楚。還好網路上都能查得到這些資訊。
今天要來做如何把查出來的網頁資訊抓下來,也就是常見的 HTTP 協定功能。
首先要先有目標網站,以網址簡單來說的話,萌典應該是好選擇。
套件本來想找 Curl ,不過想想還是找簡單的就好: GoReq
看說明應該非常簡單:
res, err := goreq.Request{ Uri: "http://www.google.com" }.Do()
可以來實作了!
先在 provider
裡實作查字典功能:
package provider
import "github.com/franela/goreq"
const (
dictionary = `https://www.moedict.tw/`
)
func Query(word string) (str string, err error){
req := goreq.Request{
Uri: dictionary + string(word),
}
res, err := req.Do()
if err != nil {
return
}
return res.Body.ToString()
}
先把查到的網頁回傳出去,明天再來處理正則。
而原本 GenerateCommand
有點亂,先不要在上面加功能,另外開一個 QueryCommand
來呼叫這個 Query
方法:
package command
import (
"fmt"
"github.com/MilesChou/namer/provider"
"github.com/urfave/cli"
)
var (
QueryCommand = cli.Command{
Name: "query",
Usage: "查詢字典",
Action: func(c *cli.Context) error {
return query(c)
},
}
)
func query(c *cli.Context) error {
str := c.Args().First()
query, err := provider.Query(str)
if err != nil {
fmt.Println(err)
return err
}
fmt.Println(query)
return nil
}
main.go
的程式碼也貼一下騙版面:
app.Commands = []cli.Command{
command.GenerateCommand,
command.StatusCommand,
command.QueryCommand,
}
因為依賴有調整,需要下指令更新 lock 檔:
$ dep ensure
YAML 那次也有做,只是忘了提這件事
今天做的東西還蠻單純的,展示如下:
$ go run main.go query 字
<!DOCTYPE html>
...
</html>
程式碼可以參考 PR Day 21
發現裡面都是 head 的區塊,沒有 body ,看來要爬這個網站會有點麻煩。