Facebook Graph API - как получить пользовательскую страну?
Я разрабатываю приложение Facebook, используя их API-интерфейс Graph. Я ранее разработал приложение, используя устаревший API REST.
Я столкнулся с проблемой в том, что я не могу получить пользовательскую страну, только их "местоположение" - это только город и государство/регион в комбинированном формате (например, "Хьюстон, Техас" ).
Как можно получить пользовательскую страну с помощью Graph API? Если это невозможно, возможно, какие бы обходные пути для этого не достигнуты?
Ответы
Ответ 1
https://api.facebook.com/method/fql.query?format=json&query=SELECT%20current_location%20FROM%20user%20WHERE%20uid=4&access_token= <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
Ответ 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/
Я надеюсь, что это поможет кому-то:)