Migrating Gowalla Users (disambiguation, algorithms and magic trip itineraries)
Friday, December 2nd at 1am (Europe time), after watching the always great "Bourne Ultimatum" film, I checked the last tweets before going to sleep. A non-surprising tweet announce that Facebook had bought Gowalla and they were going to close it.

They have a killing design and user experience, and it's a pity they couldn't do better. Even today when I look at their webpage or apps I can see a lot of small details that make me smile and say: 'they are so good'. If you look at our homepage (http://www.touristeye.com), that comic was inspired by their design of 2 years ago. They also had a comic, and we thought a comic with 3 steps was a really good way to explain why TouristEye is the best travel app.

So, at 2am I started looking at their API to see how we can make the migration. It wasn't going to be an easy proccess, as Gowalla users do checkins in all kinds of spots; and we only want tourist-related places. I sent an email to our team asking for feedback. They said, yeah, weekend #hackathon! Saturday at 8am, already wake up and working on the integration :). At the end we have been all week with so many details. Problems we had:

* 1st problem. Matching Gowalla and TouristEye places to avoid duplicates. Glad we had already built a disambiguator to match more services. We have improved it this week testing with more data. It works as a servlet.

* 2nd problem. Choosing which spots to import. We are not going to import all kind of places, we are a travel guide. There are a lot of crap spots, that's the problem I personally have with Foursquare, Gowalla and all those services that have millions of places. So we decided to import some categories only. Then import the lists with more than 5 places, and import all the spots which are in those lists.

* 3rd problem. Could we create user trips automatically? Looking at the checkins of 2 years of a user, could we know which trips have he/she done? The answer had to be yes. And yes it is. It's not perfect, but after testing it with dozens of users, the algorithm seems to do a really amazing job. How we do it? Let me explain it so we can get more ideas and feedback:

- Let's get all cities where the Gowalla user has been, and have an array with all the days he has been.

- If he/she has been more than 20 days/year on a city, we consider it to be/has been his/her hometown. We do this to detect when people moves from one city to another.

- Now we remove all cities which are less than 37 miles (60km) from the hometowns, as they are their daily places, and TouristEye is just about travel.

- Finally we break the cities intro trips. There are currently 2 ways to know it's a different trip. If the user visits one if his hometowns in the middle, or if he hasn't done a checkin in 4 days and the cities on the sides of those 4 days are not the same (to prevent cases where the user hasn't checkin but it's still traveling on the same city).

- We are ready to create the trips for him/her, with all the days planned, and the places he/she has visited. You can view an example of a trip here: http://www.touristeye.com/Trip-NYC-t-34813/planning

I encourage you to migrate if you have been a Gowalla user. We'll email you when the script finishes. Please, tell us if you are or you are not happy with the result so we can take into account more cases and have a cleaner migration!

You can migrate here: http://www.touristeye.com/gowalla

Also, who wants to create his trips from his Foursquare account? Now it's just one more step ;)