Best way to parse XML data

12 views
Skip to first unread message

Stever

unread,
Oct 4, 2006, 3:25:00 PM10/4/06
to Ruby on Rails: Talk
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?

Philip Hallstrom

unread,
Oct 4, 2006, 3:39:54 PM10/4/06
to Ruby on Rails: Talk

snacktime

unread,
Oct 4, 2006, 4:09:36 PM10/4/06
to rubyonra...@googlegroups.com

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

Stever

unread,
Oct 4, 2006, 4:41:09 PM10/4/06
to Ruby on Rails: Talk
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?

snacktime

unread,
Oct 4, 2006, 5:03:46 PM10/4/06
to rubyonra...@googlegroups.com
On 10/4/06, Stever <st...@tripperjones.com> wrote:
>
> 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).

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

Stever

unread,
Oct 5, 2006, 2:10:18 AM10/5/06
to Ruby on Rails: Talk
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

Stever

unread,
Oct 5, 2006, 2:11:19 AM10/5/06
to Ruby on Rails: Talk
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?

Reply all
Reply to author
Forward
0 new messages