最近のグアテマラにおける一連の動きについてフランシス・フクヤマがツイート。「歴史の終わり」の内容を考えると彼の考えも随分変わったなぁと思う。
What a rotten country: Guatemalan president attempts to kick out U.N. anti-corruption chief https://t.co/yGypy1oXQ6
— Francis Fukuyama (@FukuyamaFrancis) August 28, 2017
最近のグアテマラにおける一連の動きについてフランシス・フクヤマがツイート。「歴史の終わり」の内容を考えると彼の考えも随分変わったなぁと思う。
What a rotten country: Guatemalan president attempts to kick out U.N. anti-corruption chief https://t.co/yGypy1oXQ6
— Francis Fukuyama (@FukuyamaFrancis) August 28, 2017
前回の続き。
今回は作成したRubyのプログラムをHerokuにデプロイして実行する。そうすることによってHeroku Schedulerを使って定期的にプログラムを実行出来る。
まずはHeroku用のGemFileを作成。
1 2 3 4 |
source 'https://rubygems.org' gem 'sinatra' gem 'twitter', '5.17.0' gem 'google_drive', '2.1.5' |
でここに書かれているgemをインストールする。
1 |
bundle install |
するとGemfile.lockが作成される。
git関連の作業を行う。
1 2 3 |
git add -A git commit -m "Google Drive related" git push heroku master |
これで準備完了。
後は
1 |
heroku run ruby gd.rb |
で実行できる。
Heroku上で定期的に実行したい場合はSchedulerを用いる。
1 2 |
heroku addons:create scheduler:standard heroku addons:open scheduler |
これはブラウザを用いても出来る。
コマンド欄には
1 |
bundle exec ruby gd.rb |
と入力し頻度を選択。
以前、HerokuにデプロイしたRubyによるTwitterbot, Kotz’i’jでツイートへの返信を行う際に以前に読み込まれたツイートを除くため、最新のツイートIDを保存することとしたけどHeroku上のファイルはこの方法では更新されないことが判明。
代替策としてGoogle SheetsのシートにIDを保存し、毎回読み込みと更新することとした。
でその方法。
まずはGoogle APIsにアクセスし、
利用規約に同意する。
色々選択肢があるけど、HerokuにデプロイしたアプリからAPIを呼び出す場合はその他のUIを選ぶと上手くいく筈。それからユーザーデータにアクセスするを選択。
下記の画面が現れるのでJSONをダウンロードし完了ボタンを押す。
このJSONはHerokuにデプロイするアプリがあるディレクトリに保存する。
Google SheetsのシートにアクセスするRubyでプログラムを作成することとなるけど、その前にアクセス用のGoogle Sheetsファイルを作成しておく。
また、テスト用に任意のセルに値を入れておく。
ファイルを作成したらそれを選択し、共有リンクを取得。
共有リンクのd/と/edit?の間の値がキーとなるので保存しておく。
google_driveのgemをインストール。
1 |
gem install google_drive -v "2.1.5" |
ここでバージョン指定しているのはTwitterbotとの関係でFaradayが問題を起こしてしまうから。
プログラムをこんな感じで書く。
1 2 3 4 5 6 7 8 9 |
require 'rubygems' gem 'google_drive', '2.1.5' require "google_drive" #Google Drive session = GoogleDrive::Session.from_config("client_secret.json") sheet = session.spreadsheet_by_key("KEY").worksheets[0] value = sheet[1,1] p "the value is: " + value |
初めて実行した時は下記のメッセージが現れるので指示に従う。
表示されたアドレスにアクセスすると許可を求められるので承認する。
これでシートへのアクセスが出来るはず。
1 2 |
sheet[1, 1] = "word" sheet.save |
これを実行すると:
長くなったので今回はここまで。次回はこれをHerokuにデプロイして実行する方法を紹介する。
TwitterbotのKotz’i’jはマヤの象形文字を中心とした画像も定期的に投稿する様にしている。現在は0~19までの数字と幾つかの象形文字をリストからランダムに選んで投稿しているけど、写真とかも加えていこうかな。
プログラムは何も難しいことは行う必要はない。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
imageList = [] open('dictionaries/imageList.txt', 'r') do |f| f.each do |line| imageList << line end end random = rand(33) tweet = imageList[random] puts "the number is: " + random.to_s + " and the tweet is: " + tweet ENV["TZ"]="America/Guatemala" t = Time.now strTime = t.strftime("[Chanim pa Ixim Ulew %H: %M: %S]") file = "./images/" + random.to_s + ".jpg" client.update_with_media(tweet + " " + strTime, open(file)) |
画像数が30以上あるため、ファイル名をリストとして別に保存してそれを読み込む形とした。これで大分コードがスッキリした。