Skip to content

Instantly share code, notes, and snippets.

@rummelonp
Last active December 11, 2015 09:18
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rummelonp/4579100 to your computer and use it in GitHub Desktop.
Save rummelonp/4579100 to your computer and use it in GitHub Desktop.
Twitter ストーキングツールのブレスト的なアレ

Agharta

あらすじ

その昔 creepy というソフトウェアがあった
Twitter の UserStream を拾い設定したフィルターにかけて処理をするという中身も動作も邪悪なツールである
また、独自のタスクをサブコマンドで実行するという機能もあった

本プロジェクトはこのツールをより使いやすく拡張しやすい形に書き直し gem としてリリースすることを目標とする

目標

  • サブコマンドを Ruby 初心者でも作れるよう簡単に
  • プラガブルで Ruby 初心者でも拡張しやすく
  • (Ruby の読み書きが出来無い人でも使えるようにしたい)

使い方

インストール

gem install agharta                # インストール
agharta execute example/stream.rb  # サンプルレシピを実行
agharta cat example/stream.rb      # サンプルレシピを表示
agharta user:add                   # 新規アカウントを認証をし ~/.agharta/config.yml に追加
agharta user:default               # デフォルトアカウントを変更
agharta user:list                  # アカウント一覧を表示
agharta edit stream.rb             # ~/.agharta/recipes/stream.rb を編集
agharta cat stream.rb              # ~/.agharta/recipes/stream.rb を表示
agharta execute stream.rb          # ~/.agharta/recipes/stream.rb レシピを実行
agharta console                    # レシピコンテキストで REPL を起動

レシピ

~/.agharta/recipes/stream.rb

stream {
  # アカウント設定
  # mitukiii アカウントを使用(config.yml 内で default 指定で省略可)
  credentials :mitukiii

  # アカウント設定
  # set :consumer_key, …
  # set :consumer_secret, …
  # set :oauth_token, …
  # set :oauth_token_secret, …

  # アカウント設定
  # set {
  #   :consumer_key => …,
  #   :consumer_secret => …,
  #   :oauth_token => …,
  #   :oauth_token_secret => …,
  # }

  # 全てのリプライを受け取る
  replies_all
  # params[:replies] = :all

  # フォローからのメッセージを受け取る
  with_followings
  # params[:with] = :followings

  # プッシュ/ロギングするキーワード設定
  keyword {
    ignore_self!
    include 'mitukiii', 'たけしまさん'
    exclude /^.*(RT|QT):? @[\w]+.*$/i
    notify :im_kayac
    log 'tenga.log'
  }

  # 全てのツイートを Fluent に保存/出力/ロギング
  user {
    all!
    store :fluentd, 'timeline', :host => 'localhost', :port => 24224
    log STDOUT
    log 'tweet.log'
  }

  # @TENGA_PR のツイートをプッシュ/ロギング
  user(:TENGA_PR) {
    notify :im_kayac
    log 'tenga.log'
  }

  # イベントをプッシュ/ロギング
  event {
    on :reply, :retweet, :direct_message, :favorite, :follow, :list_member_added, :list_user_subscribed
    notify :im_kayac
    log 'events.log'
  }
}

あるいはこうも書ける

~/tools/stream.rb

require 'agharta'

recipe = Agharta.new

recipe.stream {
  # do something...
}

recipe.execute

レシピ(フィルター)

~/.agharta/recipes/filter.rb

filter {
  credentials :mitukiii

  # トラックキーワード指定
  track :mitukiii, 'たけしまさん'
  # params[:track] = 'mitukiii,たけしまさん'

  # 追跡する場所指定
  locations -122.75, 36.8, -121.75, 37.8
  # params[:locations] = '-122.75,36.8,-121.75,37.87

  # 追跡するユーザーID指定
  follow 1, 2, 3
  # params[:follow] = '1,2,3'
  
  keyword {  }
  user {  }
}

レシピ(サンプル)

~/.agharta/recipes/sample.rb

sample {
  credentials :mitukiii

  keyword {  }
  user {  }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment