Получить параметры строки URL? - PullRequest
9 голосов
/ 24 августа 2010

У меня есть этот URL в моей базе данных, в поле "location":

http://www.youtube.com/watch?v=xxxxxxxxxxxxxxxxxxx

Я могу получить его с помощью @object.location, но как я могу получить значение v?Я имею в виду, получить "xxxxxxxxxxxx" из строки URL?

Ответы [ 3 ]

21 голосов
/ 24 августа 2010
require 'uri'
require 'cgi'

# use URI.parse to parse the URL into its constituent parts - host, port, query string..
uri = URI.parse(@object.location)
# then use CGI.parse to parse the query string into a hash of names and values
uri_params = CGI.parse(uri.query)

uri_params['v'] # => ["xxxxxxxxxxxxxxxxxxx"]

Обратите внимание, что возвращаемое значение от CGI.parse равно Hash от Strings до Arrays, поэтому он может обрабатывать несколько значений для одного и того же имени параметра. Для вашего примера вы хотели бы uri_params['v'][0].

Также обратите внимание, что Hash, возвращаемый CGI.parse, вернет [], если запрошенный ключ не найден, поэтому uri_params['v'][0] вернет либо значение, либо nil, если URL не содержит v параметр.

0 голосов
/ 24 августа 2010

Помимо использования библиотеки для анализа всего URL в протоколе, имени хоста, пути и параметрах, вы можете использовать простое регулярное выражение для извлечения информации. Обратите внимание, что регулярное выражение является быстрым и грязным решением, и оно потерпит неудачу, если в URL-адресе вообще что-то будет, например, если у него есть другой параметр после параметра v.

url = 'http://www.youtube.com/watch?v=xxxxxxxxxxxxxxxxxxx'
video_id = url.match(/\?v=(.+)$/)[1]

Вы можете пойти дальше с тем, что вы сделали, используя URI :: parse для получения информации о запросе.

url = 'http://www.youtube.com/watch?v=xxxxxxxxxxxxxxxxxxx'
video_id = CGI::parse(URI::parse(url).query)['v']
0 голосов
/ 24 августа 2010
$ irb

irb(main):001:0> require 'cgi' => true
irb(main):002:0> test = CGI::parse('v=xxxxxxxxxxxxxxxxxxx') => {"v"=>["xxxxxxxxxxxxxxxxxxx"]}
irb(main):003:0> puts test['v']
xxxxxxxxxxxxxxxxxxx
=> nil
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...