passing parameter

Discussion in 'Ruby' started by Arun Kumar, Mar 26, 2009.

  1. Arun Kumar

    Arun Kumar Guest

    Hi,
    This is my code strip

    contents.each do |content|
    #scanning the content using regexp to fetch the url
    url = content.scan(/(http:\/\/.*|https:\/\/.*)/i)
    data = Net::HTTP.get(URI.parse("#{url}"))
    #extracting the feeds url from 'data' using 'regexp'
    xml = data.scan(/<link
    rel="alternate".*?href="(.*?xml|.*?rdf)"/i)
    end

    Now what i want is to pass the 'xml' variable as a parameter to the next
    class but i'm not able to do that because the 'xml' variable is inside
    an array. Can anybody please tell me about how to do it.

    Regards
    Arun Kumar
    --
    Posted via http://www.ruby-forum.com/.
     
    Arun Kumar, Mar 26, 2009
    #1
    1. Advertising

  2. 2009/3/26 Arun Kumar <>:
    > Hi,
    > This is my code strip
    >
    > =A0contents.each do |content|
    > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0#scanning the content using regexp=

    to fetch the url
    > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0url =3D content.scan(/(http:\/\/.*=

    |https:\/\/.*)/i)

    Two notes: #scan returns a potentially empty Array and not a single object.

    And you can make the regexp simpler and more efficient at the same time

    /https?:\/\/.*)/i

    Note also that using ".*" is dangerous because depending on your input
    this may match too much.

    > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0data =3D Net::HTTP.get(URI.parse("=

    #{url}"))

    The construct "#{expr}" is better replaced by expr.to_s and in this
    case, since url should be String you do not even need that.

    > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0#extracting the feeds url from 'da=

    ta' using 'regexp'
    > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0xml =3D data.scan(/<link
    > rel=3D"alternate".*?href=3D"(.*?xml|.*?rdf)"/i)
    > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0end
    >
    > Now what i want is to pass the 'xml' variable as a parameter to the next
    > class but i'm not able to do that because the 'xml' variable is inside
    > an array. Can anybody please tell me about how to do it.


    Where is "xml in an array"? The variable "xml" references an Array
    because you use String#scan (see above). You can simply iterate that
    Array as any other Array, too. Where is the problem?

    Cheers

    robert

    --=20
    remember.guy do |as, often| as.you_can - without end
     
    Robert Klemme, Mar 26, 2009
    #2
    1. Advertising

  3. PS: Forgot to mention that apparently you still do not use the proper
    tool for the job. Multiple have been named already (REXML, Nokogiri,
    Hpricot etc.) in another thread.

    --
    remember.guy do |as, often| as.you_can - without end
     
    Robert Klemme, Mar 26, 2009
    #3
  4. Arun Kumar

    Arun Kumar Guest

    Robert Klemme wrote:
    > 2009/3/26 Arun Kumar <>:
    >> Hi,
    >> This is my code strip
    >>
    >> �contents.each do |content|
    >> � � � � � � � � � �#scanning the content using regexp to fetch the url
    >> � � � � � � � � � �url = content.scan(/(http:\/\/.*|https:\/\/.*)/i)

    >
    > Two notes: #scan returns a potentially empty Array and not a single
    > object.
    >
    > And you can make the regexp simpler and more efficient at the same time
    >
    > /https?:\/\/.*)/i
    >
    > Note also that using ".*" is dangerous because depending on your input
    > this may match too much.
    >
    >> � � � � � � � � � �data = Net::HTTP.get(URI.parse("#{url}"))

    >
    > The construct "#{expr}" is better replaced by expr.to_s and in this
    > case, since url should be String you do not even need that.
    >
    >> � � � � � � � � � �#extracting the feeds url from 'data' using 'regexp'
    >> � � � � � � � � � �xml = data.scan(/<link
    >> rel="alternate".*?href="(.*?xml|.*?rdf)"/i)
    >> � � � � � � � �end
    >>
    >> Now what i want is to pass the 'xml' variable as a parameter to the next
    >> class but i'm not able to do that because the 'xml' variable is inside
    >> an array. Can anybody please tell me about how to do it.

    >
    > Where is "xml in an array"? The variable "xml" references an Array
    > because you use String#scan (see above). You can simply iterate that
    > Array as any other Array, too. Where is the problem?


    Hi,
    The problem is that i need to parse the xml from the feeds url and the
    code for it is written in another class. So I need to pass the feed url
    ie.'xml'. Since it is written inside an iterator ie. in between each
    do|content|, i cannot pass it as a prameter to the other class since xml
    variable will not be accessible after the iterator ends. Please help me.

    N. B. Writing the code will be more helpfull for me to understand

    Regards
    Arun Kumar

    --
    Posted via http://www.ruby-forum.com/.
     
    Arun Kumar, Mar 26, 2009
    #4
  5. 2009/3/26 Arun Kumar <>:
    > Robert Klemme wrote:
    >> Where is "xml in an array"? =A0The variable "xml" references an Array
    >> because you use String#scan (see above). You can simply iterate that
    >> Array as any other Array, too. =A0Where is the problem?

    >
    > The problem is that i need to parse the xml from the feeds url and the
    > code for it is written in another class. So I need to pass the feed url
    > ie.'xml'. Since it is written inside an iterator ie. in between each
    > do|content|, i cannot pass it as a prameter to the other class since xml
    > variable will not be accessible after the iterator ends. Please help me.


    I don't see how the fact that variable "xml" goes out of scope at some
    point in time prevents using in a different class or method. You
    simply have to pass it on at the time when it is _in_ scope.

    Frankly, I get the impression that you lack some basic understanding
    of how Ruby works, especially what objects and variables are. I
    suggest you work through some introductory material or search the
    archives of this group - there have been numerous discussions about
    call by reference etc.

    Regards

    robert

    --=20
    remember.guy do |as, often| as.you_can - without end
     
    Robert Klemme, Mar 26, 2009
    #5
  6. Arun Kumar

    Arun Kumar Guest

    Robert Klemme wrote:
    > 2009/3/26 Arun Kumar <>:
    >> Robert Klemme wrote:
    >>> Where is "xml in an array"? �The variable "xml" references an Array
    >>> because you use String#scan (see above). You can simply iterate that
    >>> Array as any other Array, too. �Where is the problem?

    >>
    >> The problem is that i need to parse the xml from the feeds url and the
    >> code for it is written in another class. So I need to pass the feed url
    >> ie.'xml'. Since it is written inside an iterator ie. in between each
    >> do|content|, i cannot pass it as a prameter to the other class since xml
    >> variable will not be accessible after the iterator ends. Please help me.

    >
    > I don't see how the fact that variable "xml" goes out of scope at some
    > point in time prevents using in a different class or method. You
    > simply have to pass it on at the time when it is _in_ scope.
    >
    > Frankly, I get the impression that you lack some basic understanding
    > of how Ruby works, especially what objects and variables are. I
    > suggest you work through some introductory material or search the
    > archives of this group - there have been numerous discussions about
    > call by reference etc.

    Hi,
    Thanks for the advice. As u mentioned i'm new to ruby and i have still
    to learn a lot. But the problem is that i have to prepare an assignment
    in ruby regarding html extraction and to parse xml feeds from the html
    content. First i have to read the url from a csv file, then i should
    read the html contents of the url and then parse the xml. It is a tidy
    job. I have completed a major part of it until i stuck into this part.
    For providing further information I'm including the code

    class hello
    def hi(contents)
    begin
    contents.each do |content|
    #scanning the content using regexp to fetch the url
    url = content.scan(/(http:\/\/.*|https:\/\/.*)/i)
    #getting the contents of the url using
    'Net::HTTP.get' by communicating to the host server
    response =
    Net::HTTP.get_response(URI.parse("#{url}"))
    case response
    when Net::HTTPSuccess then response
    when Net::HTTPRedirection then response =
    Net::HTTP.get(URI.parse(response['location']))
    else
    response.error!
    end
    end
    end

    class extract
    def parser(xmlData)
    #extracting the feeds url from 'data' using 'regexp'
    xmlData = response.scan(/<link
    rel="alternate".*?href="(.*?xml|.*?rdf)"/i)
    #rssData = data.scan(/<link rel="alternate"
    type="application\/rss\+xml".*?href="(.*?)"/i)
    #atomData = data.scan(/<link rel="alternate"
    type="application\/atom\+xml".*?href="(.*?)"/i)

    if xmlData
    xmlData.each do |xml|
    #getting the xml contents of the xml url
    using 'Net::HTTP.get' by communicating to the host server
    tags = Net::HTTP.get(URI.parse("#{xml}"))
    #getting the text in between the description
    tag
    values =
    tags.scan(/<description>(.*?)<\/description>/im)
    # storing the description in a hash
    details = Hash.new
    details = {"#{xml}"=>"#{values}"}
    end
    end
    end
    puts "Processing complete!"
    end
    end

    As u see the 'response' variable is the variable to be send as a
    parameter to the extract class. But it is inside an
    iterator(contents.each) I cannot pass the whole content to the next
    class. Can u please give me a suggestion for that

    Regards
    Arun Kumar
    --
    Posted via http://www.ruby-forum.com/.
     
    Arun Kumar, Mar 26, 2009
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    4
    Views:
    532
    Matteo
    Mar 29, 2007
  2. Stuart Redmann
    Replies:
    5
    Views:
    494
    Stuart Redmann
    Dec 14, 2007
  3. Replies:
    5
    Views:
    649
  4. Isti
    Replies:
    2
    Views:
    734
  5. Mister B
    Replies:
    8
    Views:
    568
    Nick Keighley
    Aug 26, 2010
Loading...

Share This Page