2016.6.8
ろんぐさんのRuby入門#1【twitter bot#1】
さてついにRubyに取り掛かります。タイトルにもありますように、最初はtwitterのbotを作ります。
やりたいこととしては以下の3つです。
・一定間隔でpostする
・postしたツイートは一定期間経過後削除される
・特定のpostにリプライを送る
まぁこんな感じです。どんなものを想定してるか予想してみてください(笑)
さて、本来はRuby on Railsの話をするつもりだったんですが、botはRailsじゃなくても作れる程度に軽いものなので、まずはRubyという言語を学ぶという意味で、生のコードを書こうかなと思います。
このコードを見る限り、javascriptみたいな感じで書けそうですね。要するに全部オブジェクトって思えばあとはリファレンス引けば書けそうな気はします。
入門ということでRubyのインストールですね。まぁこの辺は
Ruby Installerとか使えばなんか良い感じになります。
プログラムの実行は、rbファイルをインタプリタに通せば実行できるっぽいですね。今までPHPに慣れすぎたせいでブラウザから実行したくなっちゃうんですが、そうするためにはちょっと違うアプローチが必要になりそうです。フレームワークだったりCGIだったり。
でもその辺のGUIの話はまた後で大丈夫かなって感じしますが、サーバーで動かせるかどうかをまず知っとかなきゃいけないみたいですね。
バージョンが若干古いですが、まぁ2系なら大丈夫でしょ、ということで問題なく開発できそうですね。
gemを入れる必要が出てきた場合どうしたらええねんって感じしましたが
たぶん問題なくできそう?って感じはしたので、必要になったら参照すれば良いかなといった感じです。
とりあえずbot自体は
こことか参照すれば良いですかね。こいつをcron実行させればめでたくbotの完成というわけです。
ただtwitterのAPIはローカルだと動かなかったので、その辺で詰みそうですねー。やだなー。
まぁ最初の一歩としては
実行したら「テスト」とつぶやかせるプログラムを書いてみることにしましょう。
> gem install twitter
> gem install userstream
|
で、どうやらこいつらをインストールしなくちゃいけないみたいですね。gemを使うには
RubyInstallerの下の方にある
DEVELOPMENT KITが必要です。
なんかエラーが出たら
このページとか参照して、コンフィグにパスを追加したら上手くいきました。この辺はめんどくさいので割愛。(笑)
で、こいつらをrequireして取り込めば動くそうです。じゃ、さっそくコードをコピーして動かしてみましょう。
文法とか全然知らないですが、今はフィーリングで解釈しましょう。
なんやコイツ。
理解不能なコードが出現しました。
どうやらこれはRubyに特有な
ブロックという書式らしいのですが、それだけでは説明が不十分なんですよね。
というのも、意味が分からないのは
|config|というパイプライン部分です。なんだこれ。引数か?
という謎を昨日調べてたんですが答えにたどり着きませんでした。
で、もう一回今探してみると、やっと
答えらしきものが書かれてるページを見つけました。あ、もしかすると
こちらの方が分かりやすいかも。
まぁつまり、この例でいうと|config|のconfigが引数で、そいつを使った関数っていう普通な認識で良いみたいですね。
こちらのページの例も結構分かりやすいかなと思います。
この例をまとめると、まず
arithmetic_sequence(init,diff,count)が実行され、ブロックが渡されているので3行目は真になります。
で、
timesメソッドにより、繰り返し処理がされるわけですね。
そして5行目のyield(current)が、ブロックが実行される場所になるわけですね。ここでブロックの引数nにcurrentが代入され、
putsが実行されます。要するにこれはprintです。で、現在currentにはinitがそのまま、つまり2が代入されているのでコンソールに2が表示されます。
で、ブロックの処理が終わったのでまた元に戻って・・・・・・っていうのを繰り返しています。
つまり、最初のプログラムに戻ると、要するにconfigというオブジェクトに色々代入してるわけですが、これ実体参照じゃないと意味なさなくないか?ってどーしても思っちゃうんですが、このブロックの引数って実体参照なんですかね?
もう意味わかんないので
そういうことにしとこう。
ということで、次回はこの続きからやっていこうかと思います。思ったより多言語と違うところ多いみたいですねRubyって。でも使いこなせれば確かに便利そうではあるな。