2010-08-23 29 views
9

मैं "स्थान" क्षेत्र में मेरी डेटाबेस में इस URL है,:यूआरएल स्ट्रिंग पैरामीटर प्राप्त करें?

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

मैं @object.location साथ प्राप्त कर सकते हैं, लेकिन मैं v का मूल्य कैसे मिल सकता है? मेरा मतलब है, यूआरएल स्ट्रिंग से "xxxxxxxxxxxx" प्राप्त करें?

उत्तर

21
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 से वापसी Strings इतना है कि यह एक ही पैरामीटर नाम के लिए अनेक मान संभाल कर सकते हैं Arrays के Hash है। आपके उदाहरण के लिए आप uri_params['v'][0] चाहते हैं।

भी ध्यान रखें कि HashCGI.parse द्वारा वापस लौटेगा [] यदि अनुरोध कुंजी नहीं मिला है, इसलिए uri_params['v'][0] या तो मूल्य या nil वापस आ जाएगी यदि URL एक v पैरामीटर शामिल नहीं था।

+2

यूआरआई पार्सिंग तक पहुंच प्राप्त करने के लिए आपको 'नेट/http' लोड करने की आवश्यकता नहीं है। इसके बजाए बस 'यूरी' की आवश्यकता है। –

+0

धन्यवाद @theTinMan - मैंने जवाब अपडेट किया है। – mikej

0
$ 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 
+0

यही वह है जिसे मैं सोचने की कोशिश कर रहा था। मैं यूआरआई :: HTTP में देख रहा था और पैरामीटर को पार्स करने के लिए कोई तरीका नहीं मिला। – AboutRuby

0

प्रोटोकॉल, होस्टनाम, पथ और मानकों में संपूर्ण URL को पार्स करने के लिए एक पुस्तकालय का उपयोग कर के अलावा, आप एक सरल regexp का उपयोग जानकारी निकालने के लिए कर सकता है। ध्यान दें कि regexp एक त्वरित और गंदे समाधान है, और यूआरएल के बारे में कुछ अलग होने पर यह असफल हो जाएगा, जैसे कि v पैरामीटर के बाद इसका कोई अन्य पैरामीटर है।

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

आप यूआरआई का उपयोग करके क्या किया के साथ आगे जा सकते हैं :: क्वेरी जानकारी पाने के लिए पार्स।

url = 'http://www.youtube.com/watch?v=xxxxxxxxxxxxxxxxxxx' 
video_id = CGI::parse(URI::parse(url).query)['v'] 
संबंधित मुद्दे