retweetボタン設置

2009/09/16

当サイトの全資料にretweetボタンを設置しました。

Twitterにログインしている状態でこのボタンをクリックすれば以下のようなretweetメッセージが自動的に生成されて自分のつぶやきに挿入され、あとはTwitterの「投稿」ボタンを押せば投稿されます。

RT @l_w_i <資料タイトル> <資料URL>

(*) @l_w_iは当サイトの公式Twitterアカウント

(*) 資料タイトルはTwitterメッセージの最長140文字に収まるように100文字に切り詰める

(*) 資料URLは短縮URL生成サービスhttp://bit.ly/のAPIを利用した"http://bit.ly/xxxxx"形式の短縮URL

以下に今回の作業内容を記します。

準備

短縮URL生成にhttp://bit.ly/を使用するにあたって事前にユーザ登録を行い、APIキーを取得する。

retweet用URL生成メソッド実装

bit.lyのAPIには以下のようなコマンドがあり、このうち短縮URL生成の/shortenを使用する。

/shorten

短縮URL生成

/expand

短縮URLからオリジナルURL復元

/info

指定短縮URLに関する情報(オリジナルURLやページタイトル、サムネール画像等)取得

/stats

指定短縮URLの被リンク情報(クリック回数、リンク元ページ等)取得

/errors

APIのエラーコード一覧取得

/shortenコマンドのパラメータは以下のとおり。

version

APIのバージョン(2009/9/16現在2.0.1のみ)

format

データ取得フォーマット(jsonまたはxml、デフォルトはjson)

longUrl

変換元URL

login

bit.lyユーザID

apiKey

APIキー(http://bit.ly/account/にて随時参照可能)

API発行例)

http://api.bit.ly/shorten?version=2.0.1&format=xml&longUrl=<URL>&login=<UID>&apiKey=<KEY>

その他のオプションについてはAPIドキュメントを参照のこと。

実際の実装は以下のようになる。言語はRubyを使用する。ここではデータフォーマットとしてXMLを使用しているが、JSON使用時の変更点も併せて載せておく。尚、Proxy対応や例外処理は割愛する。

モジュール読み込み
require "rexml/document"
include REXML

#(JSONの場合)
#require "json"
retweet用URL生成(引数は資料タイトルと資料URL)
def get_retweet_url(title, url)
  #
  # 初期化(固定)
  #
  url_head  = "http://twitter.com/home?status="         # URLヘッダ
  title_len = 100                                       # タイトル切り詰め文字数

  host      = "api.bit.ly"                              # bit.lyホスト
  api_ver   = "2.0.1"                                   # bit.ly APIバージョン
  format    = "xml"                                     # データ取得フォーマット
							# (JSONの場合はjson)

  #
  # 初期化(サイト固有)
  #
  reply     = "xxxxx"                                   # Replyユーザ

  uid       = "yyyyy"                                   # bit.ly UID
  api_key   = "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"      # bit.ly APIキー

  #
  # タイトル切り詰め
  #
  title = title[0..title_len]

  #
  # URL短縮化
  #
  query = "/shorten?version=#{api_ver}&format=#{format}&longUrl=#{url}&login=#{uid}&apiKey=#{api_key}"

  data = nil

  Net::HTTP.start(host) {|http|
    doc = http.get(query)               # bit.ly API使用
    data = doc.body                     # データ取得
  }

  result = REXML::Document.new(data)    # データ解析   

#  (JSONの場合)
#  result = JSON.parse(data)            # データ解析

  short_url = result.elements["bitly/results/nodeKeyVal/shortUrl"].get_text
					# 短縮URL取得
#  (JSONの場合)
#  short_url = nil
#  result['results'].each_pair {|long_url, value|
#    short_url = value['shortUrl']      # 短縮URL取得
#  }

  #
  # retweet用URL生成
  #
  retweet_url = "#{url_head}RT @#{reply} #{title} #{short_url}"

  return retweet_url
end

上記のメソッドを当サイトのWikiエンジンから呼び出すことによって全資料にretweetボタンを設置する。

retweet_url = get_retweet_url(title, url)

retweet_tag = "<a href=\"#{retweet_url}\"><img src='<retweetアイコン画像>' alt='retweet' /> </a>"

関連記事

Twitterのつぶやき中のハッシュタグを検知する ... 2009/6/12
Twitterのつぶやき取得方法変更(RSS→JSON) ... 2008/11/29
Twitterのつぶやきをトップページに表示 ... 2008/9/4