[ruby-list:46502] Twitterのサンプルでエラーなんですが。

View: New views
9 Messages — Rating Filter:   Alert me  

[ruby-list:46502] Twitterのサンプルでエラーなんですが。

by Toshiyasu Soejima :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

そえじま@勉強中です。

「Ruby 逆引きレシピ」という本を読んでいるのですが、Twitterのサンプルの
ところでエラーになってしまいます。

require 'rubygems'
require 'httparty'

$DEBUG=true
class Twiter
include HTTParty
base_uri = 'twitter.com'
basic_auth 'username', 'password'
end

p Twitter.post('/statuses/update.json', :query => { :status => 'Hello
World'})

#=>
Exception `NameError' at twitter_sample.rb:11 - uninitialized constant
Twitter
twitter_sample.rb:11: uninitialized constant Twitter (NameError)
>Exit code: 1

という例外が吐かれてしまいます。
何か仕様とか変更になったのでしょうか?

どなたかご教示いただけると幸いです。




[ruby-list:46503] Re: Twitterのサンプルでエラーなんですが。

by NARUSE, Yui-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

2009/11/02 11:52, T.Soejima wrote:

> そえじま@勉強中です。
>
> 「Ruby 逆引きレシピ」という本を読んでいるのですが、Twitterのサンプルの
> ところでエラーになってしまいます。
>
> require 'rubygems'
> require 'httparty'
>
> $DEBUG=true
> class Twiter
> include HTTParty
> base_uri = 'twitter.com'
> basic_auth 'username', 'password'
> end
>
> p Twitter.post('/statuses/update.json', :query =>  { :status =>  'Hello
> World'})
>
> #=>
> Exception `NameError' at twitter_sample.rb:11 - uninitialized constant
> Twitter
> twitter_sample.rb:11: uninitialized constant Twitter (NameError)
>> Exit code: 1
>
> という例外が吐かれてしまいます。
> 何か仕様とか変更になったのでしょうか?
>
> どなたかご教示いただけると幸いです。

> class Twiter

Twiter になってるのが原因ですかね。

--
NARUSE, Yui  <naruse@...>


[ruby-list:46504] Re: Twitterのサンプルでエラーなんですが。

by ムムリク :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

ムムリクと申します。

貼り付けられたコードがママだとすると、

class Twiter

が本来は Twitter なのでは? とも思ったのですが、どうでしょうか。

------


On Mon, 2 Nov 2009 11:52:50 +0900
"T.Soejima" <clev@...> wrote:

> そえじま@勉強中です。
>
> 「Ruby 逆引きレシピ」という本を読んでいるのですが、Twitterのサンプルの
> ところでエラーになってしまいます。
>
> require 'rubygems'
> require 'httparty'
>
> $DEBUG=true
> class Twiter
> include HTTParty
> base_uri = 'twitter.com'
> basic_auth 'username', 'password'
> end
>
> p Twitter.post('/statuses/update.json', :query => { :status => 'Hello
> World'})
>
> #=>
> Exception `NameError' at twitter_sample.rb:11 - uninitialized constant
> Twitter
> twitter_sample.rb:11: uninitialized constant Twitter (NameError)
> >Exit code: 1
>
> という例外が吐かれてしまいます。
> 何か仕様とか変更になったのでしょうか?
>
> どなたかご教示いただけると幸いです。
>
>
>


[ruby-list:46505] Re: Twitterのサンプルでエラーなんですが。

by SHIDARA Yoji :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

こんにちは。レシピを書いた設樂です。

以下の二ヶ所を修正してみてください。

まず、クラス名の綴りが誤っているようです。
> class Twiter

> class Twitter
(tを2つ重ねる) にしてください。

もう一点、
> base_uri = 'twitter.com'
この = を除いて、
> base_uri 'twitter.com'
としてください。
base_uri を指定するためには
base_uri メソッドを呼び出せばよいので、 = は不要です。

これで動くのではないかと思いますがいかがでしょう。

--
SHIDARA Yoji
本を書きました! http://www.amazon.co.jp/dp/4798119881


[ruby-list:46506] Re: Twitterのサンプルでエラーなんですが。

by Toshiyasu Soejima :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

NARUSE様、ムムリク様、設樂さま。

まことに申し訳ございませんでした。
完全に本の内容を空目しておりました。以降、気をつけます。

ご丁寧に教えていただきまして、有難うございます。m(__)m

SHIDARA Yoji さんは書きました:
> こんにちは。レシピを書いた設樂です。
>
>  
ほんとにすいません。m(__)m
こんな質問でお呼び出てしてまったようで恐縮です。

> もう一点、
>  
>> base_uri = 'twitter.com'
>>    
> この = を除いて、
>  
>> base_uri 'twitter.com'
>>    
> としてください。
> base_uri を指定するためには
> base_uri メソッドを呼び出せばよいので、 = は不要です。
>
> これで動くのではないかと思いますがいかがでしょう。
>
>  
このあたりがよく分かっていないのですが、
include HTTParty
としてしまえば、そのクラスのメソッドは base_uri のように
いきなり呼び出せるということなのでしょうか?

#そもそも、「モジュール」って何のためにあるのか?とか
#そういうことが分かってないんですが・・・

初心者的には、HTTParty#new はしなくてもいいのかな?と
思ってしまったりなんですが・・・







[ruby-list:46507] Re: Twitterのサンプルでエラーなんですが。

by SHIDARA Yoji :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

しだらです。

> このあたりがよく分かっていないのですが、
> include HTTParty
> としてしまえば、そのクラスのメソッドは base_uri のように
> いきなり呼び出せるということなのでしょうか?
>
> #そもそも、「モジュール」って何のためにあるのか?とか
> #そういうことが分かってないんですが・・・
>
> 初心者的には、HTTParty#new はしなくてもいいのかな?と
> 思ってしまったりなんですが・・・

include HTTParty とすることで HTTParty::ClassMethods の
base_uri メソッドや post メソッドが
Twitter クラスのクラスメソッドとして呼び出せるようになります。
ので、この場合は HTTParty をインスタンス化することなく、
Twitter.post として呼び出すことができます。
#次のページ(P.287)の上のコード例はユーザ名とパスワードの情報を伴って
#Twitter.new する例になっています。

--
SHIDARA Yoji
本を書きました! http://www.amazon.co.jp/dp/4798119881


[ruby-list:46508] Re: Twitterのサンプルでエラーなんですが。

by Toshiyasu Soejima :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

しだら様。お忙しいところを度々すいません。m(__)m

> include HTTParty とすることで HTTParty::ClassMethods の
> base_uri メソッドや post メソッドが
> Twitter クラスのクラスメソッドとして呼び出せるようになります。
> ので、この場合は HTTParty をインスタンス化することなく、
> Twitter.post として呼び出すことができます。
> #次のページ(P.287)の上のコード例はユーザ名とパスワードの情報を伴って
> #Twitter.new する例になっています。
>
>  
なるほど。
でも、またここで疑問が・・・
「じゃぁ、インスタンス化することの意味ってなんだろう?」
「継承とinclude はどう違うんだろう?」(単一継承の問題??)
などと思ってしまいましたがどうなんでしょう?

ご教示いただけると幸いです。m(__)m

#今日は60行書くのに4時間かかりました。
#なので、センス無いってのは痛感しております。








[ruby-list:46509] Re: Twitterのサンプルでエラーなんですが。

by SHIDARA Yoji :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

しだらです。

> なるほど。
> でも、またここで疑問が・・・
> 「じゃぁ、インスタンス化することの意味ってなんだろう?」

ユーザ名やパスワードの情報を保持したtwitterクライアントオブジェクトを
インスタンス化しておくと、
以降は呼び出し側からユーザ名やパスワードを渡すことなく、
本来行いたい処理だけを記述できるようになるという利点があるかと思います。


> 「継承とinclude はどう違うんだろう?」(単一継承の問題??)
> などと思ってしまいましたがどうなんでしょう?

この場合のようにHTTPartyをincludeするという書き方であれば、
HTTPartyを導入しようとしているクラス(この場合ではTwitterクラス)の側に
継承関係がすでにある場合でも、
それを変更せずに後からHTTPartyの機能を導入することができます。

一方、「RESTfulなWebクライアント」を継承してTwitterクライアントを作る、
という考え方ももちろんありうると思います。
たとえば ActiveResource というライブラリでは
ActiveResource::Base を継承してクライアントを書きます。

--
SHIDARA Yoji
本を書きました! http://www.amazon.co.jp/dp/4798119881


[ruby-list:46511] Re: Twitterのサンプルでエラーなんですが。

by Toshiyasu Soejima :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

しだら様。

そえじまです。
返信が遅くなりまして、申し訳ありません。


> ユーザ名やパスワードの情報を保持したtwitterクライアントオブジェクトを
> インスタンス化しておくと、
> 以降は呼び出し側からユーザ名やパスワードを渡すことなく、
> 本来行いたい処理だけを記述できるようになるという利点があるかと思います。
>
>  
なるほど。
では、クラスにするかどうか迷ったときには、そういうリテラルみたい
なものを保持するかどうかで判断するというのが常套手段なんでしょうか。

> 一方、「RESTfulなWebクライアント」を継承してTwitterクライアントを作る、
> という考え方ももちろんありうると思います。
> たとえば ActiveResource というライブラリでは
> ActiveResource::Base を継承してクライアントを書きます。
>
>  
いろんなやり方があるんですね。
うーん・・・素人には使い分けが難しいです。orz

ご丁寧にご教授いただき、ありがとうございます。
多謝。