2011-02-28 108 views
19

我正在開發使用他們的圖形API一個Facebook應用程序。我以前使用棄用的REST API開發了一個應用程序。Facebook Graph API - 如何獲取用戶國家?

我遇到了一個問題,我無法檢索用戶的國家,只有他們的「位置」 - 這只是城市和州/地區的組合格式(如'德克薩斯州休斯頓') 。

怎麼可能使用圖形API來獲取用戶的國家?如果這不是直接可能的話,那麼可以通過哪些解決方法來實現呢?

回答

23

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

會給你:

<?xml version="1.0" encoding="UTF-8"?> 
<fql_query_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" list="true"> 
    <user> 
    <current_location> 
     <city>Palo Alto</city> 
     <state>California</state> 
     <country>United States</country> 
     <zip/> 
     <id>104022926303756</id> 
     <name>Palo Alto, California</name> 
    </current_location> 
    </user> 
</fql_query_response> 

,我可以看到這是對FB穩定的唯一的事情就是FQL

使用這裏描述得到你需要的任何信息http://developers.facebook.com/docs/reference/fql/表 - 圖api還不好

+1

只是一個小小的貢獻:這裏是一個關於如何使用Graph API發佈FQL查詢的官方帖子(它也表示FQL不會被棄用;這是一個常見的誤解):https://developers.facebook.com/blog/post/579/ – YOMorales 2012-02-29 22:48:48

+0

雖然位置信息對我測試過的用戶是公開的,包括MZ的ID,它是4,但我的ID不是我的ID,而是返回current_location爲''。幫幫我。謝謝! – San 2013-06-29 02:51:11

1

這是一個很好的問題。

的問題是,Facebook的在任何應用程序運行都必須通過Facebook的服務器 - FB代理也正因爲如此,你獲得的IP是不是遊客,但Facebook的服務器,而不是它是沒有用的。

我還沒有看到這方面的解決方案,但除了從用戶的個人資料中獲取用戶的國家,這個用戶的國家只有在用戶公開或授權許可的情況下才有可能。

這是非常有用的鏈接,你可能想看看有太多:

+0

謝謝你的信息Sarfraz。我發現令人難以置信的是,Facebook沒有在Graph API中提供相應的信息 - 他們正在有效地鼓勵用戶繼續使用退休的REST API。尤其令人沮喪的是,國家是如此基本和無害的信息。您是否有鏈接通過用戶的公開個人資料直接訪問該國家的任何信息? – BrynJ 2011-02-28 15:24:55

+0

@BrynJ:我可以找到這些鏈接:http://stackoverflow.com/questions/2723038/facebook-graph-api-user-gender和http://stackoverflow.com/questions/4609781/facebook-api-can- i-get-detailed-info-about-users-location – Sarfraz 2011-02-28 15:32:40

7

一個解決方案,我發現,這僅僅是一個解決方法,就是使用GeoNames的API - 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每天。

+0

+1這是個好消息:) – Sarfraz 2011-02-28 17:10:37

+0

我已經爲我的答案添加了更正 - 每小時2000個請求或每天30,000個請求 - 還添加了一個參數這限制了與城市/城鎮/村莊的匹配。 – BrynJ 2011-02-28 20:21:58

6

使用PHP SDK:

需要 'facebook.php';

$ = Facebook的新 的Facebook(陣列( 'APPID'=> 'APPID', '祕密'=> 'APPSECRET',
'的Cookie'=>真,));

然後索要簽名的請求:

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

現在$國家有一個字符串,如「我們」的美國和「英國」的英國等。

+2

想要補充一點,英國似乎是「gb」而不是「英國」。 – Ezra 2012-04-20 09:55:22

0

iframe的應用程序,那麼IP不會被FB服務器隱藏的,這意味着你可以做IP地址查詢

http://phpweby.com/software/ip2country

的劇本有一些車的我,但做的工作。

-1

根據Facebook的documentation,你可以得到兩個字母ISO 3166-1國家代碼來自用戶的locale

Facebook語言環境分別遵循ISO語言和國家代碼, 由下劃線連接起來。基本格式是''ll_CC'',其中 'll''是一個雙字母語言代碼,'CC'是兩個字母的國家代碼 。例如,'en_US'代表美國英語。

例FQL:

SELECT locale FROM user WHERE uid = me() 

響應:

{ 
    "data": [ 
    { 
     "locale": "en_US" 
    } 
    ] 
} 
+4

此信息可能與它們與其個人資料相關聯的位置信息不同,並且是兩個不同的個人資料設置。 – Keith 2013-05-10 18:29:19

+3

同意@Keith。我住在德國,但我的地區是en_US--就因爲我選了它! – BlaM 2013-07-26 15:51:26

+0

很多南美國家都有相同的語言環境es_LA – Robertiano 2014-06-13 09:38:30

0

您可以通過國家使用FQL查詢看到的追隨者的壽命號碼(由喜歡到你的FB頁)。使用標記化的會話值設置JSON查詢,並通過PHP通過您所針對的頁面的object_ID和生命週期發送FQL查詢。選擇度量標準,並將度量標準設置爲page_fans_country - 並將數據轉儲爲CSV文件。您應該按照國家/地區代碼(多行)獲取總生命追隨者列表(按贊)。設置數據透視表以獲取跨多頁數據的聚合索引,並按國家/地區代碼進行排名。下面是FQL查詢的示例:

SELECT metric,value FROM insight WHERE object_id = [您的頁面ID出現在這裏] AND metric ='page_fans_country'AND end_time = end_time_date('2013-04-28')AND period = period (「終身」)

0

答案張貼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/

我希望這會幫助別人:)

1

你應該嘗試這樣的:?

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

使用圖形API /我場=家鄉 它會回報你如 「布拉格,捷克共和國」 我相信你可以通過針爆炸字符串','最後一個元素應該是國家

相關問題