GoogleText
GoogleText is a SMS client library for sending and receiving free SMS through Google Voice.
For more information visit http://google_text.github.com/.
Overview
GoogleText is a SMS client library for sending and receiving free SMS through Google Voice. Alas, Google Voice does not yet have an API, so GoogleText uses Curl and Nokogiri to scrape and post using Google Voice web URLs.
Why?
Sure, there are a bunch of SMS implementations out there. And while GoogleText is pretty slow and perhaps a bit fragile sending SMS this way is also absolutely free and allows both sending and receiving to and from a real free phone number. Pretty great, if you ask me, and worth the tradeoff in performance.
Prerequisites
GoogleText currently relies on the following gems:
- bundler
- nokogiri
- curb
- json
Installation
-
Get a Google Voice account, if don't already have one.
-
Install the gem an all dependencies:
gem install google_text
-
Configure GoogleText someplace sensible, using the email address and password you use to log on to your Google Voice account. If you are using GoogleText in a Rails application,
config/initializers/google_text.rb
is a good place to put the configuration block:
Sample Configuration:
GoogleText.configure do |config|
config.email = 'google-user'
config.password = 'google-password'
end
Usage
Setup:
>> require 'rubygems'
=> false
>> require 'google_text'
=> true
>> GoogleText.configure {|config| config.email, config.password = 'google-user', 'google-password'}
=> ["google-user", "google-password"]
Sending a message:
>> message = GoogleText::Message.new(:text => "Hello World!", :to => "(311) 615-4156")
=> #<GoogleText::Message:0x102503630 @text="Hello World!", @to="3116154156">
>> message.send
=> #<GoogleText::Message:0x102515240 @to="3116154156", @sent_status=true, @text="Hello World!">
>> message.sent?
=> true
Receiving unread messages:
>> messages = GoogleText::Message.unread
=> [#<GoogleText::Message:0x1023fda38 @display_number="+3116154156", @from="(650) 265-1193", @read_status=false, @id="f298c576522c6a1ecc976c649e9826c31e017a24", @relative_start_time="3 minutes ago", @to="Me", @display_start_date_time="6/16/10 2:57 AM", @display_start_time="2:57 AM", @text="Hello World", @labels=["inbox", "unread", "sms", "all"], @start_time=1276671459139>]
>> message = messages.first
=> #<GoogleText::Message>
>> message.read?
=> false
>> message.mark_as_read
=> #<GoogleText::Message>
=> message.read?
=> true
>> messages = GoogleText::Message.unread
=> []
Testing
Requires Rspec and FakeWeb.
`bundle install`
`rake test`
Acknowledgements
Many thanks to kgautreaux. I copied most of the code used for scraping and posting the Google Voice pages from gvoice-ruby. His work was an enormous help in getting this gem done very quickly, as I'm sure reverse-engineering this took quite a bit of time and effort.