Я использую таблицу обратного геокода yql для ruby и googles, чтобы идеально автоматизировать некоторые поисковые запросы, которые у меня есть. Проблема, с которой я столкнулся, - это преобразование запроса в легальный формат URL. Проблема в том, что кодировка, которую я использую, возвращает недопустимые URL. Запрос, который я выполняю, выглядит следующим образом
query="select * from google.geocoding where q='40.714224,-73.961452'" pQuery= CGI::escape(query)
Возможный вывод для обработанного запроса выглядит следующим образом
http://query.yahooapis.com/v1/public/yql?q=select+%2A+from+google.geocoding+where+q%3D%2740.3714224%2C--73.961452%27+format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=
Увы, адрес незаконен. При проверке того, как должен выглядеть запрос в консоли YQL, я получаю следующее
http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20google.geocoding%20where%20q%3D%2240.714224%2C-73.961452%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=
Как вы можете надеяться, вы видите :), кодировка неправильная. Мне было интересно, кто-нибудь знает, как я могу генерировать правильные URL.
Если вы хотите экранировать URI, вы должны использовать URI::escape:
URI::escape
require 'uri' URI.escape("select * from google.geocoding where q='40.714224,-73.961452'") # => "select%20*%20from%20google.geocoding%20where%20q='40.714224,-73.961452'"