Wakotech Blog

ポエム

TwitterでリプライやRTが来たときにYOで通知してくれるのを実装しました

毎日何かしらはやってはいるんですが、記事にできるような区切りがつかないのでなかなか難しいものでした。
今回は、Twitterの通知を独自実装するのに際して、とりあえずYOで通知してくれるようにと思い実装しました。
YOはフレンドとして登録した特定の相手にYOとだけ送る事ができるハイコンテクスト(?)なサービスです。yoserverisdownなどのサービスもあり当初は盛り上がっていたのですが、最近では下火、ですが、APIを公開しているため、使ってみる事にしました。

http://dev.justyo.co/でログインし、YOを送る側のアカウント(アプリケーション)を登録し、APIキーを取得します。
あとはでapi_tokenとusernameを指定してPOSTするだけです。

require 'net/http'
require 'uri'

uri = URI.parse('http://api.justyo.co/yo/')
params = {api_token: API_TOKEN, username: USERNAME}
Net::HTTP.post_form(uri, params)

という形でYOすることができたので、TwitterのStreamingAPIと組み合わせて、YO通知を実装します。
@clientはhttp://yutaszk23.hatenadiary.jp/entry/2014/06/05/142337の通りに宣言されたStreamingAPI用のClientとします。

require 'twitter'
require 'net/http'
require 'uri'
require 'yaml'

def justyo
  uri = URI.parse('http://api.justyo.co/yo/')
  puts Net::HTTP.post_form(uri, {api_token: @YO_TOKEN, username: @YO_USERNAME})
end

def stream
  @client.user do |status|
    if status.is_a?(Twitter::Tweet)
      # reply判定
      if status.in_reply_to_screen_name == @user_screen_name
        justyo
      end

      # RT判定
      if status.retweeted_status.user.screen_name == @user_screen_name
        justyo
      end
    end

    # favorite判定
    if status.is_a?(Twitter::Streaming::Event) && status.name == :favorite
      justyo
    end
  end
end

@YO_TOKEN = YOUR_API_TOKEN
@YO_USERNAME = YOUR_YO_NAME

stream

これでこのプログラムが動いている間は(手元のPC上でOK)通知がYOで来るので、是非試してみてください。永続化したければPCを付けっぱなしにするかサーバで動かすか、で。
これで通知のないTwitterクライアントでも大まかな通知を受け取る事が出来るようになりました(公式併用すればいいのですが)。
これからはPush通知で詳細な内容を通知されるようにしたいのですが、ネイティブ側をいじらなければならないので厳しそうです……まずはAndroidからがんばってみます。