403 Forbidden con la gema Roo

Hola,

a ver si a alguien se le ocurre la (seguramente obvia) explicación a la
diferencia de resultado entre estos dos escenarios, intentando utilizar
la
gema Roo para recuperar una hoja de cálculo de Google Docs. En el
escenario
a (irb) funciona perfectamente. En el b (script/tests) net/http se
estrella
contra un 403

a)

sundaydriver:~/Code/golden_retriever mort$ irb
irb(main):001:0> require ‘roo’
default formats are encoded in ISO-8859-1
=> true
irb(main):002:0> SPREADSHEET_KEY = ‘p38-cEwIpu6U_IBItnhfZEg’
=> “p38-cEwIpu6U_IBItnhfZEg”
irb(main):003:0> Google.new(SPREADSHEET_KEY)
=> #<Google:0x272d588 @password=nil, @first_column={}, @cell={},
@filename=“p38-cEwIpu6U_IBItnhfZEg”, @header_line=1,
@default_sheet=“Sheet1”, @user=nil, @last_row={}, @cells_read={},
@formula={}, @spreadsheetkey=“p38-cEwIpu6U_IBItnhfZEg”, @first_row={},
@gs=#<GData::Spreadsheet:0x272d470 @source=“gdata-ruby”,
@service=“wise”,
@headers={“Authorization”=>“GoogleLogin
auth=DQAAAIsAAADxmVew0ZsLOgu8EaFK8yrWXXJhvpQuktS_kpjAR8aLKIJJz-yGjy4fBbdLWq7Uoc1p5yHdT0ZEgL3Fg3XDwTTsXoSBtI7cDg2bxGSeSzLw_CtItfHD0HRUrjZK3eb7n–dIamdIJTowBFd17ISSxcsiCowjM9Sc9qEUPzloZemTW31IOOCiZQ7g8TKIsKtgcY\n”,
“Content-Type”=>“application/atom+xml”},
@spreadsheet_id=“p38-cEwIpu6U_IBItnhfZEg”,
@url=“spreadsheets.google.com”>,
@last_column={}, @cell_type={}>

b)

SPREADSHEET_KEY = ‘p38-cEwIpu6U_IBItnhfZEg’

def test_should_get_spreadsheet
assert_nothing_raised do
Google.new(SPREADSHEET_KEY)
end
end

  1. Failure:
    test_should_get_spreadsheet(GoldenRetrieverTest) [retriever.rb:91]:
    Exception raised:
    Class: Net::HTTPServerException
    Message: <“403 "Forbidden"”>
    —Backtrace—
    /usr/local/lib/ruby/1.8/net/http.rb:2106:in error!' /usr/local/lib/ruby/gems/1.8/gems/GData-0.0.4/lib/gdata/base.rb:40:in authenticate’
    /usr/local/lib/ruby/gems/1.8/gems/roo-1.2.0/lib/roo/google.rb:102:in
    initialize' retriever.rb:92:in new’
    retriever.rb:92:in test_should_get_spreadsheet' retriever.rb:91:in test_should_get_spreadsheet’

Si ejecuto que lo tú en irb me da un 403, con lo cual lo mas probable es
que
la Key no sea correcta.

El 9 de noviembre de 2008 22:42, Damian J.
[email protected]escribió:

2008/11/9 Manuel González Noriega [email protected]

Hola,

a ver si a alguien se le ocurre la (seguramente obvia) explicación a la
diferencia de resultado entre estos dos escenarios, intentando utilizar la
gema Roo para recuperar una hoja de cálculo de Google Docs. En el escenario
a (irb) funciona perfectamente. En el b (script/tests) net/http se estrella
contra un 403

Solucionado y, como era previsible, un error mío que descubrí al mismo
tiempo que me lo señalaba Xavi Noria. En algún momento de la tarde
había
definido dos variables de entorno (GOOGLE_MAIL y GOOGLE_PASSWORD) que
hacían
funcionar la sesión irb. Después conseguí olvidar haberlas definido.

Ahora me queda ver porqué estas dos variables tienen que estar
definidas, ya
que la hoja en teoría no necesita autenticación para lectura, pero eso
ya es
problema de mirar la documentación

Muchas gracias

On Sun, Nov 9, 2008 at 7:07 PM, Manuel González Noriega
[email protected] wrote:

SPREADSHEET_KEY = ‘p38-cEwIpu6U_IBItnhfZEg’

def test_should_get_spreadsheet
assert_nothing_raised do
Google.new(SPREADSHEET_KEY)
end
end

¿Y qué pasa si definís la constante dentro del test, o si le pasás el
String directamente a Google.new?

(PD: por otro lado, no creo que el test que estás escribiendo sea una
buena idea. Por un lado, estás testeando la librería misma; por el
otro… le estás pegando a Internet en un test!)

2008/11/9 Damian J. [email protected]

¿Y qué pasa si definís la constante dentro del test, o si le pasás el
String directamente a Google.new?

Solved. Gracias, Damian.

(PD: por otro lado, no creo que el test que estás escribiendo sea una
buena idea. Por un lado, estás testeando la librería misma; por el
otro… le estás pegando a Internet en un test!)

Totalmente de acuerdo. El test es simplemente a modo de debug, y también
me
ha servido para compartir con vosotros el problema. En realidad, la gema
está mockeada con Flex Mock (http://flexmock.rubyforge.org/)