読者です 読者をやめる 読者になる 読者になる

めもりすずこ

めもりすずことは、僕に関する出来事を記録することにより記憶を助ける文書である。

RubyでTweetをChatworkに流す

usbはNCC Advent Calendar 2015を応援しています.

有名人が我が家にやってきた的な感じが味わえます.

最初に言っておきますが僕はあんまりRubyを理解してないです.

ようやくプログラミング系の記事を書きます.

手順

  1. Tweetを取得する
  2. 取得したTweetをChatworkに投稿する
  3. 楽しい

超簡単(スクランブルエッグぐらい簡単).

Tweetを取得する

gem install tweetstreamして,以下を書きます.

require 'tweetstream'

#consumer keyとかはhttps://dev.twitter.com/から
TweetStream.configure do |config|
    config.consumer_key       = '一森すずこ'
    config.consumer_secret    = '二森すずこ'
    config.oauth_token        = '三森すずこ'
    config.oauth_token_secret = '四森すずこ'
    config.auth_method        = :oauth
end

#取得したいuserのid(今回は僕のになっています)
id = 499821292

#followは指定したid関連のTweetを追います(その人のTweetとかReplyとか)
TweetStream::Client.new.follow(id) do |status, client|
    #status.textはTweet本文
    #status.user.screen_nameは@Magic_Gancelotとか
    #status.idはTweetのid
    puts "#{status.text}\nhttps://twitter.com/#{status.user.screen_name}/status/#{status.id}" 
end

「(Tweet本文)\n(Tweetのリンク)」が出力されていく.

Chatworkに投稿する

gem install faradayして,以下を書きます.

require 'faraday'

connection = Faraday.new(url: 'https://api.chatwork.com') do |builder|
    builder.request(:url_encoded)
    builder.response(:logger)
    builder.adapter(:net_http)
end

room_id = '投稿したいroomのhttps://www.chatwork.com/#!rid(ここを入れる)'

connection.post do |request|
    request.url('/v1/rooms/#{room_id}/messages')
    request.headers = {
        'X-ChatWorkToken': 'Chatworkのアレ'
    }
    request.params[:body] = 'Chatworkに投稿したい内容'
end

投稿される.

Tweetを取得する」と「Chatworkに投稿する」を合わせる

取得したTweetをChatworkに投稿する

require 'tweetstream'
require 'faraday'

#To飛ばしたい人のidを入れる(任意)
ids = ['100000', '200000', '300000', '40000'].map do |id|
    "[To:#{id}]"
end

connection = Faraday.new(url: 'https://api.chatwork.com') do |builder|
    builder.request(:url_encoded)
    builder.response(:logger)
    builder.adapter(:net_http)
end

TweetStream.configure do |config|
    config.consumer_key       = '一森すずこ'
    config.consumer_secret    = '二森すずこ'
    config.oauth_token        = '三森すずこ'
    config.oauth_token_secret = '四森すずこ'
    config.auth_method        = :oauth
end

#取得したいuserのid(今回は僕のになっています)
id = 499821292
room_id = '投稿したいroomのhttps://www.chatwork.com/#!rid(ここを入れる)'
TweetStream::Client.new.follow(id) do |status, client|
    #@xxxを先ほどのToに置換する(任意)
    #text = status.text
    text = status.text.gsub(/@\w+/){|m| ids.sample}

    #ReplyだったらChatworkには投稿しないよ
    break if status.id != id

    connection.post do |request|
        request.url('/v1/rooms/#{room_id}/messages')
        request.headers = {
            'X-ChatWorkToken': 'Chatworkのアレ'
        }
        #Tweet本文とTweetのリンクを投稿する
        request.params[:body] = "#{text}\nhttps://twitter.com/#{status.user.screen_name}/status/#{status.id}"
    end
end

楽しい

こんな感じで投稿できます.

f:id:mimorisuzuko:20151209190442p:plain

諸事情によりいろいろ隠したものにしています(たそ〜).

NCCの人は某たそチャンネルに行くと正しい結果が見れます.

やってみると意外と楽しい(ウザい).