by shigemk2

当面は技術的なことしか書かない

大量のデータを突っ込んだDBを擬似的に作る

f:id:shigemk2:20131116233105g:plain

前置き

RubyMotionでごにょごにょするのがうまくいかないので腹癒せです。

shigemk2/DB_TEST_MK2 · GitHub

ええ、大量のデータを突っ込んだDBを擬似的に作りたかったんです。 で、Twitter APIを使ってツイートのデータを突っ込むことにしました。Rubyで。 twitterというRubygemsがあるので、それを使います。

流れ

twitterのGemを利用してタイムラインの情報を取得しつつ、 ruby-mysqlでINSERT文を実行しつづけるというスタイルです。

原因は不明ですが、一度に151のツイートしかINSERTできんかった…

152個目をINSERTしようとすると、こんなエラーを吐かれるのです。

"2013-11-30 17:54:54 +0900 shigemk2: はてなブログに投稿しました\nJUnitを試すにあたって - by shigemk2\n http://t.co/fUWivMxd5H"
/Users/shige/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/ruby-mysql-2.9.12/lib/mysql/protocol.rb:502:in `read': undefined method `encoding' for nil:NilClass (NoMethodError)
    from /Users/shige/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/ruby-mysql-2.9.12/lib/mysql/protocol.rb:178:in `authenticate'
    from /Users/shige/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/ruby-mysql-2.9.12/lib/mysql.rb:116:in `connect'
    from /Users/shige/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/ruby-mysql-2.9.12/lib/mysql.rb:50:in `new'
    from tweet.rb:27:in `block in <main>'
    from tweet.rb:23:in `collect'
    from tweet.rb:23:in `<main>'

手順

  1. なにはともかくbundle install
  2. PHPでOAuth認証して自分のつぶやきを表示する [Twitter API 1.1 対応版] | webOpixel あたりを参考に、Twitter APIのトークンを取得する (必要な情報は4つあった)
  3. 得られたトークンはconfig.ymlに書く
  4. twitter.sqlのSQL文をたたいてDBとテーブルの雛形を作る
  5. ruby tweet.rbを実行する
  6. もしくは insert.sh に引数(=実行回数)をつけて実行してもいい。