RubyGems.org に gem を登録する

最近,気が向いたら はてなダイアラーの fladdict-rate - Life like a clown のように何か調べてるとき作った関数やらクラスをぽつぽつ https://github.com/clown/socialdata に追加していってるのですが,この辺でせっかくなので gem を作って登録しておこうかと言う気になりました.gem の登録は github 上でできるのかと思っていたらいつの間にか RubyGems.org に登録すると言う形に変わっていました.

gem の作成,登録の仕方は 未経験で初めてgemを作ってみたので晒してみる - (゚∀゚)o彡 sasata299's blog を参考にしました.RubyGems.org でアカウントを作成した後,Edit Profile ボタンを押すとそこに API key が表示されているので,その API key を ~/.gem/credentials に書いておくと gem push 時に E-mail/Password を聞かれないようです.

まだ,リファレンスサイトを作ってないのでここを簡易リファレンスページにしておきます(簡易と言うレベルでもないですが・・・).取りあえず,最初のバージョンではいくつかのカウント情報(ブクマ数など)を取得する関数群のみです.

Install

$ gem install crown

rubygems がインストールされていない場合は,RubyGems のインストール 辺りを参考にしてインストールして下さい.

SBM count functions

Crown::Hatena::Bookmark.count(uri, options = nil)
Crown::Delicious.count(uri, options = nil)
Crown::Livedoor::Clip.count(uri, options = nil)
Crown::Buzzurl.count(uri, options = nil)
Crown::Yahoo::Bookmark.count(uri, options = nil)

各種 SBM サービスの module に定義されてある count メソッドに調べたい URL を指定すると,その URL に対する各種 SBM サービスの被ブックマーク数を返します.途中で何らかのエラー発生するなどして,カウント値の取得に失敗した場合は -1 を返します.以下にサンプルプログラムを記述します.

#!/usr/bin/ruby -Ku
require 'rubygems'
require 'crown'

ARGV.each { |uri|
    printf("%s\n", uri)
    printf(" + hatena    : %6d\n", Crown::Hatena::Bookmark.count(uri))
    printf(" + livedoor  : %6d\n", Crown::Livedoor::Clip.count(uri))
    printf(" + delicious : %6d\n", Crown::Delicious.count(uri))
    printf(" + buzzurl   : %6d\n", Crown::Buzzurl.count(uri))
    printf(" + yahoo     : %6d\n", Crown::Yahoo::Bookmark.count(uri))
}

Twitter count function (ユーザ関連)

Crown::Twitter::User.count(screen_name, options = nil)

Response = Struct.new(:status, :favorite, :friend, :follower, :list)
Crown::Twitter::User.summary(screen_name, options = nil)

count メソッドにユーザ名 (screen_name) を指定すると,そのユーザ名がこれまでにツイートした数を返します.また,summary メソッドは指定されたユーザに関する各種カウントを返します.返される構造体には,status (呟き数),favorite (お気に入り数),friend (フォローしている数),follower (フォローされている数),list (リストに登録されている数) が存在します.以下にサンプルプログラムを記述します.

#!/usr/bin/ruby -Ku
require 'rubygems'
require 'crown'

ARGV.each { |screen_name|
    summary = Crown::Twitter::User.summary(screen_name)
    printf("%s\n", screen_name)
    printf(" + status   : %8d\n", summary.status)
    printf(" + friend   : %8d\n", summary.friend)
    printf(" + follower : %8d\n", summary.follower)
    printf(" + favorite : %8d\n", summary.favorite)
    printf(" + list     : %8d\n", summary.list)
}

Twitter count function (URL 関連)

Crown::Twitter::URI.count(uri, options = nil)
Crown::Topsy.count(uri, options = nil)
Crown::TweetMeme.count(uri, options = nil)
Crown::BackType.count(uri, options = nil)

各種 Tweet 検索サービス用 module に定義されてある count 関数に調べたい URL を指定すると,その URL を含む呟きの数が返されます.尚,BackType (BackTweets) については,options に API key を設定して引数に指定する必要があります.また,BackTypehttp://d.hatena.ne.jp/ のようにルートに当たる URL を指定すると,その URL だけではなく http://d.hatena.ne.jp/tt_clown/ などの URL に対しての Tweet 数も合算した値を返すようです.以下にサンプルプログラムを記述します.

#!/usr/bin/ruby -Ku
require 'rubygems'
require 'crown'

ARGV.each { |uri|
    printf("%s\n", uri)
    printf(" + topsy     : %8d\n", Crown::Topsy.count(uri))
    printf(" + tweetmeme : %8d\n", Crown::TweetMeme.count(uri))
    printf(" + backtype  : %8d\n", Crown::BackType.count(uri, { :api_key => "your_api_key" })) # API key を取得して設定する
}

Facebook count function

Crown::Facebook.count(uri, options = nil)

Response = Struct.new(:like, :total, :share, :click)
Crown::Facebook.summary(uri, options = nil)

count メソッドに URL を指定すると,その URL に対する「いいね!」と「シェア」の合計値を返します.また,summary メソッドは指定された URL に対する Facebook での各種カウントを返します.尚,この中で Facebook の「いいね!」ボタンで表示されている値に当たるのは現状だと total のようです.以下にサンプルプログラムを記述します.

#!/usr/bin/ruby -Ku
require 'rubygems'
require 'crown'

ARGV.each { |uri|
    summary = Crown::Facebook.summary(uri)
    printf("%s\n", uri)
    printf(" + like  : %8d\n", summary.like)
    printf(" + total : %8d\n", summary.total)
    printf(" + share : %8d\n", summary.share)
    printf(" + click : %8d\n", summary.click)
}

気が向いたら,またぽつぽつ何か書いていきます.

CGM.proxy

Crown::CGM.proxy(service)

上記で紹介した各種クラスのオブジェクトを指定されたシンボルを元に生成・取得するためのメソッドです.指定できるシンボルは以下の通りです.

シンボル サービス名 備考
:twitter_user Twitter ユーザ情報
:twitter_uri Twitter URL に対するツイート情報
:topsy Topsy -
:tweetmeme TweetMeme -
:backtype BackTweets API key
:facebook Facebook -
:hatena_bookmark はてなブックマーク -
:livedoor_clip livedoor クリップ -
:livedoor_reader livedoor Reader フィードの URL を指定
:delicious Delicious -
:buzzurl Buzzurl -
:yahoo_bookmark Yahoo! ブックマーク -

以下にサンプルプログラムを記述します.

require 'rubygems'
require 'crown'

services = [
#   :twitter_user,      # Twitter (ユーザ名を指定)
    :twitter_uri,       # Twitter
    :topsy,             # Topsy
    :tweetmeme,         # TweetMeme
#   :backtype,          # BackTweets (要 API key)
    :facebook,          # Facebook
    :hatena_bookmark,   # はてなブックマーク
    :livedoor_clip,     # Livedoor クリップ
#   :livedoor_reader,   # Livedoor Reader (フィードの URL を指定)
    :delicious,         # Delicious
    :buzzurl,           # Buzzurl
    :yahoo_bookmark,    # Yahoo! ブックマーク
]

ARGV.each { |uri|
    printf("%s\n", uri)
    services.each { |service|
        printf(" + %-20s : %6d\n", service, Crown::CGM.proxy(service).count(uri))
    }
}