rubyでtwitter

半年前くらいに書いたtwitterアクセス方法が若干変わっていたのでメモ

以前

twit = Twitter::Base.new(id,pass)

変更後

httpauth = Twitter::HTTPAuth.new(id, pass)
twit = Twitter::Base.new(httpauth)

大した変化じゃないけど念のため
というか、rubytwitterアクセスするには、gemのtwitterかtwitter4rがあるようだけど、私はtwitterのほうを使ってます。APIの使い方が本家のそのまま使えばいい感じっぽいので楽なんだよね。

例えば、タイムラインを取得するとして、Twitter本家のAPIドキュメントを見ると、使えるパラメーターが

  • since_id
  • max_id
  • count
  • page

があるのが分かる。これを

twit.friends_timeline({:count => 200})

のように引数にハッシュでパラメータのシンボルに対して値を与えてやればできるので悩まなくてすむ。楽。

ネタ出し

twitterの何か面白そうなサービスを考えてメモ書きしておこうのコーナー

ふぁぼったートーナメント

前日の赤ふぁぼかそれ以上の閾値以上のPostを対象としてその日どれが一番面白かったのかを決定。
その人のフォロー数・総ふぁぼられ数・発言数などを考慮してランダム要素含めてランキングなりする。
トーナメントと名付けたのはWBCがあったばかりだからなのさ

ふぁぼワードクラスタ

ユーザーのふぁぼする傾向にある単語でクラスタを形成してみる。
「幼女」の発言するとこんな人がふぁぼってるよってのが分かるはず。
形態素解析N-gramあたりで発言を分解してみればできるかもね

アイコンクラスタ

似たアイコンの人でクラスタわけすると面白いんじゃない?
画像処理の細かい技術知らないのでなんにもわかりません。
誰かーつくってー

twitterBOT1

Twitter上で3題噺のネタをPost提供してくれるようなBOTはないかという話が出たので適当に製作。

3題噺は小説の短編とかを書くときのお題でということで、名詞を3つPOSTするようなものを考えた。
名詞リストとして、Mecabの名詞リストってのがPCの中ですぐ見つかったので流用。
58,000件強の名詞リストをそのまま流用。

で、あとはランダムにここから3つ選んでPostさせるだけ。

twit = Twitter::Base.new(id, pass)

str = "3題噺テーマ:".toutf8
nouns = open(名詞リスト).readlines
3.times do
  i = rand(nouns.size)
  str <<  nouns[i-1].chomp.toutf8 +  "  "
  nouns.delete(i-1)
end

twit.update(str.toutf8)

あとは、定期的に動作するように設定。適当に6時間ごとに起動設定にすることにした。
cronを利用することにする。

crontab -e
0 */6 * * * ruby 〜.rb

以上。
問題は、Postするリストの中に意味が良くわからないやつが多いこと。
選別するべきなんだろうけど、数が多すぎるので当面放置。

アカウントは今はとりあえず @y881 にて

twitterアクセス準備

twitterにアクセスするためのプログラムを調べてみた。すげー簡単なんですね。

アクセス

require 'rubygems'
gem 'twitter'
require 'twitter'

twit = Twitter::Base.new(id,pass)

だけ。

gem 'twitter'が無くてエラー出してrequireに変えてエラーだして、両方書いてやっと動いた。
ここでどんな内部処理が行われているのかを調べたい。

TL取得

TLを取得してstatus内のPostを見るときに文字化けで内部参照になることがある。
これは、

$KCODE='utf8'
require 'kconv'
require 'cgi'
twit = Twitter::Base.new(id,pass)
twit.timeline do |t|
  CGI.unescapeHTML(t.text.toutf8)
end

なんかで問題解決。文字コードは適宜必要なタイプに書き換えるべし

railsアプリケーション作成過程 その2

DBいじり

http://centos.oss.sc/ruby/sqlite/ を参考にSQlite と、SQliteRubyコネクタの導入
特に問題なく動作。

yum install sqlite-devel
gem install sqlite3-ruby

DBをいじるのはrailsのmodel部分の担当。モデルの作成

ruby script/generate model 

何かいろいろ作成される。そこから db/migrate/~~_create_.rb にアクセス
self.upのなかにDBに必要なカラムの設定

def self.up
  create_table : do |t|
    t.column :hoge, :string
    t.column :huge, :string
    t.column :<カラム名>, :型
  end
end

登録できる型は[:string :text :integer :float :datetime :timestamp :time :date :binary :boolean]のはず

記述したら以下実行によって、簡単にDBアクセス用のページが作成されるはず。

ruby script/generate scaffold 

のはずなんだけど、ここで、エラーが出た。
調べた結果、http://renard.air-nifty.com/blog/2008/02/ruby_on_railsra_d5e6.html を参考にすると

ruby script/generate scaffold  --skip-migration

にすると、良いとのことで実行。エラーなしで通過。OK

が、ここで生成されたページみても何も登録できない。さっきと同じエントリ参考にして

ruby script/generate scaffold  <カラム名>:型 --skip-migration

らしい。やってみたらうまく登録画面ができていたので成功。

railsアプリケーション作成過程 その1

インストール

rubygems を利用

gem install rails

railsプロジェクト生成

適当なディレクトリでコマンド入力

rails <プロジェクト名>

gemのVerが1.3.1でないといったエラーが出たのでVerアップ作業

gem update --system

実行したらエラーが出たので、以下コマンドで実行

gem install rubygems-update
update_rubygems 

無事アップデート完了
再度プロジェクト作成して成功

確認のためにテスト起動

cd <プロジェクト先>
ruby script/server

で、ブラウザで http://localhost:3000/ 確認 OK

簡単な機能確認

参考サイト : http://www.rubylife.jp/rails/

最初にcontrollerの自動生成機能を使う

ruby script/generate controller 

生成されたapp/controller/を覗いて_controller.rbを適当に編集

class Con1Controller < ApplicationController
  def page1
    @i = 0
  end
  def page2
    @str = ''
  end
end

次に、app/views//を覗いて、そこに上で作ったメソッド名.rhtmlを作成
以下のように適当にコードを読み込むような感じで記述

page1.rhtml



page1


<%= @i %>

サーバー再度起動して確認

ruby script/server

http://localhost:3000//page1

viewsで書いたコード上の変数の中身が表示されていたので、OK