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>"