Подтвердить что ты не робот

Facebook Graph API - как получить пользовательскую страну?

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

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

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

4b9b3361

Ответ 2

Одним из решений, которое я нашел, что является лишь обходным путем, является использование 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 в день.

Ответ 3

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

требуется 'Facebook.php';

$facebook = новый Facebook (массив ('appId' = > 'APPID', 'secret' = > 'APPSECRET',
'cookie' = > true,));

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

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

Теперь у страны $есть строка, такая как "us" для Соединенных Штатов и "uk" для Соединенного Королевства и т.д.

Ответ 4

Это хороший вопрос.

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

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

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

Ответ 5

Вам следует попробовать:

/* 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;
}

Ответ 6

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

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

Ответ 7

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

http://phpweby.com/software/ip2country

script был для меня немного ошибкой, но выполнил эту работу.

Ответ 8

Согласно документации 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"
    }
  ]
}

Ответ 9

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

SELECT metric, value FROM insights WHERE object_id = [ваш идентификатор страницы идет здесь] AND metric = 'page_fans_country' AND end_time = end_time_date ('2013-04-28') AND period = period ('lifetime')

Ответ 10

Ответ, отправленный Valerchik, действительно прав, но в случае, если кто-то будет искать 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/

Я надеюсь, что это поможет кому-то:)