エンジニアもどきの雑記

メモ帳です。きっと。macアプリ配信windowsでもできるようになるまで絶対にメイン機にしないマン。特筆しない限り環境は【win10home,i5-7200u,8g,64bit,巨乳が好き】

【Go】Api叩く、とコマンドライン引数

お久しぶりです。

件の障害対応が終わりを告げ、今は後片付けというか、
諸々出てしまった不整合データをよしなにしてるところです。

なのでまだまだ忙しいですが、
そんな最中朗報が。

なんと10月からついにGo言語の現場に行けることになりました!

わーわー。

さらばphp。しばらくは戻らないだろう。
phpでできることは大体goの方が早かったり書きやすかったりするので、 phpの現場に行くことがあったり、phpの仕事が舞い込んでこなければ 書く機会自体がないと思う。

嫌いとかヘイトではなくて、ただただそういうことってだけ。

さて、いくつか参考サイトを見ながらフリーapiであるPixabayのapiをgoで叩いてみようと思います。

参考:GolangでAPIを叩く

package main

import (
        "fmt"
        "io/ioutil"
        "net/http"
        "net/url"
)

const ( 
         pixaUrl = "https://pixabay.com/api/?"
         apiKey = "TOKEN"
)

func main() {
        val := url.Values{}
        val.Add("key", apiKey)

        resp, err := http.Get(pixaUrl + val.Encode())
        if err != nil {
                fmt.Println(err)
                return
        }

        defer resp.Body.Close()

        execute(resp)
}

func execute(response *http.Response) {
        body, err := ioutil.ReadAll(response.Body)
        if err != nil {
                fmt.Println(err)
                return
        }

        fmt.Println(string(body))
}


もうまじでほぼそのまま。
tokenの取得とかはぐぐればすぐ出ると思うのでそちらで。

一部抜粋でとりあえず結果

db30c4090f3c67aa1e4b0b8df_1280.jpg","webformatHeight":480,"webformatWidth":640,"likes":33,"imageWidth":4592,"id":3680485,"user_id":1425977,"views":1774,"comments":34,"pageURL":"https://pixabay.com/en/flowers-cosmea-pink-garden-3680485/","imageHeight":3448,"webformatURL":"https://pixabay.com/get/ea33b90f2cfc043ed1584d05fb1d4796e271ebd21db30c4090f3c67aa1e4b0b8df_640.jpg","type":"photo","previewHeight":112,"tags":"flowers, cosmea, pink","downloads":1439,"user":"Heidelbergerin","favorites":7,"imageSize":3451018,"previewWidth":150,"userImageURL":"https://cdn.pixabay.com/user/2018/09/13/14-59-03-278_250x250.jpg","previewURL":"https://cdn.pixabay.com/photo/2018/09/15/23/06/flowers-3680485_150.jpg"}],"total":858500}

こんな感じでjsonデータが返ってきた。
超簡単。

ここからキーワード検索する。

コマンドライン引数で与えたいわけだけど、ググってみるとflagで取得するか、os.Argsで取得するかって二択の様子。
どっちがいいの? 教えてください。

とりあえず今回はflagを利用しましょう。

golangjp: flag パッケージ - golang.jp

import "flag"
して、

var s = flag.String("s", "", "input param s")
取得

falg.Parse()
して、

if *s != "" {
        val.Add("q", *s)
}


チェックして追加
(ここのチェックあってる?

で、検索。
試しに

go run main.go -s cat
とかすると結果がわかりやすい。
虎の画像が出てきたけど。

で、以下になりました。

package main

import (
        "flag"
        "fmt"
        "io/ioutil"
        "net/http"
        "net/url"
)

const (
        pixaUrl = "https://pixabay.com/api/?"
        apiKey  = "TOKEN"
)

var s = flag.String("s", "", "input param s")

func main() {
        val := url.Values{}
        val.Add("key", apiKey)

        flag.Parse()
        if *s != "" {
                val.Add("q", *s)
        }

        resp, err := http.Get(pixaUrl + val.Encode())
        if err != nil {
                fmt.Println(err)
                return
        }

        defer resp.Body.Close()

        execute(resp)
}

func execute(response *http.Response) {
        body, err := ioutil.ReadAll(response.Body)
        if err != nil {
                fmt.Println(err)
                return
        }

        fmt.Println(string(body))
}


以上!

絵の方はもう少し落ち着いてから!

じゃあな!