44 votes

Ajouter un paramètre à l'URL

J'ai une url (par exemple http://www.youtube.com/watch?v=og9B3BEnBHo) et j'aimerais lui ajouter un paramètre (wmode=opaque) afin que son :

http://www.youtube.com/watch?v=og9B3BEnBHo&wmode=opaque

Quelqu'un peut-il me dire quelle fonction utiliser pour que cela fonctionne ?

71voto

steenslag Points 29662
require 'uri'

uri =  URI.parse("http://www.youtube.com/watch?v=og9B3BEnBHo")
uri.query = [uri.query, "wmode=opaque"].compact.join('&') 
puts uri.to_s

#edit Since 1.9.2 there are methods added to the URI module

uri =  URI.parse("http://www.youtube.com/watch?v=og9B3BEnBHo")
new_query_ar = URI.decode_www_form(String(uri.query)) << ["wmode", "opaque"]
uri.query = URI.encode_www_form(new_query_ar)
puts uri.to_s

(L'appel à String garantit que cela fonctionne également dans le cas où l'URI d'origine n'a pas de chaîne de requête)

9voto

Tyler Rick Points 3033

Puisque vous pouvez avoir plusieurs paramètres de requête que vous voulez ajouter et pas seulement un, voici une version qui vous permet d'ajouter autant de paramètres que vous voulez en passant simplement dans un hachage ... Plus un hachage semble être un moyen plus naturel de passer dans params de toute façon, même si vous ajoutez seulement un paramètre.

  require 'uri'
  def add_params(url, params = {})
    uri = URI(url)
    params    = Hash[URI.decode_www_form(uri.query || '')].merge(params)
    uri.query =      URI.encode_www_form(params)
    uri.to_s
  end

Exemples :

pry(main)> helper.add_params("http://example.com", b: 2)
=> "http://example.com?b=2"

pry(main)> helper.add_params("http://example.com?a=1", b: 2, c: 3)
=> "http://example.com?a=1&b=2&c=3"

pry(main)> helper.add_params("http://www.youtube.com/watch?v=og9B3BEnBHo", wmode: 'opaque')
=> "http://www.youtube.com/watch?v=og9B3BEnBHo&wmode=opaque"

8voto

KNejad Points 2011

Une autre option est d'utiliser le GEM adressable

https://github.com/fr/sporkmonger/adressable

Une fois que vous aurez inclus l'adressable dans votre projet, il vous suffira de :

url = Addressable::URI.parse('http://www.youtube.com/watch?v=og9B3BEnBHo')
url.query_values = (url.query_values || {}).merge(wmode:"opaque")

0voto

Richard Points 81

Dans les versions récentes du module URI, vous pouvez simplement faire :

original_uri = 'http://www.youtube.com/watch?v=og9B3BEnBHo'
append_params = { 'wmode': 'opaque' }

uri = URI.parse(original_uri)
params = URI.decode_www_form(uri.query || '') + append_params.to_a
uri.query = URI.encode_www_form(params)
puts uri.to_s

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X