Facebook Graph API - как получить страну пользователя? - PullRequest
19 голосов
/ 28 февраля 2011

Я разрабатываю приложение для Facebook, используя их Graph API.Ранее я разработал приложение с использованием устаревшего REST API.

Я столкнулся с проблемой, заключающейся в том, что я не могу получить страну пользователя, только его «местоположение» - это просто город и штат / регион в объединенном формате (например, «Хьюстон, Техас»).«).

Как можно получить страну пользователя, используя Graph API?Если это напрямую невозможно, какие обходные пути могут быть для этого?

Ответы [ 10 ]

24 голосов
/ 21 апреля 2011

https://api.facebook.com/method/fql.query?format=json&query=SELECT%20current_location%20FROM%20user%20WHERE%20uid=4&access_token=

[
  {
    "current_location": {
      "city": "Palo Alto",
      "state": "California",
      "country": "United States",
      "zip": "",
      "latitude": 37.4441,
      "longitude": -122.163,
      "id": 104022926303756,
      "name": "Palo Alto, California"
    }
  }
]

Документация FQL

6 голосов
/ 16 апреля 2011

Используйте php sdk:

require 'facebook.php';

$ facebook = new Facebook (array ('appId' => 'APPID', 'secret')=> 'APPSECRET',
'cookie' => true,));

Затем запросите подписанный запрос:

  $signed_request = $facebook->getSignedRequest();
  $country = $signed_request["user"]["country"];

Теперь в $ country есть строка, такая как «us» для США и «uk» для Великобритании и т. Д.

6 голосов
/ 28 февраля 2011

Одно решение, которое я нашел, это просто обходной путь, это использование API GeoNames - http://www.geonames.org/export/web-services.html

Используя что-то вроде:

http://api.geonames.org/search?q=houston%2C%20texas&featureClass=P&username=myusername

Возвращает результаты в виде объекта xml со страной как частью данных.

Однако я не особенно доволен этим как решением, так как оно добавляет ненужный слой усложнений к моему приложению - плюс запросы к этим бесплатным услугам ограничены 2000 в час и 30 000 в день.

1 голос
/ 25 августа 2015

используйте официальный API Facebook Graph / me? Fields = родной город он вернет вас, например. "Прага, Чехия"

Я полагаю, что вы можете взорвать струну иглой ',' и последним элементом должна быть страна

1 голос
/ 01 апреля 2014

Вы должны попробовать вот так:

/* make the API call */
[[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection,
                                                           NSDictionary<FBGraphUser> *user,
                                                           NSError *error)
    {
        if (!error)
        {
            self.countryName    = [[[user objectForKey:@"location"] valueForKey:@"name"] componentsSeparatedByString:@", "][1];
            self.countryCode    = [self getCountryCodeForCountry:STUser.countryName];
        }
}];

-(NSString *)getCountryCodeForCountry:(NSString*)country
{
    NSMutableArray *countries = [self getCountries];
    NSArray *countryCodes = [NSLocale ISOCountryCodes];

    NSDictionary *codeForCountryDictionary = [[NSDictionary alloc] initWithObjects:countryCodes forKeys:countries];

    return [codeForCountryDictionary objectForKey:country];
}

+(NSMutableArray *)getCountries
{
    NSMutableArray *countries = [NSMutableArray array];

    NSArray *countryCodes = [NSLocale ISOCountryCodes];
    countries = [NSMutableArray arrayWithCapacity:[countryCodes count]];

    for (NSString *countryCode in countryCodes)
    {
        NSString *identifier = [NSLocale localeIdentifierFromComponents:[NSDictionary dictionaryWithObject: countryCode forKey: NSLocaleCountryCode]];
        NSString *country = [[NSLocale currentLocale] displayNameForKey: NSLocaleIdentifier value: identifier];
        [countries addObject: country];
    }

    return countries;
}
1 голос
/ 28 февраля 2011

Хороший вопрос.

Проблема в том, что любое приложение, запускаемое под Facebook, должно проходить через серверы Facebook - fb-прокси, и из-за этого вы получаете не IP-адрес посетителей, а серверы Facebook, которые бесполезны.

Я еще не видел никакого решения для этого , за исключением получения страны пользователя из своего профиля, что снова возможно только в том случае, если пользователь сделал это общедоступным или санкционировал разрешение на это.

Вот полезная ссылка, на которую вы тоже можете посмотреть:

0 голосов
/ 24 марта 2014

Ответ от Валерчик действительно правильный, но на тот случай, если кто-то будет искать решение PHP, я получу что-то вроде этого:

$token = Yii::app()->facebook->getAccessToken();
$fqlRequest = 'https://api.facebook.com/method/fql.query?query=' .
              'SELECT%20' . $fqlAttributeName . '%20FROM%20user%20WHERE%20' .
                    'uid=' . $fbUserId . '&access_token=' . $token;
$ret = file_get_contents($fqlRequest);

if (!empty($ret)) {
    ...

Атрибуты пользователя можно найти здесь:
https://developers.facebook.com/docs/reference/fql/user/

Надеюсь, это кому-нибудь поможет:)

0 голосов
/ 21 мая 2013

Вы можете увидеть количество фолловеров (по количеству лайков на вашей странице FB) по странам с помощью FQL-запроса.Настройте JSON-запрос, используя значение токена для сеанса, и отправьте FQL-запрос через PHP с помощью object_ID целевой страницы и периода жизни.выберите метрику и установите метрику для page_fans_country - и выведите данные в файл CSV.Вы должны получить список всех подписчиков (за лайки) по коду страны (несколько строк).Настройте сводную таблицу для получения агрегированного индекса по нескольким страницам данных и ранжирования по коду страны.Вот пример запроса FQL:

ВЫБЕРИТЕ метрику, значение ОТ ПОНИМАНИЯ ГДЕ object_id = [здесь идет ваш идентификатор страницы] И метрика = 'page_fans_country' И end_time = end_time_date ('2013-04-28') И период= период ( 'время жизни')

0 голосов
/ 06 февраля 2013

Согласно документации Facebook , вы можете получить 2-буквенный код страны ISO 3166-1 от пользователя locale.

Facebookязыковые стандарты соответствуют кодам ISO и кодам стран соответственно, соединенные подчеркиванием.Базовым форматом является '' ll_CC '', где '' ll '' - это двухбуквенный код языка, а '' CC '' - это двухбуквенный код страны.Например, en_US представляет американский английский.

Пример FQL:

SELECT locale FROM user WHERE uid = me()

Ответ:

{
  "data": [
    {
      "locale": "en_US"
    }
  ]
}
0 голосов
/ 18 апреля 2011

для приложений iframe, тогда ip не скрывается серверами FB, что означает, что вы можете выполнить поиск ip-адреса

http://phpweby.com/software/ip2country

скрипт был немного глючным для меня, но сделал свою работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...