1. akif999

    No comment

    akif999
Changes in body
Source | HTML | Preview
@@ -1,99 +1,99 @@
# BackGround
よくお世話になっている[weblio英和和英辞典](http://ejje.weblio.jp)。
調べるときはおもむろにブラウザのタブを追加して...となることが多い。
macには辞書.appなるものも入っていて三本指タップで検索、とかできるけど、
CLIが好きな筆者としては辞書もコマンドラインから叩きたい。
というわけで`Go × goqueryでスクレイピング`なノリで作ってみた。
-※ 筆者は限りなくハードウェア寄りのソフトウェアエンジニアで、web系の知識がないため、そのあたりの解説がプアなのはご了承下さい
+※ 筆者は限りなくハードウェア寄りのソフトウェアエンジニアで、web系の知識に疎いため(趣味的なレベルということ)、そのあたりの解説がプアなのはご了承下さい
# Demo
```bash
$ ./webligo apple
単語 : apple
主な意味 : リンゴ
音節 : ap・ple
発音記号・読み方 : ˈæpl
$ ./webligo pen
単語 : pen
主な意味 : (昔の、ペン先 とペン軸 を含めて)ペン、鵞(が)ペン、文筆(の業)
音節 : pen
発音記号・読み方 : pén
$ ./webligo hoge
単語 : hoge
主な意味 : とくに意味もないときに使う変数名
音節 :
発音記号・読み方 : hóʊdʒ
$ ./webligo fuga
単語 : fuga
主な意味 : フーガ
音節 :
発音記号・読み方 :
$ ./webligo 鯖
日単語 : 鯖
英単語 : mackerel
$ ./webligo 鯵
日単語 : 鯵
英単語 : horse mackerel
```
必要最低限な情報だけ出力するようにした。
こういう単純化がしやすいからコマンドラインはいい。
# SourceCode
```go
package main
import (
"fmt"
"log"
"unicode/utf8"
"github.com/PuerkitoBio/goquery"
"gopkg.in/alecthomas/kingpin.v2"
)
const (
EnToJp = iota
JpToEn
)
var (
searchWord = kingpin.Arg("searchWord", "searchWord string").Required().String()
)
func main() {
kingpin.Parse()
// if searchWord includes multibyte charactor, set mode to JpToEn
mode := EnToJp
if utf8.RuneCountInString(*searchWord) != len(*searchWord) {
mode = JpToEn
}
doc, err := goquery.NewDocument("http://ejje.weblio.jp/content/" + *searchWord)
if err != nil {
log.Fatal(err)
}
if mode == EnToJp {
fmt.Printf("単語 : %s\n", *searchWord)
fmt.Printf("主な意味 : %s\n", doc.Find(".content-explanation").Text())
fmt.Printf("音節 : %s\n", doc.Find(".syllableEjje").Text())
fmt.Printf("発音記号・読み方 : %s\n", doc.Find(".phoneticEjjeDesc").Text())
} else {
fmt.Printf("日単語 : %s\n", *searchWord)
fmt.Printf("英単語 : %s\n", doc.Find(".content-explanation").Text())
}
}
```
基本的には`Find()`でセレクタを利用して欲しい情報を取りに行くだけなので、とても簡単に描けた。
プログラミング的には不満でも、packageの使いやすさには満足。
# Roundup
* weblio自体がinputをとても柔軟に捉えてくれるので、リッチな使いごごち
* アクセス速度に実行時間は依存するが、アクセス後の処理は一瞬で、実用的な仕上がり
* `goquery`はwebの知識が無くとも、簡素なスクレイピングプログラムくらいはすぐに書ける
# Reference
* [weblio.jp](http://ejje.weblio.jp)
* [GoDoc goquery](https://godoc.org/github.com/PuerkitoBio/goquery)