January 05, 2009
Older: Look at the Size of My Footer
Newer: My Setup and Software
HTTParty Goes Commando
Hot of the press is a new feature for HTTParty, everyone’s favorite way of consuming sane web services. Thanks to Alex Vollmer, the party has been extended to your terminal with a sexy command line interface!
The CLI is available in 0.2.5, which should be on GitHub and RubyForge by the time you read this. If you like the addition, be sure to send Alex (@alexvollmer) a tweet to let him know and thank him. Enough with the gratitude, give me some examples you say!
Installation
# GitHub
$ sudo gem install jnunemaker-httparty --source http://gems.github.com
# RubyForge
$ sudo gem install httparty
Examples
I use Twitter for a lot of examples, so how about we start with the Twitter public timeline.
$ httparty http://twitter.com/statuses/public_timeline.json
[{"user"=>
{"name"=>"sfwineboy",
"url"=>"http://www.new.facebook.com/profile.php?id=1401240105",
"id"=>"15651761",
"description"=>"Chill - Axin",
"protected"=>false,
"screen_name"=>"sfwineboy",
"followers_count"=>8,
"location"=>"Los Angeles, CA",
"profile_image_url"=>
"http://s3.amazonaws.com/twitter_production/profile_images/57533829/a_281078039762fd87b263a939b652626f_normal.jpg"},
"favorited"=>false,
"truncated"=>false,
"text"=>"Chillin in LA in Mar Vista http://loopt.us/VVQu2Q",
"id"=>"1096656558",
"in_reply_to_status_id"=>nil,
"in_reply_to_user_id"=>nil,
"source"=>"<a href=\"https://loopt.com\">Loopt</a>",
"created_at"=>"Mon Jan 05 07:10:43 +0000 2009"},
...
}]
By default, the command line interface to HTTParty gives you a ruby pretty printed object. It doesn’t stop there though. If you want, you can format the output using the JSON gem’s pretty_generate version of JSON or REXML’s attempt at pretty indented xml.
$ httparty -f json http://twitter.com/statuses/public_timeline.json
[
{
"user": {
"name": "Katrin Verclas",
"url": "http:\/\/www.mobileactive.org",
"id": "3125721",
"description": "chica. curious.",
"protected": false,
"screen_name": "Katrinskaya",
"followers_count": 935,
"location": "",
"profile_image_url": "http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/65202240\/Photo_95_normal.jpg"
},
"favorited": false,
"truncated": false,
"text": "It is 2 am and insomnia girl is trying hard not to get completely irritated at this shit. Drugs, baby, drugs.",
"id": "1096661586",
"in_reply_to_status_id": null,
"in_reply_to_user_id": null,
"source": "<a href=\"http:\/\/www.naan.net\/trac\/wiki\/TwitterFon\">TwitterFon<\/a>",
"created_at": "Mon Jan 05 07:15:38 +0000 2009"
},
...
}
]
$ httparty -f xml "http://whoismyrepresentative.com/whoismyrep.php?zip=46544&output=xml"
<result n='1'>
<rep name='Joe Donnelly' district='2' office='1218 Longworth' phone='(202) 225-3915' link='http://donnelly.house.gov/' state='IN'/>
</result>
You can also use different request methods, such as post and set headers and junk like that. See the help for more information.
$ httparty -h
USAGE: /opt/local/bin/httparty [options] [url]
-f, --format [FORMAT] Body format: plain, json or xml
-r, --ruby Dump output in Ruby pretty-print format
-a, --action [ACTION] HTTP action: get (default), post, put or delete
-d, --data [BODY] Data to put in request body (prefix with '@' for file)
-H, --header [NAME=VALUE] Additional HTTP headers in NAME=VALUE form
-v, --verbose If set, print verbose output
-h, --help Show help documentation
I think this addition is pretty hot and I’m excited to actually need to try it out. This is, I’m sure, just the first pass of what will be more updates to the CLI of HTTParty, but I can see this completely replacing curl and your browser for testing API’s that you are building (or wrapping). Very cool stuff and much thanks to Alex.
9 Comments
Jan 05, 2009
Thanks, this will be a really handy way for me to test API calls to Convio at work (this is our constituent management system).
Jan 05, 2009
@akahn – Cool. Let me know if you get ideas for additions.
Jan 05, 2009
That’s a very useful addition. Makes it much easier to quickly build out code against an API one isn’t too familiar with…
Jan 05, 2009
This is really cool. I can see it replacing curl like you say in very short order.
I’m wondering about piping HTTParties together (bar hopping?), kind of like how Yahoo! Pipes works. It seems like a good idea, but I can’t think of any compelling use cases at the moment.
Jan 08, 2009
The dependency of json 1.1.3 stops Windows users from being able to use HTTParty (the most recent Windows json gem on rubyforge is 1.1.1) without modification. Any ideas?
Jan 08, 2009
I suppose I could use json pure instead. I’ll look into it when I get a chance.
Jan 08, 2009
I changed the json dependency version 1.1.1 in my local gem to try out HTTParty on my Windows machine. It seems to work fine for some basic stuff I have had time to try. json_pure may be a good route, I have never really worked with it to know though. At the company I work for we develop on Windows and deploy on Ubuntu (Ruby on Rails apps anyways).
Jan 24, 2009
I’m wondering if httparty is a good fit or a poor fit for downloading a large (around a gigabyte, say) file over http to save to the local filesystem. Would it be better to use something like curb for that? Does it matter much?
Interested in people’s thoughts on this, and what the best tool for the job might be.
Jan 29, 2009
json 1.1.3 not being available on windows is quite annoying.
If a move to json pure fixes this, I’d be very grateful!
Sorry, comments are closed for this article to ease the burden of pruning spam.