Ruby 天気予報編 (10) プログラムの完成 【計算数学 I】
Updated:
(2019-04-11 追記)この教材は古いです
Twitter API を叩くところがあるのですが、 2018 年 8 月以降 Twitter 社は現在スパムを非常に厳しく取り締まっており、 API の許可をもらうまで時間がかかります。したがってこの教材は 2 週間程度で終わる教材ではもはやありません。お役に立てず申し訳ありません。他の教材をやってください。
プログラムの完成
以下では、前の記事で保存した 4 つの key, token, secret は
secret
というディレクトリの下に保存したものとして説明します。
ここまでくればプログラムの作成までは 1 つの鍵をはめ込むだけです。 それは、ファイルから文字列を読み込む方法です。
ファイルから文字列を読み込む
説明済みのことを組み合わせればできます。
- 絶対パスを得るためには
File.expand_path
を使用する。(参考) - ファイルを開くには
Kernel.#open
を使用する。開いたファイルから文字列を読み込むにはread
を使う。 (参考)
ただし、 read
で得た 文字列の末尾に改行が存在している場合、取り除く 必要があります。 Ruby では、「末尾に改行が存在すればそれを取り除くが、ない場合は何もしない」という専用のメソッドがあります。それが String#chomp
です。以下の実行例で確認してください。 \n
は文字列の中では改行を意味しています。
irb(main):001:0> str = "そんな恥ずかしい名前の人は知らない\n"
=> "そんな恥ずかしい名前の人は知らない\n"
irb(main):002:0> str.chomp
=> "そんな恥ずかしい名前の人は知らない"
irb(main):003:0> str = "兄さんのバカ!変態!ラノベ主人公ー!"
=> "兄さんのバカ!変態!ラノベ主人公ー!"
irb(main):004:0> str.chomp
=> "兄さんのバカ!変態!ラノベ主人公ー!"
なぜソースコードに直接書かないのか
ファイルから読み込まずとも、直接ソースコードに書いてもいいではないかと思う方もいらっしゃるでしょう。確かに問題ないことも多かろうと思われます。しかし、最近では ソースコードを一般公開する 場合が多くなってきています。この場合、ソースコードに直接 key, token, secret を書き込むと、ソースコードを公開する際に支障が出ます。一般公開してはならない部分を別ファイルから読み込むようにしておけば、ソースコードを公開することができます。また、セキュリティ上も恩恵を受ける場合があります。
受講生の方は、今すぐソースコードを公開することはないかもしれませんが、将来そういう機会を得る方もいらっしゃるでしょう。
プログラムを完成させよう
プログラム例
# coding: utf-8
require 'open-uri'
require 'json'
require 'twitter'
def get_weather()
# さっき作ったもの
end
def make_str(day)
# さっき作ったもの
end
def load_key(file)
keypath = # File.expand_path( 相対パス , __FILE__)
open(keypath) {|input|
return input.read.chomp
}
end
def update(str)
client = Twitter::REST::Client.new{|config|
config.consumer_key = # load_key( ファイル名 )
config.consumer_secret = # load_key( ファイル名 )
config.access_token = # load_key( ファイル名 )
config.access_token_secret = # load_key( ファイル名 )
}
client.update(str)
end
hash = get_weather()
ary = hash["forecasts"]
str = # 自分が投稿したい文字列
# 末尾に時刻を挿入しておくと、同じツイートにならないため何回か投稿できる
# この方がテストしやすかろう
update(str + Time.now.strftime("(%H:%M:%S)"))
実行例
余談
最後の部分で時刻を挿入しましたが、他の形式にアレンジしたい場合は strftime
を各自調べましょう。
このプログラムをクラウドサーバなどで定期的に実行すれば、 Twitter bot になります。もしそれを望むなら、 cron や clockwork などを調べてみると良いでしょう。
ナビゲーション
この教材は、東京大学理学部数学科専門科目「計算数学 I」のために執筆されたものです。 このサイトに掲載する際に、記事を分けてあります。 他の回はRuby 天気予報編 一覧 #ks1-ruby-forecastから御覧ください。
Ruby 入門 (計算数学実習資料集)には他の TA が書いた教材があります。