JoJo
JoJo

Reputation: 20115

How to get a Facebook user's current country?

The Facebook Graph API provides a user's current location in two formats: name and ID. ID can be something like 104022926303756. Name can be something like Palo Alto, California or Beijing, China. From these two fields, how do I extract the country? All American locations are in the form [City], [State] whereas all non-American locations are in the form [City], [Country]. Can I code something less hacky than:

$states = array(
 'Alabama'
 'Alaska',
 'Arizona',
 // ...
);

$country = 'USA';
if (!in_array($locationName, $states)) {
    preg_match('#, ([a-z]+$)#i', $locationName, $match);
    $country = $match[1];
}

Upvotes: 4

Views: 17411

Answers (3)

paterlinimatias
paterlinimatias

Reputation: 81

It comes inside the signed request when they hit your app. It comes even when they still didn't approve your app.

Upvotes: 0

thermz
thermz

Reputation: 2406

How about using this: http://developers.facebook.com/tools/explorer/?method=GET&path=fql%3Fq%3DSELECT%20current_location%20FROM%20user%20WHERE%20uid%3Dme()

?

As you can see, using FQL on user table, the JSON you'll receive is something like:

{
  "data": [
    {
      "current_location": {
        "city": "Turin", 
        "state": "Piemonte", 
        "country": "Italy", 
        "zip": "", 
        "id": 115351801811432, 
        "name": "Turin, Italy"
      }
    }
  ]
}

There you have the field country, much more readable :-)

EDIT: The link is broken because brakets are missing at the end of query, anyway the FQL query is:

SELECT current_location FROM user WHERE uid=me()

"me()" can be any user ID.

Upvotes: 4

Joakim Syk
Joakim Syk

Reputation: 1011

If you want more information you could use the latitude and longitude from https://graph.facebook.com/104022926303756 and feed them into a reverse geocoder.

http://maps.googleapis.com/maps/api/geocode/json?latlng=37.4293,-122.138&sensor=false

The Google API gives a lot of information, but it can be quite useful.
The country code may be a better idenfifier than the country name for example.
There's also the possibility to select output language. Adding &lang=sv gives you "Kalifornien" as the name of the state instead of "California".

Upvotes: 3

Related Questions