ruby oauth google-fusion-tables put rest-client

Fusion Tables: ¿Por qué sigo recibiendo un error de "400 solicitudes incorrectas" al intentar actualizar un estilo de tabla a través de la gema RestClient de Ruby?



oauth google-fusion-tables (6)

Estoy intentando actualizar un estilo para una de mis tablas de fusión utilizando la gema Ruby RestClient.

Aquí está mi código:

require ''rest_client'' tableId = ''<STRING CONTAINING TABLEID>'' styleId = ''<STRING CONTAINING STYLEID>'' key = ''<STRING CONTAINING MY FUSION TABLES API KEY>'' table_url = "https://www.googleapis.com/fusiontables/v1/tables/#{tableId}/styles/#{styleId}?key=#{key}" update = ''{"polygonOptions": {"strokeColor":"#ffffff"}}'' token = ''STRING CONTAINING AUTHORIZATION TOKEN'' RestClient.put table_url,update,{"Authorization" => "Bearer #{token}"}

Cuando ejecuto ese código, obtengo este error:

C:/Ruby193/lib/ruby/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/abstract_response.rb:48:in `return!'': 400 Bad Request (RestClient::BadRequest) from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/request.rb:230:in `process_result'' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/request.rb:178:in `block in transmit'' from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:745:in `start'' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/request.rb:172:in `transmit'' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/request.rb:64:in `execute'' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/request.rb:33:in `execute'' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient.rb:80:in `put''

Cuando ingreso el código de update en la solicitud oficial de estilo PUT maker thingie de Google , la actualización funciona. Pero no funciona cuando ejecuto mi código Ruby.

¿Alguien sabe lo que estoy haciendo mal?

EDITAR: Salida adicional que recibo al agregar en RestClient.log = logger

RestClient.put "https://www.googleapis.com/fusiontables/v1/tables/<MY TABLE ID HERE>/styles/4?key=<AND HERE''S WHERE MY FUSION TABLE API KEY GOES>", "{/"polygonOptions/":{/"strokeColor/":/"#ffffff/"}}", "Accept"=>"*/*; q=0.5, application/xml", "Accept-Encoding"=>"gzip, deflate", "Authorization"=>"Bearer <THIS CONTAINS THE BEARER STRING>", "Content-Length"=>"44" # => 400 BadRequest | application/json 255 bytes


Creo que el problema es que no estás configurando el tipo de contenido para application / json. Intenta hacer algo como esto:

RestClient.put(table_url, update, {"Authorization" => "Bearer #{token}", "Content-type" => "application/json"})

La carga útil en este caso debe ser json para que pueda usar su json-string de su ejemplo o ejecutar to_json en su estructura de datos.


FYI,

Alternativas para intentar:

1) Eliminar la solicitud de HTTPS en la configuración del proyecto y la regeneración de token.

2) Intenta usar SSL en ese caso.

3) Algunas veces este error ocurre cuando los valores exceden más de 255 caracteres que pueden ser la posibilidad aquí contigo. El mismo problema ocurrió en algún momento con alguien y se resolvió después de la depuración. Verifique el enlace para más información.


Podría ser porque tu hash aquí

update = ''{"polygonOptions": {"strokeColor":"#ffffff"}}''

debería ser probablemente

update = {"polygonOptions" => {"strokeColor" => "#ffffff"}}

¡Buena suerte!


En respuesta a su pregunta sobre la configuración de un registrador sin Rails, en los comentarios a la respuesta de @Jay Lee ...

Aquí hay un registrador configurado para generar salida estándar:

logger = Logger.new STDOUT logger.level = Logger::WARN # INFO/DEBUG… whatever level you find is needed logger.datetime_format = ''%a %d-%m-%Y %H%M ''

A continuación, coloque el resto de su código en una consola (por ejemplo, IRB) y antes de la última línea agregue:

RestClient.log = logger

y debería obtener algún resultado de información útil para la terminal. Consulte los documentos de la clase Logger para obtener más información sobre los niveles disponibles.


Estaba teniendo el mismo problema de 400 solicitudes incorrectas, específicamente al publicar estilos. Pude resolver el problema asegurándome de que los valores para "tipo" en el estilo fueran espacios de nombre, lo que los ejemplos en los documentos no siempre son correctos, por ejemplo:

{ ... "kind": "fusiontables#buckets" ... }

En lugar de solo "cubos".


Realmente debería usar la biblioteca google-api-ruby-client en lugar de construir sus propias llamadas REST. La biblioteca extrae muchas de las cosas de OAuth y el formato de los parámetros por usted.

Una vez dicho esto, ¿puede habilitar la depuración de su RestClient y publicar el resultado de la llamada RestClient junto con la salida de la cosa oficial de Google PUT maker (me gusta su jerga técnica allí)? Comparando los dos debe mostrar cómo difieren y qué no le gusta a Google con los suyos.