Ruby のプログラムどうやったらええんやみたいな感じだった。yak shaving 状態!!!みたいなかんじだった。
Ruby 親しみを持ちたいと思ったけど、どうしたらええんか分からなかったので、とりあえず人のツイートゲットして sqlite に取り込むみたいなの作ってる。ActiveRecord とか見様見真似なので、もっと良いやり方あると思うけど、ActiveRecord に親しみを覚えるよりか、Ruby の文法とか標準モジュールとか覚えないといけないとおもう。
処女作の名前がストーカーなの、あんまし良くないとおもう。あんまし良くなくて、ストーキング対象を保持するテーブル WATCH_USERS っていう名前にしていて、本当はストーキング対象者みたいなテーブル名が良かったんだけど、なんかうまい英語が思いうかばなくてつらみがあった。
最終的なところでいうと、RSS を吐き出して LDR で監視したり、GrowthForecast と連携させてみなさんのツイート時間の傾向を分析したり、Sinatra あたりをつかって自分用 twilog みたいなの作って、ぼくがみなさんのツイートを愛でたりしたいです。
require 'pit' require 'yaml' require 'active_record' require 'twitter' module Stalker class Main attr_reader :conf private def configure( environment ) @conf = ::YAML::load_file( './conf/settings.yml' )[environment] configure_twitter end def configure_twitter() conf = ::Pit.get("stokerss", :require => { 'consumer_key' => 'consumer key', 'consumer_secret' => 'consumer secret', 'oauth_token' => 'oauth_token', 'oauth_token_secret' => 'oauth token secret', }) Twitter.configure do |config| config.consumer_key = conf['consumer_key'] config.consumer_secret = conf['consumer_secret'] config.oauth_token = conf['oauth_token'] config.oauth_token_secret = conf['oauth_token_secret'] end end def establish_connection( dbconf ) ::ActiveRecord::Base.establish_connection( dbconf ) end public def initialize ( opts = {} ) environment = opts[:env] || 'development' configure(environment) establish_connection(@conf['db']) end def retrieve_tweets( opt = {} ) Stalker::WatchUser::get_valid_user.each do |user| opt['since_id'] = Stalker::Tweet::max_id_for(user.screen_name) retrieve_tweets_for( user.screen_name, opt ) end end def retrieve_tweets_for( screen_name, opt = {} ) Stalker::Tweet.transaction { Twitter.user_timeline( screen_name, { :since_id => opt['since_id'] || 1, :count => opt['count'] || 10, }).each do |tweet| Stalker::Tweet.new( tweet_id: tweet.id, tweet_text: tweet.text, screen_name: tweet.user.screen_name, tweet_created_at: tweet.created_at.to_s ).save end } end end class WatchUser < ::ActiveRecord::Base def self.get_valid_user where(delete_flg: 0) end end class Tweet < ::ActiveRecord::Base def self.max_id_for(screen_name) where(screen_name: screen_name).maximum(:tweet_id) end end end