ViViDboarder

macrumors 68040
Original poster
Jun 25, 2008
3,446
0
USA
I've been using my Ymail account to get push emails to my phone and emailing the appropriate SMS gateways for each carrier. This works fine for me, but there is one big problem. I have to ask everyone their carrier and then look up the gateway and then add it to my Address Book.

NOT ANYMORE!

I wrote an AppleScript to check all selected Address Book entries and automatically look them up and add them if a gateway is found. :D

This is my first AppleScript and I didn't know it was object oriented, so I know the code is long and ugly, but it works.

If anyone has a Mac and wants to SMSify their Address Book, copy this code and paste it into Script Editor. From there select any or all your Address Book cards and click run!

PS: I just change the gateways to the MMS gateways found on http://en.wikipedia.org/wiki/SMS_gateways to have those too, although I can't send MMS with Yahoo, only Gmail for some reason. :p

EDIT: Newer modified version by ephramz has been posted over on http://www.macosxhints.com/article.php?story=2009070922403951 Thanks for keeping it alive and giving me credit too!

Code:
-- RUNS ON SELECTED ENTRIES
-- this script adds email addresses for selected AddressBook cards
-- for the SMS gateways associated with the cellphone number provided on the card
-- This script checks for and does not act on duplicates
-- May not work 100% if number was brought from another carrier


-- beginning of bash script command
set command to "curl \"http://www.whitepages.com/carrier_lookup?carrier=att&name_0=&number_0="
-- used for parsing the webpage
set astid to AppleScript's text item delimiters
set justBefore to "<td id=\"status_column\" valign=\"middle\""

tell application "Address Book"
	-- makes a list of all selected entries
	set mylist to selection
	-- iterates for each person
	repeat with this_person in mylist
		-- makes list of each phone number for this_person
		set phonesList to every phone of this_person
		-- iterates for each phone number
		repeat with phonenumber in phonesList
			-- if the phonenumber is a mobile number extract the number
			if label of phonenumber is "mobile" then
				-- gets the mobile number
				set theNumber to value of phonenumber
				-- makes mobile number URI compatable
				--set theNumber to do shell script "perl -e 'use URI::Escape; print uri_escape(\"" & theNumber & "\")';"
				-- removes spaces - and () and . from phone number
				set illegalCharacters to {" ", "-", "(", ")", "."} -- Whatever you want to eliminate.
				set replaceWith to ""
				repeat with thisChar in illegalCharacters
					set AppleScript's text item delimiters to {thisChar}
					set theNumber to text items of theNumber
					set AppleScript's text item delimiters to {replaceWith}
					set theNumber to theNumber as Unicode text
				end repeat
				theNumber
				-- adds the number and ending " to the command
				set theCommand to command & theNumber & "\""
				-- quotes the command to ensure & is executed fine
				set quotedCommand to quoted form of theCommand
				-- switches to bash and gets the source of the page as T
				set T to (do shell script "/bin/bash -c " & quotedCommand)
				-- begin parsing
				set AppleScript's text item delimiters to justBefore
				set lastPart to text item 2 of T
				set AppleScript's text item delimiters to "<td>"
				set X to text item 2 of lastPart
				set AppleScript's text item delimiters to "</td>"
				set carrier to text item 1 of X
				
				-- reset the delimiter
				set AppleScript's text item delimiters to astid
				-- creates the email address for the phone number
				set theEmail to ""
				if carrier is "Verizon" then
					set theEmail to theNumber & "@vtext.com"
				end if
				if carrier is "AT&T/Cingular" then
					set theEmail to theNumber & "@txt.att.net"
				end if
				if carrier is "T-Mobile" then
					set theEmail to theNumber & "@tmomail.net"
				end if
				if carrier is "Cellular One" then
					set theEmail to theNumber & "@mobile.celloneusa.com"
				end if
				if carrier is "Alltel Wireless" then
					set theEmail to theNumber & "@message.alltel.com"
				end if
				if carrier is "Sprint PCS" then
					set theEmail to theNumber & "@messaging.sprintpcs.com"
				end if
				
				-- is there a dupe or no email found?
				set dupe to false
				
				-- if no email address found
				if theEmail is "" then
					set dupe to true
				end if
				
				-- checks all email addresses of the person for duplicates
				set emailList to every email of this_person
				repeat with existingMail in emailList
					if value of existingMail is equal to theEmail then
						set dupe to true
					end if
				end repeat
				-- if there are no duplicates, add the new email address
				if dupe is false then
					make new email at end of emails of this_person with properties {label:"mobile", value:theEmail}
				end if
				
				
			end if
		end repeat
	end repeat
	
	save addressbook
	
end tell
 

ppc750fx

macrumors 65816
Aug 20, 2008
1,308
4
I'll try this out in a bit. Looks good.

