Category Archives: GCP

go google api auth

サービスアカウント作成

  1. GCPにプロジェクト作成
  2. API画面でサービスアカウント作成
  3. JSONダウンロード

ソースコード

package main

import (
    "encoding/base64"
    "io/ioutil"
    "log"

    "golang.org/x/net/context"
    "golang.org/x/oauth2/google"
    "google.golang.org/api/vision/v1"
)

func main() {
    jsonData, err := ioutil.ReadFile("./auth.json")
    if err != nil {
        panic(err)
    }

    // 前述のJSONファイルを読み込んでJWTのConfigを作成
    cfg, err := google.JWTConfigFromJSON(jsonData, vision.CloudPlatformScope)
    if err != nil {
        panic(err)
    }

    // OAuth2の認可を付与したHTTPクライアントを作る
    client := cfg.Client(context.Background())

    // Vision APIのサービスを作る
    svc, err := vision.New(client)
    if err != nil {
        panic(err)
    }

    // 画像ファイルを読み込んでBASE64エンコード
    imgData, err := ioutil.ReadFile("./cat.jpeg")
    if err != nil {
        panic(err)
    }

    enc := base64.StdEncoding.EncodeToString(imgData)
    img := &vision.Image{Content: enc}

    // 使いたいVisionの機能
    feature := &vision.Feature{
        Type:       "LABEL_DETECTION",
        MaxResults: 10,
    }

    // 1つの画像に対して複数のFeatureを指定できる
    req := &vision.AnnotateImageRequest{
        Image:    img,
        Features: []*vision.Feature{feature},
    }

    // 1回の呼び出しで複数の処理を要求できる
    batch := &vision.BatchAnnotateImagesRequest{
        Requests: []*vision.AnnotateImageRequest{req},
    }

    // 実際のAPIコールを実行
    res, err := svc.Images.Annotate(batch).Do()

    b, err := res.MarshalJSON()
    if err != nil {
        panic(err)
    }
    log.Print(string(b))
}

godotenv

パッケージダウンロード

go get github.com/joho/godotenv

kintone.env

app.yamlと同階層に配置

KINTONE_DOMAIN="{値をセット}"
KINTONE_USER="{値をセット}"
KINTONE_PASSWORD="{値をセット}"

ファイル読込

func init() {
    err := godotenv.Load("kintone.env")
    if err != nil {
        log.Fatal("Error loading .env file")
    }
    log.Print(os.Getenv("KINTONE_DOMAIN")) // 値の読み込みが可能
}

参考

https://github.com/joho/godotenv

compute engine 初期設定

インスタンスにSSH接続

gcloud compute ssh {インスタンス名} --zone {リージョン名} 

各種インストール

// apt-get update
sudo apt-get update

// git
sudo apt-get install git

// go
sudo apt-get install golang
sudo mkdir -p ~/go
echo "export GOPATH=$HOME/go" >> ~/.bashrc
echo "export PATH=$PATH:$HOME/go/bin:/usr/local/go/bin" >> ~/.bashrc
source ~/.bashrc
go version //確認
go env // 確認

// npm
sudo apt-get install nodejs
sudo apt-get install nodejs-legacy
sudo apt-get install npm

// phantomjs
npm install -g phantomjs
which phantomjs // 確認

参考

http://qiita.com/kent_ocean/items/5bfb7b69973f78b8c843

datastore keyで検索(GQL, GAE GO)

GQLの場合

// KEYを使用する必要がある
select * from form where __key__= KEY(form, 5629499534213120)

GAE GOの場合

ctx := appengine.NewContext(c.Request)

// idはint64型
id, err := strconv.ParseInt(c.Param("recordID"), 10, 64)
    if err != nil {
    panic(err)
}

// keyを発行
k := datastore.NewKey(ctx, "form", "", id, nil)

// クエリ作成
q := datastore.NewQuery("form").Filter("__key__ =", k)

type form struct {
    ID       uint64
    RecordID int
}
var form []form
_, err = q.GetAll(ctx, &form)
if err != nil {
    panic(err)
}

// 値を取得することができる
recordID := uint64(form[0].RecordID)

参考

http://qiita.com/kimihiro_n/items/0963b94425c92a541542

gae go アクセス権限

エンドポイントにアクセス権限を付与する

app.yaml

// 以下の場合、users/1 などのパスにアクセスするとログインをもとめられる
- url: /users/.*
  login: admin