Category Archives: gae

cloud storage object change notification

Web Master Tool

  1. ocn-reciever バージョンにデプロイ
  2. 静的ファイル
    app.yaml
// app/static_files/認証用.html を配置しておく

application: camera-raspi
version: ocn-reciever
runtime: go
api_version: go1
handlers:
- url: /{認証用ファイル名}\.html
  static_files: static_files/{認証用ファイル名}.html
  upload: static_files/{認証用ファイル名}.html

参考

http://qiita.com/sinmetal/items/0438203034a0cb448448

send grid app engine

send grid アカウント作成

https://sendgrid.kke.co.jp/about/

App Engine設定

APIキー作成

配信

func handler(w http.ResponseWriter, r *http.Request) {
    sg := sendgrid.NewSendGridClientWithApiKey("{APIキー}")
        ctx := appengine.NewContext(r)

        // Set http.Client to use the App Engine urlfetch client
        sg.Client = urlfetch.Client(ctx)

        message := sendgrid.NewMail()
        message.AddTo("example@email.com")
        message.SetSubject("Email From SendGrid")
        message.SetHTML("Through AppEngine")
        message.SetFrom("sendgrid@appengine.com")
        sg.Send(message)
}

備考

fromのアドレスには自由に設定することができるが、なりすましの場合は、
スパム判定される。

事前にSPFレコードの登録などが必要
https://mxtoolbox.com/spf.aspx

参考

ドキュメント
https://sendgrid.kke.co.jp/blog/?p=1391

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

gae datastore 開発環境

goapp serve

の後、

http://localhost:8080

の開発環境のWEBアプリケーションからレコードを作成して、
以下からレコードの内容を確認することができる

http://localhost:8000/datastore

gae go gin エラーハンドリング

以下のようにエラーの詳細を出すことができる

// Show ...
func (f Form) Show(c *gin.Context) {
    appID, err := strconv.ParseUint(c.Param("appID"), 10, 64)
    if err != nil {
        c.String(400, "appIDが間違っています")
        return
    }
}

app engine プロジェクト名を変更した際のエラー

現象

goapp deploy の際に、

 You do not have permission to modify this app.

というエラーがでる

原因

cookieに保存されているアプリケーションIDとapp.yamlに記述されたアプリケーションIDが異なっていることが原因です。

対応

ログイン情報ためてるキャッシュファイルを削除

rm ~/.appcfg_*

参考

http://otiai10.hatenablog.com/entry/2016/04/25/004711

ファイルのmultipart送信

リクエスト生成

data, header, err := c.Request.FormFile("upload")
if err != nil {
    panic(err)
}
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, err := writer.CreateFormFile("file", fileName)
if err != nil {
    panic(err)
}
if _, err := io.Copy(part, data); err != nil {
    panic(err)
}

h := make(textproto.MIMEHeader)
h.Set("Content-Disposition",
    fmt.Sprintf(`form-data; name="file"; filename="%s"`,
        escapeQuotes(fileName)))
h.Set("Content-Type", contentType)

fw, err := writer.CreatePart(h)
if err != nil {
    panic(err)
}
if _, err = io.Copy(fw, data); err != nil {
    panic(err)
}
if err = writer.Close(); err != nil {
    panic(err)
}

req, err := app.newRequest("POST", "file", body, "")
if err != nil {
    panic(err)
}

req.Header.Set("Content-Type", writer.FormDataContentType())