Glad to see that somebody other than me use those free gateways instead of paying the carriers. :D

I'm amazed you've managed to put up with YMail though .... ;)
 

ViViDboarder

macrumors 68040
Original poster
Jun 25, 2008
3,446
0
USA
I'll try this out in a bit. Looks good.

Glad to see that somebody other than me use those free gateways instead of paying the carriers. :D

I'm amazed you've managed to put up with YMail though .... ;)

Yea, well it's the only one with Push service for my phone. It's pretty unreliable though. I get some of my messages hours later! How is that Push? When/if we get push Gmail, I'll switch that baby over. Also, like I mentioned, no MMS with Ymail, only with Gmail.

BEGGING for Push Gmail!!!
 

gnestor

macrumors newbie
May 9, 2009
3
0
Awesome!!!

great work! i can't believe that someone conceived this, let alone figured it out. with mobile data on phones nowadays, why pay for SMS ever again???
 

ViViDboarder

macrumors 68040
Original poster
Jun 25, 2008
3,446
0
USA
Wow. After months people are interested, haha.

Yea, you just pasted in the Applescript Editor and hit run.

What it does:
I found a website that lets you look up carriers of cellphone numbers. Actually, I found several, but the one that I use has the number search term in the address so I could put it into my code.

Basically, it goes through all phone numbers in your address book, navigates to that website, finds the carrier name, and then it uses the email gateway to send SMS messages. I just put that in manually for each carrier that I could find the addresses for.

I basically wanted to come up with something to save me a ton of time and decided I'd share it. I'd be glad to take any suggestions if you have anything.
 

fishkorp

Contributor
Apr 10, 2006
2,501
493
Ellicott City, MD
I'm sure many people will find this useful and thanks to the OP for that, but the logic in figuring out the provider is far from 100% accurate now. All the sites/tools used to determine that were based on certain providers having certain prefixes. With number porting now, that becomes an issue. For example, in Northeast Pennsylvania any of those services will determine that a 570-604-xxxx phone number belongs to T-Mobile. However, I have family with that prefix on AT&T, Verizon, and T-Mobile. So just a warning that this will not work 100% of the time now thanks to number porting. In most cases it'll still work, but if anyone's switched carriers in the last 5 or so years, you'll probably get undeliverable SMS emails.
 

ViViDboarder

macrumors 68040
Original poster
Jun 25, 2008
3,446
0
USA
I'm sure many people will find this useful and thanks to the OP for that, but the logic in figuring out the provider is far from 100% accurate now. All the sites/tools used to determine that were based on certain providers having certain prefixes. With number porting now, that becomes an issue. For example, in Northeast Pennsylvania any of those services will determine that a 570-604-xxxx phone number belongs to T-Mobile. However, I have family with that prefix on AT&T, Verizon, and T-Mobile. So just a warning that this will not work 100% of the time now thanks to number porting. In most cases it'll still work, but if anyone's switched carriers in the last 5 or so years, you'll probably get undeliverable SMS emails.

Yea, I realize that. It works pretty well and if you get a returned message then you know you have to fix that one. If it were fool proof there'd be no reason for anyone to get SMS.
 

gnestor

macrumors newbie
May 9, 2009
3
0
error: can't get text item 2 of ""

i'm getting an error at this line:

set lastPart to text item 2 of T

is anybody else getting this error? any suggestions?
 

samcraig

macrumors P6
Jun 22, 2009
16,638
41,619
USA
question.

using the email gateways is free outgoing. But you still need a text plan to receive a reply.

a) it will reduce the # of txt message you use stretching out your plan (i.e. 200 msgs will last longer since you're only getting, not sending

b) if the person emails you back (not texts) than it's moot anyway since email to email is free with unlimited data.

So it's a "send free" solution - not something to replace a plan...
 

ViViDboarder

macrumors 68040
Original poster
Jun 25, 2008
3,446
0
USA
i'm getting an error at this line:

set lastPart to text item 2 of T

is anybody else getting this error? any suggestions?

Sorry, I don't really know what that's all about. It worked with me.

question.

using the email gateways is free outgoing. But you still need a text plan to receive a reply.

a) it will reduce the # of txt message you use stretching out your plan (i.e. 200 msgs will last longer since you're only getting, not sending

b) if the person emails you back (not texts) than it's moot anyway since email to email is free with unlimited data.

So it's a "send free" solution - not something to replace a plan...

Yea, it's send free. They go from emails to emails. The other person would have to pay for their incoming though.
 

sails

macrumors newbie
Jul 27, 2010
1
0
Number Portability

Data24-7 offers an inexpensive service where you can look-up the carriers for your phone numbers. It is number-portability-aware; if somebody changes carriers, their new carrier will be updated in their service within a few hours.

The website is: http://www.data24-7.com

Pricing is $12 per month, and $0.006 per phone number.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.