Kotz’i’jの返信機能も修正したことだし、このツイッターボットの紹介動画を作成した。フォロワー数が増えてくれば、それだけ問題点等も見つかりボットの改善がしやすくなるし。
そんなに時間もかけられないので素人感満載の動画だけど、まぁボットがどんなものかは分かるかな。BGMはグアテマラで最も有名な曲のひとつであるLuna de Xelajú。
							
			
							Kotz’i’jの返信機能も修正したことだし、このツイッターボットの紹介動画を作成した。フォロワー数が増えてくれば、それだけ問題点等も見つかりボットの改善がしやすくなるし。
そんなに時間もかけられないので素人感満載の動画だけど、まぁボットがどんなものかは分かるかな。BGMはグアテマラで最も有名な曲のひとつであるLuna de Xelajú。
TwitterbotをHerokuからXserver上に移してCronで定期的に実行する様にしてから不具合のあったreplies.rb。問題点は直ぐに見つかったけど、その後Cronから実行するとこんなエラーが。
| 
					 1  | 
						replies.rb:37:in `split': invalid byte sequence in US-ASCII (ArgumentError)  | 
					
で該当のコードがこちら。
| 
					 1 2 3 4 5 6  | 
						open('dictionaries/vocList.txt') do |f| 	f.each do |line| 		a, b = line.split(/\t/) 	    @vocList << [a, b]     end end	  | 
					
要はこのボキャブラリー・リストがアクセントやñを含む文字を含んでいるから文字化けが起こったのだと思う。で対処法としては
| 
					 1  | 
						open('dictionaries/vocList.txt') do |f|  | 
					
を
| 
					 1  | 
						open('dictionaries/vocList.txt', "r:UTF-8") do |f|  | 
					
とすると正しい文字コードが使われて実行出来るようになった。
よかった、よかった。
番外編も6まで来てしまった。Kotz’i’jはTwitter Botなので定期的且つ自動的に実行される必要がある。Herokuにデプロイしたのはそのためだったのに、思った通りに行かなかったのでXserverを活用することとした訳だし。
でCronの設定。こちらはSSH上でも出来るけどウェブページから。
サーバーパネルからCron設定を選択。
適宜入力して実行を試みる。
色々試して
こういう風にコマンドを入力したけどどうしても
| 
					 1 2  | 
						kotzij/TwitterBot/tweets.rb:2:in `require': no such file to load -- rubygems (LoadError) 	from kotzij/TwitterBot/tweets.rb:2  | 
					
というエラーが出てしまった。
SSH上では実行出来ているのでgemが無いということはない。色々検索したけど解決策が見当たらない。そもそもレンタルサーバー上でgemをrequireするRubyプログラム実行例が全く無い様な気がする。
試行錯誤の上思いついたのが.bashrcに記載したパスをCronでプログラムを実行する際に読み込めないかということ。つまり
| 
					 1  | 
						export PATH=$HOME/kotzij/bin:$HOME/kotzij/bin/bin:$PATH && ruby kotzij/TwitterBot/tweets.rb  | 
					
こういう風に入力してみた。
ただこうするとgemは見つかるけど今度はdicitionariesフォルダ下にあるワード・リストが見当たらないということに。色々試行錯誤した結果カレント・ディレクトリがrootになっていることが問題かなと思いこちらも設定することとした。つまり
| 
					 1  | 
						cd $HOME/kotzij/TwitterBot/ && export PATH=$HOME/kotzij/bin:$PATH && ruby tweets.rb  | 
					
こうした。これでしっかりと実行出来る様になった。これで好きな様にボットを管理出来る様になった。
RubyもGemもインストール出来たところで実際にプログラムを実行してみる。
sample.rb
| 
					 1 2 3  | 
						#!/usr/kotzij/bin/ruby #print "Content-Type: text/html\n\n" puts "Al Kotz'i'j nub'i' in"  | 
					
一行目で利用するRubyを明示する。以前書いた通り、Xserverには異なるバージョンのRubyがインストールされているため。
2行目はブラウザからプログラムを実行する時に必要。なので今回は特に必要はない。因みにブラウザからプログラムを実行する時はパーミッションを705に変更する必要がある。それから.htaccessをプログラムと同じディレクトリに置く必要あり。Rubyの場合記述する内容は
| 
					 1  | 
						AddHandler cgi-script .rb  | 
					
これは最低限でプログラムによっては記述すべき内容が増える。
ディレクトリを移動してプログラムを実行してみる。
| 
					 1 2 3  | 
						cd ~/kotzij -bash-3.2$ ruby sample.rb Al Kotz'i'j nub'i' in  | 
					
ちゃんと実行出来た。
Al Kotz’i’j nub’i’ in (私の名前はKotz’i’jです)。”Al”でKotz’i’jが女性と判る。
次にgemを含むtweetsプログラムが実行出来るか試してみる。
| 
					 1 2  | 
						cd ~/kotzij/TwitterBot ruby tweets.rb  | 
					
後はXserverのCronを使って定期的にツイートさせることが出来れば目標達成。
次はRubyGemsのインストール。
まずは移動する。
| 
					 1  | 
						cd ~/kotzij/src  | 
					
それからRubyGemsをダウンロード。こちらもTwitter Botを作成した当時のバージョンをインストールする。
| 
					 1  | 
						wget rubygems.org/rubygems/rubygems-2.6.13.tgz  | 
					
解凍して
| 
					 1  | 
						tar xvzf rubygems-2.6.13.tgz  | 
					
移動して
| 
					 1  | 
						cd rubygems-2.6.13  | 
					
インストール。
| 
					 1  | 
						ruby setup.rb  | 
					
の予定だったけどエラーが出た。
| 
					 1  | 
						Rubygems now requires Ruby 1.8.7 or later  | 
					
要は先にインストールしたRuby 2.3.3ではなくデフォルトの1.8.5を使っているからこうなってしまう。なのでこうすればOK。
| 
					 1  | 
						$HOME/kotzij/bin/ruby setup.rb  | 
					
インストール出来たかの確認。
| 
					 1 2  | 
						gem -v 2.6.13  | 
					
Heroku用に作ったGemfileを作成しているのでbundlerだけインストールして他のgemはbundler経由でインストールする。各gemのバージョン管理もその方が楽。
ということでまずはbundlerのインストール。
| 
					 1  | 
						gem install bundler  | 
					
インストール出来た筈なのに
| 
					 1  | 
						bundle -v  | 
					
で
| 
					 1  | 
						bundle: command not found  | 
					
となってしまう。
| 
					 1  | 
						gem env  | 
					
で見られるEXECUTABLE DIRECTORYにパスを通すとbundleが使える様になった。
| 
					 1 2  | 
						bundle -v Bundler version 1.15.4  | 
					
次に
| 
					 1  | 
						bundle init  | 
					
と叩くとGemfileが作成される。
これに使用したいgemを記述する。以前作ったGemfileの内容は
| 
					 1 2 3 4  | 
						source 'https://rubygems.org' gem 'sinatra' gem 'twitter', '5.17.0' gem 'google_drive', '2.1.5'  | 
					
だったので今回も同じ様に。
Gemfileに記述したgemをbundle経由でインストール。
| 
					 1  | 
						bundle install  | 
					
インストール出来たか確認してみる。
| 
					 1  | 
						gem list  | 
					
記述したgemがリストに載っていればOK。