エンジニアもどきの雑記

メモ帳です。きっと。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))
}


以上!

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

じゃあな!

【日曜日恒例】絵が下手すぎるので書き始めようと思いますpart42,43,44

前回
dddpga1.hateblo.jp

絶賛障害対応中なので更新が滞ってます。
が、隙を見て書くには書いてるのでまとめて載せます。

はやく落ち着くといいなぁ。

外部の何十年もやってる人たちと協力してるけどまだまだ終わらないので、
かなり根が深い様子。

塗ってないのとか塗り途中のとかあるけど↑みたいな現状なので許してね。はーと


f:id:dddpga1:20180825115207j:plain
f:id:dddpga1:20180825115221j:plain
f:id:dddpga1:20180825115234j:plain
f:id:dddpga1:20180825115321j:plain
f:id:dddpga1:20180825115345j:plain

いやー。楽しいよ。
お絵描き。

でも全然進歩しない。
しかも今の障害で普段のコードの勉強もできてないからやばい。

頑張ろう。


ではまた次回

【日曜日恒例】絵が下手すぎるので書き始めようと思いますpart41

前回
dddpga1.hateblo.jp

スマホ向けにdmm..com現fanzaにて
ぬれすけパラダイスってゲームがあった。

ゲーム性は合わなくてすぐやめちゃったんだけど、
そこに出てくる先輩キャラが滅茶苦茶好みだった。

ってのを思い出したので書きました。

そして塗りました。

ついに塗った。

はい。

f:id:dddpga1:20180805223456j:plain

相変わらず模写だし、ペン入れてからミスに気付くけど、
こう見ると成長してるんだなぁって思いこんでます。

part1から最初の内のと見比べると大分進歩したよまじで。
タグから飛べるから是非見比べてみよう。


ではまた次回。

次回
dddpga1.hateblo.jp

iptablesを直接書き換えた時にはreloadしろって先生いいましたよね

すみません先生・・・


/etc/sysconfig/iptables

を直に書き換えたい時ってあるよね。
ipだけ書き換えたい時なんか、vimで入ってyyp
ってして書き換えるだけ。場合によってはそれにC-xとかC-aとかですぐ終わるし。


あるんだよ。

いちいちコマンド打ちたくねー時があるんだよ!


そんな時に編集してsaveってしてもダメです。
ダメでした。
編集前の状態に戻る。

試してないけどプロセスが生きててそこで保持してる値でもったままになるんじゃないかなー。


なので、reloadしてからsave


これで反映されるし、保存されてos再起動しても保持される。

以上!


【日曜日恒例】絵が下手すぎるので書き始めようと思いますpart40

前回
dddpga1.hateblo.jp

ついにpart.40です。ということは十か月です。
全然成長してないのが非常に残念ですが・・・

まぁ、でも。今日は初の試み。


線画を書きました。
ペンを買ってきて、とりあえずなぞりました。
消しゴムをかけました。

次は色を塗りましょう。

少しずつ進歩はしてるよねー


はい。

f:id:dddpga1:20180730020108j:plain

f:id:dddpga1:20180730020148j:plain

全然デジタルに戻らなくなったけど、
お絵描きは楽しいからまたね。
うん。


じゃあまた来週。


次回
dddpga1.hateblo.jp

【日曜日恒例】絵が下手すぎるので書き始めようと思いますpart39

前回
dddpga1.hateblo.jp

いやー。
暑いね。毎日が異常気象状態なのに出社させるとは何事か。

日本は狂ってやがる。

人は熱で死ぬぞ。
殺人者になる前に出社をさせるな。


日本の経営者よ。命を大事に。


はい。

f:id:dddpga1:20180723002612j:plain

スサトさん。
結婚したいゲームキャラNo.1のスサトさん。

今日まじで絵を書く気が起きなくてダラダラ書いてたんだけど、
書いてる内に力が入ってきて今までで一番まともな絵になった気がする。

ただ、気づいたんだけど、書けば書くほど手が汚れて線が汚れてで大変だ。
こういうのってどう避けるというか、対応すればいいんだろう。

また来週

次回
dddpga1.hateblo.jp

Go構造体さわる

構造体さわる
巨乳をそっと下から支えたい

package main

import "fmt"

type Owl struct {
        Name string
        Age  int
        Meal string
}

func (o *Owl) Birthday() {
        o.Age++
}

func main() {
        owl := Owl{
                Name: "lulu",
                Age:  5,
                Meal: "Meat",
        }

        fmt.Println(owl.Age)

        owl.Birthday()

        fmt.Println(owl.Age)
}

//結果
5
6


昨日さらっとやったメソッドとか、構造体とか。
改めて確認する。

Owlって構造体を用意。
初期化してうちのルルちゃんの情報で初期化してやる。
そして、
owl.Birthday()
でメソッドを利用して構造体にアクセスして歳をとらせた。
なのでowl.Birthday()の前後で数字が違う。

ここで確認したいのがメソッドのレシーバ。

*ポインタで指定してるのは、そうしないと値にアクセスできないから。
試しに*を削除してやってみる。
と結果は

5
5


これは先ほどの通り、値にアクセスできてないから。
参照しないといけないんですねぇ。

cとかやってた人とかそこらへんしっかりわかってる人は大丈夫なんだろうけど、私みたいなぺーぺーは最初ここら辺大変だった。
必死にパソコンの仕組み系の本読んで覚えた。

未経験からほぼ独学で飛び込んで三年。
やっとポインタがわかり始める。
スクリプト言語ばっかりやってると参照渡しくらいしか使わなかった。

entityとかにおいておく感じなのかなー。
もっと書こう。

ちなみに構造体なので以下にもできる

 owl := new(Owl)
 owl.Name = "lulu"
 owl.Age = 5
 owl.Meal = "Meat"



newと先の初期化どう違うんだ?
って調べてみたら初期化できるかできないかっぽい

個人的には最初に書いた方がわかりやすいなー
昨日の記事は後者だけど。

明日もう少し踏み込んで書こうかな。
今日はやることあるしここまで