kentana20 技忘録

技術ネタを中心に、セミナー、勉強会、書籍、会社での出来事を綴っていきます。不定期更新。

GoLangでコマンドラインからGoogle検索する

最近のミドルウェアコマンドラインツールに頻繁に使用されているGoLangを使ってみたかったので、コマンドラインからGoogle検索するツールを作った。 open-golang という便利ツールをラップしたカタチなので、作ったというほど、大したことはしてないです。

前提

Goのインストールは終わっている状態。

hello, world

環境作れてるかは定番のHello, Worldで。

package main

import "fmt"

func main() {
        fmt.Println("hello, world")
}

実行は go run xxx.go なので、今回は go run hello.go で。 標準出力に hello, world が出ればOK。

コマンドラインツール作る

go get で open-golangをダウンロード

$ go get github.com/skratchdot/open-golang/open

$GOPATH にダウンロードします。

Google検索するツールを作る

今回は

  • 検索種類(通常/画像)
  • 検索ワード

コマンドライン引数とするツール「gg-search」を作ってみます。

  • 検索種類は「-t」
  • 検索ワードは「-w」

で指定できるようにして、それぞれ「通常」「一休」をデフォルト値とします。

コードはgoの流儀に従って $GOPATH/src/github.com/kentana20/gg-search/ に作ります。

package main

import (
        "flag"
        "net/url"

        "github.com/skratchdot/open-golang/open"
)

func main() {
        var w = flag.String("w", "一休", "search word")
        var t = flag.Int("t", 0, "search type 0:normal, 1:image")
        flag.Parse()

        var Url *url.URL
        Url, err := url.Parse("http://www.google.co.jp")
        if err != nil {
                panic("doooon!!!!")
        }

        Url.Path += "/search"
        params := url.Values{}
        params.Add("q", *w)
        if *t == 1 {
                params.Add("tbm", "isch")
        }
        Url.RawQuery = params.Encode()

        open.Run(Url.String())
}

flagはコマンドライン引数を扱うパッケージです。

var w = flag.String("w", "一休", "search word")
var t = flag.Int("t", 0, "search type 0:normal, 1:image")
flag.Parse()

でそれぞれのコマンドライン引数を設定します。第一引数に指定オプション、第二引数にオプションに渡す値、第三引数にhelpに表示されるDescriptionを指定します。

Url, err := url.Parse("http://www.google.co.jp")
Url.Path += "/search"
params := url.Values{}
params.Add("q", *w)
Url.RawQuery = params.Encode()

で、ブラウザへ渡すURL、Querystringを設定します。 url.Parse(“”) でURLを、 url.Values{{} でQuerystringを指定します。Querystringの設定がすべて終わったら、params.Encode() でURLを生成します。

open.Run(Url.String())

URLとQuerystringを設定したら open.Run で生成したURLをブラウザへ渡します。

goファイルをビルドしてバイナリを作る

バイナリを作るには go build コマンドを使用します。

$ go build gg-sample.go

これで、同階層にgg-searchバイナリが作らるので、go run を使わなくてもコマンドラインからツールが使えます。

$ gg-search —help

でヘルプメニューが表示されればOKです。

$ gg-search kentana20 # Googleでkentana20を検索
$ gg-search まゆゆ 1 # Google画像検索でまゆゆを検索

とりあえず、「Goを触って何か作ってみた」ってだけなので、Go Toursでもうちょい勉強して、次回は有名ドコロのツールを見ながらもっとためになるものを作ってみようと思います。今回いじったソースは こちら に上がっていますので、「使い方がちげーよ」という場合はご指摘いただけると助かります。