最新記事一覧
XML解析する前の段階(通常は取得)でエラーが発生しているようです。パイプ管理で確認してください。
(3)
RAILS PRESS » Ruby on Rails + Mac OSXでWebアプリ開発!
On the Rails Ruby on Rails の英語情報を日本語で紹介など
インデックス
最新記事一覧
| 発行日時 |
パイプ名 |
見出し |
|
2008-12-27 15:04
|
RAILS PRESS » Ruby on Rails + Mac OSXでWebアプリ開発!
|
ruby-oauth で Yahoo! OAuth を使う方法
ruby-oauth で Yahoo! OAuth を使おうとしてだいぶはまったので、対応方法をメモ。
まずは oauth_parameter のうち、値が空のものは送らないようにしないと行けないようです。これは Yahoo! 側の問題かな?この問題を解決するには、OAuth::Client::Helper をオーバーライドします。
LANG : RUBY
-
# Yahoo! Hacks (for OAuth2.1)
-
class OAuth::Client::Helper
-
def oauth_parameters
-
{ 'oauth_consumer_key' => options[:consumer].key,
-
'oauth_token' => options[:token] ? options[:token].token : '',
-
'oauth_signature_method' => options[:signature_method],
-
'oauth_session_handle' => options[:oauth_session_handle] ? options[:oauth_session_handle] : '',
-
'oauth_timestamp' => timestamp,
-
'oauth_nonce' => nonce,
-
'oauth_version' => '1.0' }.reject { |k,v| v == "" }
-
end
-
end
次に、Yahoo! OAuth では1時間ごとに token を再発行したり、その際に session_handle を使ったりするので、ruby-oauth の OAuth::AccessToken と OAuth::RequestToken をこれらの属性に対応させる必要があります。
今はとりあえず Yahoo 用に AccessToken と RequestToken クラスを用意してやってます。多分そのうち ruby-oauth 側が対応するはずなので、それまではこれで。
LANG : RUBY
-
class OAuth::AccessToken::Yahoo <OAuth::AccessToken
-
attr_accessor :session_handle, :expires_in, :authorization_expires_in
-
def initialize(consumer, token, secret, options = {})
-
super(consumer, token, secret)
-
@session_handle = options[:session_handle]
-
@expires_in = options[:expires_in]
-
@authorization_expires_in = options[:authorization_expires_in]
-
end
-
end
-
-
class OAuth::RequestToken::Yahoo <OAuth::RequestToken
-
def get_access_token(options={})
-
response = consumer.token_request(consumer.http_method, consumer.access_token_path, self, options)
-
access_token = OAuth::AccessToken::Yahoo.new(
-
consumer,
-
response[:oauth_token],
-
response[:oauth_token_secret],
-
{ :session_handle => response[:oauth_session_handle],
-
:expires_in => response[:oauth_expires_in],
-
:authorization_expires_in => response[:oauth_authorization_expires_in] } )
-
end
-
end
あとはtoken の長さが 255 文字を超える(常に670文字?)のと、:session_handle, :expires_in, :authorization_expires_in の3つの属性が追加されるので、DB にそれらを反映させるのを忘れずに。
|
|
2008-12-23 16:09
|
RAILS PRESS » Ruby on Rails + Mac OSXでWebアプリ開発!
|
iKnow! gem 0.2.2
version 0.4.0 - version 0.1.1 までの更新履歴はこちら。
iKnow! gem version 0.1.1 - 京の路
iKnow! gem version up - OAuth & Basic認証 - 京の路
version 0.2.2 となり、ようやくこちらのブログでも発表できるレベルになりました。version 0.2.2 では、OAuth / Basic 認証のサポート、すべての要認証 API Call のサポートが追加されています。
OAuth / Basic 認証は同じインタフェースで使えます。Iknow::Auth に username と password を指定すれば Basic 認証、token と secret を指定すれば OAuth を使います。
LANG : RUBY
-
iknow_auth = case auth_mode
-
when :oauth
-
Iknow::Auth.new(
-
:token => OAUTH_ACCESS_TOKEN,
-
:secret => OAUTH_ACCESS_TOKEN_SECRET
-
)
-
when :basic_auth
-
Iknow::Auth.new(
-
:username => IKNOW_USERNAME,
-
:password => IKNOW_PASSWORD
-
)
-
end
あとは、要認証 API Call の第一引数に Iknow::Auth のインスタンスを渡してください。(※ 12月23日現在、OAuth の DELETE 系 Call がエラーになりますが、これは iKnow! API 側の問題です)
LANG : RUBY
-
## List API
-
puts "# List API"
-
@list = Iknow::List.create(
-
iknow_auth,
-
:title => 'iKnow! gem test',
-
:description => 'A list for iKnow! gem test'
-
)
-
@list.add_item(iknow_auth, Iknow::Item.find(437525))
-
@list.delete_item(iknow_auth, @list.items.first)
-
@list.delete(iknow_auth)
-
-
## Item API
-
puts "# Item API"
-
@item = Iknow::Item.create(
-
iknow_auth,
-
:cue => {
-
:text => 'hello world!',
-
:language => 'en',
-
:part_of_speech => 'E'
-
},
-
:response => {
-
:text => 'ハローワールド!',
-
:language => 'ja'
-
}
-
)
-
@item.add_image(
-
iknow_auth,
-
'http://farm4.static.flickr.com/3276/3102381796_a33c1ffdf1.jpg'
-
)
-
@item.add_sound(
-
iknow_auth,
-
'http://matake.jp/download/hello_world.mp3'
-
)
-
@item.add_tags(iknow_auth, 'sample', 'programming')
-
-
## Sentence API
-
puts "# Sentence API"
-
@sentence = Iknow::Sentence.create(
-
iknow_auth,
-
:text => 'Hello World!',
-
:item => Iknow::Item.matching('hello world').first
-
)
-
@sentence.add_image(
-
iknow_auth,
-
'http://farm4.static.flickr.com/3276/3102381796_a33c1ffdf1.jpg'
-
)
-
@sentence.add_sound(
-
iknow_auth,
-
'http://matake.jp/download/hello_world.mp3'
-
)
インストールは以下のコマンドで。
|
|
2008-11-29 2:51
|
RAILS PRESS » Ruby on Rails + Mac OSXでWebアプリ開発!
|
iKnow! gem をアップデートしました version 0.0.4
新規 Call の反映と、各 Call で追加された Attributes の反映が主な変更点です。Item creation API は Basic 認証で実装してしまおうかと思ってます。いつやるかは未定(アセアセ
相変わらずドキュメントはサンプルコードですが、List / Item / Sentence の find や、User#study.total_summary などが新しく追加されています。また :include_sentences と :include_items は新しく追加されたパラメータです。
LANG : RUBY
-
## User API
-
@user = Iknow::User.find('kirk')
-
@user.items(:include_sentences => true)
-
@user.lists
-
@user.friends
-
@user.study.results
-
@user.study.total_summary
-
@matched_users = Iknow::User.matching('matake')
-
-
## List API
-
@recent_lists = Iknow::List.recent
-
@list = Iknow::List.find(31509, :include_sentences => true, :include_items => true)
-
@list.items
-
@list.sentences
-
@matched_lists = Iknow::List.matching("イタリア語であいさつ")
-
-
# puts Iknow::List.find(31509, :include_sentences => true, :include_items => true).inspect
-
-
## Item API
-
@recent_items = Iknow::Item.recent(:include_sentences => true)
-
@item = Iknow::Item.find(437525)
-
@matched_items = Iknow::Item.matching('record', :include_sentences => true)
-
@items = Iknow::Item.extract("sometimes, often, electrical")
-
@items.first.sentences
-
-
## Sentence API
-
@recent_sentences = Iknow::Sentence.recent
-
@sentence = Iknow::Sentence.find(312271)
-
@matched_sentences = Iknow::Sentence.matching('record')
ps.
毎回 gem をいじってると細かいバグとか、微妙に使いづらい点とかに気がつくので、そういった点は API 自体の方にまた反映させていきます。「特定の Call でしか使えないオプションとかすごい分かりづらいので、なるべく全部の Call で使えるものはそうしたい」とか、そういうの。
|
|
2008-11-26 13:48
|
RAILS PRESS » Ruby on Rails + Mac OSXでWebアプリ開発!
|
iKnow! の OpenID で XRI をサポート & ruby-openid を日本語 XRI 対応に
昨日 OpenID Foundation Japan で NRI の崎村さんに「iKnow! の OpenID は XRI をサポートしてないですね」ってなことを言われたらしいので、iKnow! の OpenID を XRI に対応させました。
OpenID Authentication Plugin の XRI 対応は RailsのOpenID Authentication PluginをXRI対応にする方法 に書きましたが、OpenID::Yadis::XRI.identifier_scheme というメソッドが既にあったので、今回はそれを使いました。
LANG : RUBY
-
module OpenIdAuthentication
-
# XRI support
-
def self.normalize_url_with_xri(identifier)
-
case OpenID::Yadis::XRI.identifier_scheme(identifier)
-
when :xri : identifier
-
when :uri : normalize_url_without_xri(identifier)
-
end
-
end
-
class <<self
-
alias_method :normalize_url_without_xri, :normalize_url
-
alias_method :normalize_url, :normalize_url_with_xri
-
end
-
end
で、久しぶりに @freexri に行ってみたら、「=名前*nov」とかとれるようになってました。いつのまにか XRI って日本語も使えるようになってるんですね。日本語 XRI は微妙だけど、一応対応しておきました。
ruby-openid が日本語 XRI に対応してなかったので、OpenID::Yadis::XRI.escape_for_iri_with_multibyte をちょっと変更する必要があります。
LANG : RUBY
-
module OpenID::Yadis::XRI
-
def self.escape_for_iri_with_multibyte(xri)
-
esc = escape_for_iri_without_multibyte(xri)
-
esc.gsub!(/([\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3})/e) { |char_match|
-
CGI::escape(char_match)
-
}
-
return esc
-
end
-
class <<self
-
alias_method :escape_for_iri_without_multibyte, :escape_for_iri
-
alias_method :escape_for_iri, :escape_for_iri_with_multibyte
-
end
-
end
これで OK なはずですが...
そもそも「=名前*nov」の Yadis が動いてないみたい...意味ねー(涙
...「@id*またけ」はちゃんと動いてるから、まぁ良しとしよう。
fuckin @freexri !!
ps.
ruby-openid は XRI のエラー処理が不十分なので、以下のパッチも当てておくと良いかと思います。
LANG : RUBY
-
module OpenID
-
# XRI Error handling
-
def self.discover_xri_with_error_handling(xri)
-
discover_xri_without_error_handling(xri)
-
rescue OpenID::Yadis::XRI::XRIHTTPError => e
-
raise DiscoveryFailure.new("XRI is not valid: #{e.message}", nil)
-
end
-
class <<self
-
alias_method :discover_xri_without_error_handling, :discover_xri
-
alias_method :discover_xri, :discover_xri_with_error_handling
-
end
-
end
|
|
2008-11-14 10:25
|
RAILS PRESS » Ruby on Rails + Mac OSXでWebアプリ開発!
|
iKnow! Developers Conference が終了しました
iKnow! API の今後の方向性や、ライトニングトーク、ユーザのみなさまからのご要望など、非常に有意義なイベントになって良かったです。
飲み会も盛り上がってよかった!
僕のライトニングトークの時のプレゼン資料はこちらです。
280 slides っていう Keynote 風のサービスを使って作りました。280 slides が日本語使えない(コピーペーストすれば使える)ので、基本英語で簡単な資料ですが、よかったらどうぞ。
しかし、通訳するにはあと3ヶ月くらいは英語勉強せんといかんな。特に日本語 => 英語をリアルタイムで訳すのはきっつい。
|
|
Amazon
|