Best way to parse XML data

Hey,

I am hooking up with the USPS rate calculator so I can calculate shipping costs online. Unfortunately, USPS uses neither XML-RPC or SOAP. I send the data via a GET request (a long URL) and I get data back via xml. Questions: 1) Is there a library or something within the rails platform that allows me to send a get request? 2) Is there a library that allows me to parse the resulting XML data?

I am hooking up with the USPS rate calculator so I can calculate shipping costs online. Unfortunately, USPS uses neither XML-RPC or SOAP. I send the data via a GET request (a long URL) and I get data back via xml. Questions: 1) Is there a library or something within the rails platform that allows me to send a get request? 2) Is there a library that allows me to parse the resulting XML data?

Never used it, but rexml maybe...

http://www.germane-software.com/software/rexml_doc/ http://www.germane-software.com/software/rexml/docs/tutorial.html

A POST works just fine with the USPS webtools api. It's just not evident from the documentation. Just post the data like you would for a regular form post using application/x-www-form-urlencoded as the content type.

Chris

If this is the case, do I use the "web services" functionality in rails? I can't seem to find any documentation either on the USPS website or the internet for that matter. usps doesn't even say if they're using XML-RPC or SOAP (I think it's neither).

Can you at least point me in the right direction?

Use something like net/https to do the POST. The only strange thing is that while the content type is application/x-www-form-urlencoded, you don't want to actually urlencode any of the data.

Here is a page that shows how it's done in perl.

http://www.icdevgroup.org/docs/tags/usps-query.html

Guys,

I figured out a way to write a script to get the info I needed from USPS web tools. I used rexml and net/http plugins. I thought I would contribute code to this group because there doesn't seem to be much support on the usps site for ruby. I searched online and couldn't find any scripts either. Anyway, here you go: (PS, please don't make fun of this code, I am new to ruby. However, this code seems to work for me). #! /usr/bin/ruby

# ************************************************************ # The purpose of this script is to find out how much it costs # to send a package through USPS through a pre-defined # criteria # ************************************************************

# *** Define variables here *** userid = "577MODEL4495" service = "PRIORITY" zip_origination = "10022" zip_destination = "20008" pounds = "10" ounces = "5" container = "Flat Rate Box" box_size = "REGULAR"

# Administrative require 'uri' require 'net/http' require "rexml/document" include REXML

# Prepares the xml request for sending xml_request = <<END <RateV2Request USERID="#{userid}">   <Package ID="0">     <Service>#{service}</Service>     <ZipOrigination>#{zip_origination}</ZipOrigination>     <ZipDestination>#{zip_destination}</ZipDestination>     <Pounds>#{pounds}</Pounds>     <Ounces>#{ounces}</Ounces>     <Container>#{container}</Container>     <Size>#{box_size}</Size>   </Package> </RateV2Request> END xml_request = xml_request.gsub(/[\t\r\n]/,'')

# Sends the xml request to USPS host = 'testing.shippingapis.com' path = "/ShippingAPITest.dll?API=RateV2&XML=" + "#{URI.encode(xml_request)}" xml_response = Net::HTTP.get host, path

# Parses the returned xml response parsed = Document.new xml_response puts parsed.elements['//RateV2Response/Package/Postage/Rate'].text

Also, is there someplace else I can post this code? There are a few sites that seem to be sites to store "code snippets". I forgot their names though. What are the more popular ones?