GithubHelp home page GithubHelp logo

bots's Introduction

bots

各サービスのAPIを触ったサンプル集

全体的なルール

  • 各サービスのAPIアクセス実装は、個別ディレクトリを作成し、pkgとして実装する
  • 各サービスのトークンはtoken/<サービス名>_<用途>.jsonに記載し、pkgディレクトリに配置しない
  • token/*.gitignoreに記載し、トークンの漏洩を防ぐ
  • トークンはjsonフォーマットで記載し、各サービス内にjsonファイルごとにToken<用途>型を定義する

LINE

How to Use

メッセージを送る

msg := "hello"

err := line.SendMessage(msg)
if err != nil {
  panic(err)
}

画像を送る

LINE Notifyの仕様上、メッセージは必須項目のため画像を送信するときにもメッセージが必要。
以下の例ではローカルにあるtmp.jpgを送信するとき。 SendImageの第2引数でファイルを指定するが、io.Reader型であればよい。

msg := "send an image"
filename := "./tmp.jpg"

f, err := os.Open(filename)
if err != nil {
  panic(err)
}
defer f.Close()

if err := line.SendImage(msg, f, filename); err != nil {
  panic(err)
}

トークン

  • トークルーム用のトークンは、<用途>トークルーム名(を英数にしたもの)を使う

References

facebook

How to Use

URL = "https://graph.facebook.com/v2.11/<user name>/feed"

f, err := facebook.GetFeed(URL)
if err != nil {
  panic(err)
}

References

slack

nlopes/slackとパッケージ名が衝突したので、自作packageの名前はmyslackとする。

golang で始める Slack bot 開発 - at kaneshinにアクセストークンの取得方法とライブラリの使い方が書いてあるので参照。自分が使いそうなものをまとめると以下。

How to Use

準備

slack_<bot名>.json内のapi_tokenをもとにRTM(Real Time Message) connectionを作成し、goroutine化する。

rtm, err := myslack.NewRTM()
if err != nil {
  panic(err)
}
go rtm.ManageConnection()

メッセージを送る

送信先のchannelを設定する必要があり、channelidchannels.listで取得できる。

Generate tokens to test with hereからトークンを作った状態でTest Methodを押すとスペースのchannel listが得られる。

msg := "This is a sample message"
rtm.SendMessage(rtm.NewOutgoingMessage(msg, channel))

メッセージを受け取る

rtm.IncomingEventsチャンネルを介して、イベントループを回す。 rtm.IncomingEvents.Data.(type)でそれぞれのイベントごとに処理を変えられる。
下記のev.Channelでメッセージが送られてきたchannelへレスポンスを返せる。

for {
  select {
  case msg := <-rtm.IncomingEvents:
    switch ev := msg.Data.(type) {
    case *slack.HelloEvent:
      log.Print("bot start")
    case *slack.MessageEvent:
      log.Printf("Message: %v\n", ev)
      rtm.SendMessage(rtm.NewOutgoingMessage("new message", ev.Channel))
    case *slack.InvalidAuthEvent:
      log.Print("Invalid credentials")
      return
    }
  }
}

トークン

  • API tokenはbotごとに割り当てられるため、<用途>bot名としたものを使う

複数サービスの連携

chanを使うと簡単に書ける。以下ではslackからメッセージを受信したら、そのメッセージをLINEに送る例

package main

import (
	"log"

	"github.com/nlopes/slack"

	"./line"
	"./myslack"
)

func main() {
	// メッセージをやり取りするためのchannel
	ch := make(chan string)

	// slack bot起動
	go func() {
		rtm, err := myslack.NewRTM()
		if err != nil {
			panic(err)
		}

		go rtm.ManageConnection()

		for {
			select {
			case msg := <-rtm.IncomingEvents: // slackからのメッセージ受信
				switch ev := msg.Data.(type) {
				case *slack.MessageEvent:
					log.Print(ev)
					ch <- ev.Msg.Text
				case *slack.HelloEvent:
					log.Print("bot start")
				case *slack.InvalidAuthEvent:
					log.Print("Invalid credentials")
				}
			}
		}
	}()

	for {
		select {
		case msg := <-ch: // LINEにメッセージを送る
			log.Print("message recieved")
			err := line.SendMessage(msg)
			if err != nil {
				panic(err)
			}
		}
	}
}

定期的にポーリングしたいとき

func main() {
	t := time.NewTicker(60 * time.Second)
	defer t.Stop()

	for {
		select {
		case <-t.C:
      doSomething()
		}
	}
}

References

bots's People

Contributors

cipepser avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.