light log

学んだこととか

RubyでTwitterに投稿してみた

もうあらゆるところで解説されまくってる感じのネタだけど、やってみた。

自分のTwitterアカウントにツイートを投稿するだけなら超カンタン。

目標

自分のTwitterアカウントにRubyプログラムからツイートを投稿する。だけ。なので例えば以下のようなことは今回はしない。

  • サービスとして公開して任意のTwitterアカウントと連携
  • 指定した時刻での自動投稿

ツイート内容は(なんでもいいんだけど)、その日の年における通算日付にする(RubyTime#yday。2/1なら32日目)。簡単に実装できて、日付ベースだから今後毎日自動投稿とかにしたときに相性がよさそう。

環境

  • Ruby: バージョン 2.2.0p0
  • Twitter Gem: バージョン 5.14.0

アプリを登録する

以下のページの[Create New App]からアプリ登録する。

Twitter Application Management

Name, Description, Websiteを入れて、利用規約に同意して登録。

自分のTwitterアカウントへのアクセストークンを生成する

アプリを登録したあとのページの、[Keys and Access Tokens]タブから。

Gemのインストール

$ gem install twitter

sferik/twitter - GitHub

プログラムを書く

書いたプログラムが以下。余分な部分が多いけど、ツイートに最低限必要なのはrequireconfigのところと末尾の2行だけ。メソッド二つはツイートを組み立てるためのただのヘルパー。

keyやtokenは上記アプリ登録後のページで確認する。

ライブラリの詳細な使い方は上記GitHubページを参照。

require 'twitter'

config = {
  consumer_key: 'YOUR_CONSUMER_KEY',
  consumer_secret: 'YOUR_CONSUMER_SECRET',
  access_token: 'YOUR_ACCESS_TOKEN',
  access_token_secret: 'YOUR_ACCESS_SECRET',
}

def percent_of_day(day)
  ((day.to_f / 365) * 100).round
end

def buildTweet
  now = Time.now
  origin = Time.new(now.year, 4, 1)

  yday = now.yday
  day_from_origin = yday - origin.yday
  yday_percent = percent_of_day(yday)
  day_from_origin_percent = percent_of_day(day_from_origin)

  "#{now.month}#{now.day}日は#{now.year}年の#{yday}日目(#{yday_percent}%)\n" +
  "4月1日から#{day_from_origin}日目(#{day_from_origin_percent}%)\n" +
  "今日もそれなりにがんばろう"
end

client = Twitter::REST::Client.new(config)

client.update(buildTweet)

せっかくなので自分を鼓舞するメッセージを入れた☆

メソッドの命名がひどい気はしている。

まとめ

ライブラリのおかげで超簡単だった。

他の機能でもいろいろ遊んでみたい。あとherokuとか使って自動投稿したい。