twitterにつぶやく植物を作りました

twitterにつぶやくヒヤシンスを作りました。

すくすく芽々 (sukusuku_meme) on Twitter

sukusuke_meme

こんな感じです。

普段はヒトリゴトを、
水が足りなくなると僕のアカウント宛に
「@happy_meme 水が足りないでやんす」
とか言います。

語尾がヤンスなのはヒヤシンスだからです。

水が足りないかどうかの判断は、

ピアノ線(導電体ならなんでも良い)を2本土にぶっ刺して

電気の流れ具合をarduinoのアナログ入力から測定してます(乾燥すると電気が流れにくくなる)。

twitterbot

芸術的な概略図

Ethernet Shieldを使うことでarduinoから直接twitter APIにアクセスしてます。

実物はこんな感じ。

中身

これで水やりを忘れることもなくなるはず!

参考にさせていただいたページ
スタパ齋藤の「週刊スタパトロニクスmobile」
Arduinoでマイコンしよう!!

建築発明工作ゼミ2008: Arduino Ethernet Shield
ArduinoからTwitterにPOSTするライブラリ – Okiraku Programming
Less To It Than That: Arduino をはじめてみた (4) アナログ入力・アナログ出力

スイッチサイエンス/商品詳細 Arduino Duemilanove 328 (最も標準的なArduino)
スイッチサイエンス/商品詳細 Arduinoイーサネットシールド

rubyでtwitterbotを作ってみる その2 自動follow返し

前回

今回はfollowしてくれてる人に自動でfollow返しをする関数を作ります。

自分がfollowしてる人とfollowされてる人の配列を作って
引くとfollow返しすべき人の配列が出来ます。

今回はボット用なので、
自分がfollowしてる数 < followされてる数
の場合しか考慮してません



# 自動follow返し
def auto_follow(base)
# friendsを取得
friends = Array.new
base.friends.each{
|f| friends << f.id } # followersを取得 followers = Array.new base.followers.each{ |f| followers << f.id } # friendsとfollowersの差を取ってfollow返し targets = Array.new targets = followers - friends targets.each{ |id| base.friendship_create(id, true) } end

--

配列 - 配列をしたらかぶってないのが残るというrubyさんの賢さに感動したんだけど
最近の言語って皆こんなに賢いの?

rubyでtwitterbotを作ってみる

rubyでtwitterのbotを作ってみます。

まずはrubyでtwitterのAPIを叩くところまで。

rubyにはRuby Twitter Gemという便利なものがあるのでそれを使います。

portsからgemsを入れる。
# cd /usr/ports/devel/ruby-gems
# make install clean

twitter gemを入れる。
# gem install twitter

準備完了。

ひとまずネット上のサンプルを参考に作ってたら
`initialize’: wrong number of arguments (2 for 1)とかいうエラーが出た。
base = Twitter::Base.new(‘username’, ‘password’)
の引数の数があってないとか。

で、調べてみるとこのやり方は昔ので、最近のバージョンでは一度HTTPAuthに通してからするようになっている。
httpauth = Twitter::HTTPAuth.new(‘username’, ‘password’)
base = Twitter::Base.new(httpauth)

参考

でこれが作ってみたサンプルコード。
—-

#!/usr/bin/ruby

require ‘rubygems’
gem ‘twitter’
require ‘twitter’

message = “ほげほげ”

httpauth = Twitter::HTTPAuth.new(‘account’, ‘password’)
base = Twitter::Base.new(httpauth)

# つぶやく
base.update(message)

# タイムラインを表示
puts “Friends Timeline”, “=” * 50
base.friends_timeline.each { |tweet| puts tweet.text }

—-
とてもシンプル!

rubyでtwitterbotを作ってみる その2 自動follow返し