2006-04-24
広報活動
LDR の裏技が読めるのは d:keyword:livedoor Reader だけ!
LDR
'hceT'.sub(/\Z/,'bus').reverse
'hceT'.sub(/\Z/,'bus').reverse
追加 | 54 users
ちょ、ここ LDR に 54 も登録されてるんだけど偏りすぎwww
あー *t* 記法で書いてないから
RSS の更新時間が 00:00 になってるのかぁ>ξ;゜�゜)ξ
sandwich
メソッド名ナツカシスww
でも def でのメソッド定義にはかっこつけようよ!
def sandwich ingredient, bread
わかりにくい><
Hatena::API::Auth
ruby 版作った、けど rubyforge の申請がまだとおんねぇー。実家鯖も落ちててサンプルおけねー。
追記
http://rubyforge.org/projects/hatenaapiauth/
gem install hatenaapiauth
で。
とりあえずソース。
require 'open-uri'
require 'uri'
begin
require 'md5'
rescue LoadError
end
begin
require 'json'
rescue LoadError
require 'rubygems'
require 'json'
end
module Hatena
module API
class AuthError < RuntimeError;end
class Auth
BASE_URI = 'http://auth.hatena.ne.jp/'
PATH = {
:auth => '/auth',
:json => '/api/auth.json'
}.freeze
VERION = '0.1.0'
attr_accessor :api_key, :secret
def initialize(options = {})
@api_key = options[:api_key]
@secret = options[:secret]
end
def uri_to_login
uri = URI.parse BASE_URI
uri.path = PATH[:auth]
uri.query = query_with_api_sig
uri
end
def login(cert)
result = JSON.parse open(
uri_to_authcheck(cert),
'User-Agent' => "#{self.class}/#{VERION} - Ruby"
).read
if result['has_error']
raise AuthError.new(result['error']['message'])
else
result['user']
end
end
private
def api_sig(hash)
Digest::MD5.hexdigest(@secret + hash.to_a.map.sort_by {|i| i.first.to_s}.join)
end
def uri_to_authcheck(cert)
uri = URI.parse BASE_URI
uri.path = PATH[:json]
uri.query = query_with_api_sig(:cert => cert)
uri
end
def query_with_api_sig(request = {})
query = request.update(:api_key => @api_key)
query[:api_sig] = api_sig(query)
query.map {|i| i.join '=' }.join('&')
end
end
end
end
yapi.rb
http://d.hatena.ne.jp/babie/20060424/p5
んー、俺なら url の組み立ては
query = {
:key => ARGV.shift,
:max => ARGV.shift || 5,
:appid => Y_APPID,
}
url = URI.parse Y_BASE_URL
url.query = query.map {|i| i.join '=' }.join('&')
と書くなぁ。URI は URI, URI.parse URI.new どれでも一緒(だったような)だけどパースしてます的なのを見せるため URI.parse で。
まー tokuhirom が云うように Ruby (or other) で書くと楽だろうな。標準添付ライブラリでたいがいできちゃうのがうれしい。