More Related Content
Similar to Go x Slack API
Similar to Go x Slack API (20)
Go x Slack API
- 17. type WeatherHack struct {
Title string
`xml:"channel>title"`
Description []string
`xml:"channel>item>descriptio
n"`
}
②構造体
・構造体を宣言する
・RSSのXMLを設定
・フィールド名を先頭大文字とする
・xmlの要素名まで展開する
- 18. func main() {
//getWeather関数にRSSのURLを渡す
wh, err := getWeather(FEED_URL)
//error処理
if err != nil {
log.Fatalf("Log: %v", err)
Return
}
//URLに生成するデータを追加
data := url.Values{}
data.Set("token",token)
data.Add("channel","")
data.Add("username","天気予報Bot")
data.Add("icon_url","")
data.Add("text", wh.Description[2])
fmt.Println(data)
//http.clientを使用してGETリクエスト送信
client := &http.Client{}
r, _ := http.NewRequest("POST", fmt.Sprintf("%s",apiUrl),
bytes.NewBufferString(data.Encode()))
r.Header.Add("Content-Type", "application/x-www-form-urlencoded")
resp, _ := client.Do(r)
fmt.Println(resp.Status)
}
③Slackにメッセージを投げる
・クエリパラメータを組み立てる
・Request型のオブジェクト
を http.NewRequest関数で生成
・リクエストURLを生成する
・実際にGETリクエストを投げる
- 19. func getWeather(feed string) (p *WeatherHack, err error) {
//http.Getメソッドを利用してGETリクエストを送る
res, err := http.Get(feed)
if err != nil {
return nil, err
}
b, err := ioutil.ReadAll(res.Body)
if err != nil {
return nil, err
}
wh := new(WeatherHack)
err = xml.Unmarshal(b, &wh)
return wh, err
}
④天気を取得する(RSS)
・GETリクエスト
・リクエストのレスポンスから
bodyを読み込む
・パース関数を呼び出す
実行結果
Editor's Notes
- 菅原佑太と申します、今年からシステムエンジニア始めました。
現業務はウエディングパークに関わるサイトの運用・開発をしてみます。
出身地は大阪で今年から上京してきました。方言が抜けないため聞きづらいところがありましたら途中でも良いので聞いて下さい。
プログラミングは今年から本格的に始めました。
学生時代はマスコミ系、テレビ局のADや放送作家などを夢見たことがある文系大学生でした。大学3年生からプログラミングを始めたことをきっかけに
エンジニアを目指すことにしました。
- そんな本日は人生初のLT会で緊張しておりますが何卒あたたかくご観覧ください、よろしくお願いいたします
LT会に出ることが決まったもののネタが決まらず悩んでいましたところ、
ポモドーロをしていた武田さんを見つけました。
〜〜会話〜〜
- phpはインタプリタ型ですがgoはコンパイル型であること
並列処理に優れていること
変数を宣言するときに後ろに型名をつけること
もしくは暗黙的な型としてこのように宣言をすることで変数を宣言することができます。
さらにGoはポインタを使うことができ、メモリの参照をすることができます。
deferステートメントという関数の終わり(return)まで遅延させるものがあること
Goの構造体はC言語の構造体とだいたい同じですが、
・メソッドの定義
・構造体埋め込み
等の機能も持っています。
- Go言語は処理速度がとても速いため、APIのバックエンドやバッチ処理など「パフォーマンスがネックとなる部分」に採用されることが多いです。
- Goでのfor文はphpのfor文と似ていて型宣言だけなのですが、goではphpのようなwhileがありません。その代わりにfor文でwhileのように扱うことができます。deferステートメントを用いてこのプログラムを実行するとdeferをついたところが後に実行されるためhelloworldが表示されます。
- 主に配列操作で扱うのですが、スライスは配列のデータを切り出すとこに使用されマップは連想配列のようなものです。
スライスはポインタを持っていて例えば12をs[1]にいれると次のsを実行すると8,12ですがこの処理の後にaを出力すると15の部分が12になっていてポインタが渡っていることがわかります。
マップはv,okというキーと真偽を返すものに手間を取らされました。
- livedoorの天気予報を取得するrssを使ってgoで出力してみよう。
上記URLをリクエストするためにpackage[net/http]を使用してみた。
- slackにIncomming WebHooksを使用する。
簡単にトークンが取得することができるのでtokenやusername、などの値をURLに設定してリクエストを送る
- ライブラリの豊富さには定評があります、GitHubなどのリポジトリをライブラリとして参照することができるため、公開と利用のハードルがとても低いのです。