Salesforce & Google Maps Mashup using PHP
After reading this post, check out a more recent post on an improved mashup or visit the Arrowpointe’s product page for this functionality.
I have developed a mash-up of Salesforce.com and Google Maps. The script was developed in PHP and utilizes the PHP Nusoap Sforce Toolkit, created by Ryan Choi, to communicate with the Sforce API and Phoogle, developed by System 7 Designs, to communicate with the Google API.
Using the PHP Nusoap toolkit, this script logs into Salesforce and queries for all Account records that have a complete address. After setting up a Phoogle map instance, the script adds each address to the map. In addition to sending the map the latitude and longitude values, it also passes an HTML formatted string that populates each pin with the Account Name, Address and a link to the record in Salesforce.com.
The demo is now closed because my web host turned off calls to file_get_contents and I am not planning on re-writing the functionality. I noticed that the code is not running properly on IE. It gets an error and says “Operation Aborted”. I am not sure why. I have found a bunch of posts giving some solutions, but none of them seem to work. Still working on that.
The script has been tested on PHP 4.3.11, 4.4.1 and PHP5. In order for this to work on PHP5, you must download the latest version of the code, which came out on 12/6/2005. Older versions of the code need to use PHP4 because the soapclient class conflicts with another class in many PHP5 installs.
The script is free for download and licensed under the GPL. To get this setup on your own webserver, do the following:
- Download the scripts. The zip file contains all of the files you need.
The included files unique to my development are:
- MapAccounts.php: This is the primary script.
- google-map-api-key.php: Holds the Google Maps API key for the web directory.
- phoogle-extensions.php: I had to extend the Phoogle class.
The PHP NuSoap Sforce toolkit code was not changed. The master source for this code, as well as other sample files for it, are at its Sourceforge page. The included PHP NuSoap Sforce toolkit files are:
- salesforce.php: Primary file that defines the salesforce class.
- nusoap.php
- partner.wsdl
I had to make some changes to the Phoogle files. I have communicated these changes to the Phoogle developers so they may get incorporated. The master source for the Phoogle code and documentation on its functionality is located here. The included Phoogle files are:
- phoogle.php
- Sign-up for a Google API key. Google requires you to have a new API key for every web server directory you use.
- Enter your API key into the google-map-api-key.php file.
- Open the MapAccounts.php file and search for the phrase Enter a default username here. Update the file with your username.
- Open the MapAccounts.php file and search for the phrase Enter a default password here. Update the file with your password.
- Load all of these files to your web server.
- Run the MapAccounts.php file
Phoogle geocodes addresses using the Yahoo Geocode API. I have noticed that the current code has some trouble with multi-line addresses. If you are receiving errors, that could be why.
Please comment on this post and let me know what you think. Also, comment here and add links to how you have used this script or modified it. Have fun!
Updated 12/8/2005:
I made some small tweaks to the code that allows it to be run from within a custom tab so that it leverages the existing Salesforce session and applies all of the user’s visibility settings. I was able to get it working by having a Custom Tab with the following URL:
http://www.arrowpointe.com/dev/SalesforceGoogleMap/MapAccounts.php?sess= {!API_Session_ID}&srvr={!API_Partner_Server_URL_60}
You are welcome to try it out with the URL at arrowpointe.com if you want to, but I encourage you to host the PHP files yourself and link to your own files. My pages are NOT running in HTTPS. That’s why you should host them yourself. Also, I could change the code in my files at any time, so your link might break too.
In case you didn’t notice when looking at the code, you can alternatively pass in a username and password using the “un” and “pw” parameters the same way you can do it to log into Salesforce.
Note that the code is sensitive and, therefore, only pulls back Accounts with a complete addresses. Also, things like multi-line addresses or addresses that cannot be geocoded will result in script errors. I don’t have the error handling working now and this is not intended to be service I am providing at this time.
It works in PHP5 now too. The Salesforce PHP Nusoap package was updated on Sourceforge.