Tag Archives: Ruby

twitterのタイムラインを取るrubyスクリプト

1
Filed under Ruby, ウェブサービス
Tagged as ,

twitterのタイムラインをガッツリ取得して、ローカルでそのデータをゴニョゴニョしたいな、と思いついて、ちょっと調べたら、簡単そうなライブラリがrubyにあることを知ったので、試してみました!

ruby用twitterライブラリ

ruby用twitterライブラリの存在を知ることが出来たのは、このページ「Greenbear Laboratory – Ruby Twitter Gem簡易リファレンス」のおかげです。このページを参考に作業を進めていきます。
その前に、次のコマンドでRubyGemsでtwitterに関係したライブラリを検索してみます。

$ gem search -r twitter
 
*** REMOTE GEMS ***
 
atok-twitter (0.1.0 x86-mswin32)
bcms_twitter_module (1.1.3)
devise-twitter (0.1.1)
(…略)
sml-twitter (0.7.3)
teejayvanslyke-twitter (0.6.11)
twitter (1.1.1)
twitter-auth (0.1.22)
twitter-auth-with-mongo-mapper (0.1.1)
(…以下略)

たくさん見つかりました!
atok-twitterなど気になるものもありますが、今回使うのは、最初に表示されたtwitterライブラリ(http://twitter.rubyforge.org/)。現在のバージョンは1.1.1の様子ですが、これをインストールします。
最新版をインストールするので、次のようにコマンドを叩きます。(Mac OS Xなので、sudoで実行)

$ sudo gem install twitter

寄り道:RubyGemsのアップデート

簡単にインストール出来た!と思ったら、自分の環境の場合、RubyGemsのバージョンが古いと言われましたので、次のコマンドでアップデートしておきます。

$ sudo gem update --system
Updating RubyGems
Updating rubygems-update
Successfully installed rubygems-update-1.4.2
Updating RubyGems to 1.4.2
Installing RubyGems 1.4.2
RubyGems 1.4.2 installed
File not found: README

OKだったみたいなので、再度上記コマンドを実行し、twitterライブラリをインストールします。

twitterライブラリを試してみる

問題なくインストール出来たら、下記のようなテキストファイルを testTwitter.rb として作成します。

1
2
3
4
require "rubygems"
require "twitter"
 
puts Twitter.user_timeline("octi").first.text

これで、上記テキストファイル保存し、次のコマンドを入力して実行してみます。

$ ruby testTwitter.rb
tweet for my test. (テスト中)<←ここに"octi"の最新のツイート>

出来ました!タイムラインを取るのは超簡単ですね!

その他の使い方や、詳しいライブラリリファレンスはこちら(http://rdoc.info/gems/twitter)

上記タイムラインの内容

上記メソッド Twitter.user_timeline で取れるのはつぶやきの配列(Array)なのですが、その1要素の中身を出力してみます。
このような使い方に便利なのはppメソッド。下記のコマンドの出力結果を、最後に記載しておきます。

1
2
3
4
5
require "rubygems"
require "twitter"
require "pp"
 
pp Twitter.user_timeline("octi").first

[AD]

↓Rubyでtwitter botを作る本。OAuth対応らしい。この本を参考にして、時間が空いたときに一つぐらいbotをつくっておきたいと思っています。

誰でもできるTwitter Botの作り方―人気キャラにつぶやかせる

出版社:イーグルパブリシング( 2010-07-23 )

定価:

単行本(ソフトカバー) ( 192 ページ )

ISBN-10 : 486146188X

ISBN-13 : 9784861461880



↓ppメソッドで出力した結果。
Read More »

PNGファイルをパースするRubyスクリプト

1
Filed under Ruby
Tagged as , ,

ちょっとPNGの中身(ヘッダー情報とか画像以外の情報も)を見てみたくなったので、Rubyでスクリプトを書いてみました。

PNGファイルをパースする

以下のコードのポイントは「バイナリファイルの開き方」「バイナリファイルの走査」「PNGフォーマットに基づいたチャンク読み込み処理」「String#unpackによるバイナリデータの変換」です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
########################################
# testPNG.rb
# 2010/04/29
########################################
 
# 指定PNGファイルの情報を処理します.
def checkPNGInfo( filename, logfile )
  png = File.open( filename, "rb" )	# バイナリモード読み込み用モード.
  if png != nil then
    # PNGファイルシグネチャ .. 8byte固定(89 50 4E 47 0D 0A 1A 0A).
    png.read( 8 )
    # IHDRチャンク イメージヘッダ .. 25byte固定.
    png.read( 25 )
    # チャンク毎に読み進める.
    loop do
      if png.eof?
        logfile.print "DONE!\n"
        break;
      end
      # read Length (4byte)
      length = png.read( 4 ).unpack('N') # "big endian unsigned 32bit"で1文字読み込み.
      length = length[0].to_i
      logfile.print "length["+length.to_s+"]\n"
      # read Type (4byte)
      type = png.read( 4 )
      logfile.print "type  ["+type+"]\n"
      # read contents
      data = png.read( length )
      # read CRC (4byte)
      crc = png.read( 4 )
      logfile.print "\n"
    end
  end
end
 
#------------------------------------------------------------#
# main
#------------------------------------------------------------#
f = File.open("log.txt", "w") # ログ出力ファイル.
if ARGV[0] == nil
  print "usage: ruby testPNG.rb <filename.png>"
else
  checkPNGInfo( ARGV[0], f )
end

String#unpack

バイナリデータから数値への変換オプションにはいろいろな指定があるのですが、一番重要なのは、次の4つだと思います。

  • n: big endian unsigned 16bit
  • N: big endian unsigned 32bit
  • v: little endian unsigned 16bit
  • V: little endian unsigned 32bit

上記コードでは、21行目で unpack(‘N’) と読み込んでいます。

参考サイト

参考にしたのは下記のサイトです。ありがとうございました!

にほんブログ村 IT技術ブログ IT技術メモへ

[AD]

↓失敗から学ぶ。その1.

システムはなぜダウンするのか

著者/訳者:大和田 尚孝

出版社:日経BP社( 2009-01-22 )

定価:

Amazon価格:¥ 2,592

単行本 ( 312 ページ )

ISBN-10 : 482228381X

ISBN-13 : 9784822283810


↓失敗から学ぶ。その2.

動かないコンピューター ― 情報システムに見る失敗の研究

著者/訳者:日経コンピュータ

出版社:日経BP社( 2002-12-06 )

定価:

Amazon価格:¥ 1,620

単行本 ( 208 ページ )

ISBN-10 : 4822207846

ISBN-13 : 9784822207847


ファイルの行数をカウントするRubyスクリプト

0
Filed under Ruby
Tagged as ,

ちょっと書いたコードの断片をメモしておきます。
Rubyってしばらく書き続けていると便利なんですが、あまり書かないとライブラリの使い方とかそういうところで詰まるので。

ファイルの行数をカウントする

以前書いたファイルの行数を調べるコードを、ちょっと修正したモノを載せます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
########################################
# countLines.rb
#
# usage:
#   %ruby countLines.rb <filename>
########################################
 
#------------------------------#
# functions
#------------------------------#
 
# 指定ファイルの行数を返します.
def getNumLine( filename )
  File.open( filename ) { |file|
    nil while file.gets # ファイル末尾まで移動.
    return file.lineno  # 現在の行番号を出力.
  }
  return -1	# error.
end
 
#------------------------------#
# main
#------------------------------#
filename = ARGV[0]
if filename == nil
  print "usage: ruby countLines.rb <filename>"
else
  print "--> "+getNumLine(filename).to_s +  " lines in <"+filename+">"
end

ポイントは、引数の使い方と、ファイルの現在の行番号を出力するFile#linenoの使い方、の2点です。


[AD]

↓持っているRuby書籍の中で一番良いと思うのがこれ。

プログラミングRuby 第2版 言語編

著者/訳者:Dave Thomas Chad Fowler Andy Hunt

出版社:オーム社( 2006-08-26 )

定価:

Amazon価格:¥ 4,104

大型本 ( 434 ページ )

ISBN-10 : 4274066428

ISBN-13 : 9784274066429


↓第1章が「テストでコードを駆動する」となっていたり良書の予感!

Rubyベストプラクティス -プロフェッショナルによるコードとテクニック

著者/訳者:Gregory Brown

出版社:オライリージャパン( 2010-03-26 )

定価:

Amazon価格:¥ 3,456

大型本 ( 364 ページ )

ISBN-10 : 4873114454

ISBN-13 : 9784873114453


RMagickで画像情報取得

0
Filed under Ruby
Tagged as ,

ローカル環境にある大量にある画像の情報を取得してみたくて、どうしようかと悩み、RMagickを使うことにしたときのメモです。

他のライブラリについて

結論から言うと、ImageMagick + RMagickというRubyライブラリを使うことで問題は解決したのですが、そこにたどり着くまでの経緯をメモしておきます。
まず、検討している作業環境はWindowsなのですが、Rubyをかまして処理したくて、あれこれとライブラリを検討してみました。
最初に悩んだのはライブラリ。画像処理ライブラリをあれこれ探してみたら、だいたいがLinux系のライブラリの情報が見つかります。それに惑わされ、imlib2、GDという2つのライブラリを入れようとしていましたが、どうにもその後のrubyライブラリを入れるところで躓き、なかなか環境が構築できませんでした。

Windowsインストーラが素晴らしいImageMagick

最後に試したのがImageMagick
これはWindows版のインストーラもきちんとあり、DLLも配置してパスまで通してくれるので、これが一番でした。
インストーラも上記サイトで公開されているのですが、Ruby(RMagick)で使いたい人はダウンロードをちょっと待ってください。

RMagickサイコー!

私の場合Rubyで処理をしたくて、次に悩んだのが、RubyのImageMagickラッパーライブラリの選択。
gemで探してみるといくつか見つかりますが、最初に試したのがquick_magick。しかし、動作がおかしくてあきらめました。
次に試したのが、RMagick
まず、Windows版のインストーラですが、このページの下部の「rmagick-win32」というところにあります。
RMagick-2.12.0-ImageMagick-6.5.6-8-Q8.zip」というファイルをダウンロードすると、その中にWindows版のImageMagickのインストーラも入っています
このバージョンでしか整合性がとれないよ、ということなのですが、こうしてインストーラまで含めておいてもらえると助かりますね!この気配りは、他のライブラリではあまり見たことない形式だったのでちょっとうれしかったです。
インストール手順ですが、そのImageMagickをインストールし、その後、下記のようなコマンドでファイルに含まれているgemファイルを実行して、RMagickをインストールします。
gem install rmagick-2.12.0-x86-mswin32.gem

RMagickのサンプルコード

画像を読み込み、その縦横サイズを出力するサンプルコードを載せておきます。
[ruby]
require ‘RMagick’
include Magick # ライブラリの初期化.

filename=”C:/test/ruby/test.png”
i = Image.read(filename).first
print filename+”:[“+i.columns.to_s+”x”+i.rows.to_s+”]”
[/ruby]

RMagickのHTMLヘルプ

RMagickのライブラリリファレンスですが、微妙に見にくかったりするので、2nd lifeさんがつくられたHTMLヘルプ(.chm)が便利です。3年前のモノですが、私のようなRMagick初心者には十分使えるものとなっています。


[AD]

↓日本語の解説書。

ImageMagick逆引きコマンドリファレンス

著者/訳者:クーガー株式会社 石井 敦

出版社:インプレス( 2008-11-28 )

定価:

大型本 ( 308 ページ )

ISBN-10 : 4844326473

ISBN-13 : 9784844326472


↓洋書ですが、良さそうな雰囲気。

Imagemagick Tricks: Web Image Effects from the Command Line And Php

著者/訳者:Sohail Salehi

出版社:Packt Publishing( 2006-06-30 )

定価:¥ 4,200

Amazon価格:¥ 3,411

ペーパーバック ( 232 ページ )

ISBN-10 : 1904811868

ISBN-13 : 9781904811862