search
LoginSignup
57

More than 5 years have passed since last update.

posted at

updated at

Organization

Yo APIを試してみた

Yo API Keyの登録

http://developer.justyo.co/ こちらから。
API用のアカウントは個人用のアカウントとは別に作ります。
(アプリなどから先に同名のアカウントを作ってしまうと取れない… その場合は消したいアカウントから YODELETE にYoを送って連絡したら削除してもらえました)

Callback URLには、Yoを受信した時にhookとして呼び出すURLを指定できます。
(後からでも変更できます)

Yo APIでできること

  • POST /yoall/ : Yoしてくれた人(フォロワー?)全員にYoを送る。linkパラメータでリンク付きで送れる
  • POST /yo/ : usernameパラメータで指定したユーザにYoを送る(1分に1回まで)。linkパラメータでリンク付きで送れる
  • yoを受信したらhookを呼び出してくれる。usernameパラメータで誰から来たか分かる

今のところこれだけ

参考:https://medium.com/@YoAppStatus/yo-developers-api-e7f2f0ec5c3c

Yoを送ったらYoを返すだけのbotを作ってみた

ILLYOBACK にYo送ってみてね。

import unfiltered.request._
import unfiltered.response._

class App extends unfiltered.filter.Plan {
  val APIKey = "YOUR_API_KEY_HERE"

  def intent = {
    case GET(Path("/hook")) & Params(p) =>
      p("username").foreach{u =>
        import dispatch._, Defaults._
        val svc = url("http://api.justyo.co/yo/") <<
          Map("api_token" -> APIKey, "username" -> u) <:<
          Map("Content-Type" -> "application/x-www-form-urlencoded")
        val res = Http(svc OK as.String)
      }
      Ok
  }
}

Scala(Unfiltered)でちょろっと書いてHerokuにデプロイしてみた。

ちょっとハマったとこ

  • 既存のアカウントでAPIを有効にできるのかと思ったら、API専用アカウントを新しく作らないとダメだった
  • apiのURLの最後に / 付け忘れるとダメ
  • content-typeは application/x-www-form-urlencoded じゃないとダメ

思った事

  • hookの呼び出し元が本当にYoから来てるのか検証する手段が無い(hookのURLがバレると誰でも呼べちゃう)
  • フォローされてないアカウントにもapiでYo送れてしまう! SPAMできちゃうね

その他

  • 1分に1回以上送ると "Rate limit exceeded. Only one Yo per recipient per minute."

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
57