A Day in the Life

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) で書くと楽だろうな。標準添付ライブラリでたいがいできちゃうのがうれしい。

記事の一覧 >