【问题标题】:Facebook iFrame app - how to find user's current city?Facebook iFrame 应用程序 - 如何找到用户的当前城市?
【发布时间】:2011-05-06 12:29:19
【问题描述】:

我正在尝试使用新的 PHP SDK 和 GRAPH API 将 an old FBML app 迁移到 iFrame,但不知道如何找到访问者所在的城市。

例如,在我自己的 Facebook 个人资料中,我同时列出了 Current CityHometown

但是当我尝试使用以下 iFrame 应用时,位置家乡并没有打印出来,而包括我的雇主和教育程度在内的其他数据被打印出来了:

<?php

include_once 'facebook.php';

$facebook = new Facebook(array(
            'appId'  => "182820975103876",
            'secret' => "XXXXXXX",
            'cookie' => true,
            ));

$session = $facebook->getSession();

if (!$session) {
    $url = $facebook->getLoginUrl();
    print("<script type='text/javascript'>top.location.href = '$url';</script>");

} else {
    try {
        $me = $facebook->api('/me');

        print('<pre>');
        print_r($me);
        print('</pre>');

    } catch (FacebookApiException $e) {
        print("Error:" . $e);
    }
}

?>

这是我自己看到的部分数据,当前位置不存在:

Array
(
    [first_name] => Alexander
    [education] => Array
        (
            [0] => Array
                (
                    [school] => Array
                        (
                            [id] => 106509962720287
                            [name] => Riga Nr. 40
                        )

                    [type] => High School
                )

            [1] => Array
                (
                    [school] => Array
                        (
                            [id] => 103130426393616
                            [name] => RWTH Aachen University
                        )

                    [year] => Array
                        (
                            [id] => 143018465715205
                            [name] => 2000
                        )

                    [type] => College
                )

        )
    [gender] => male
...........
)

问候 亚历克斯

【问题讨论】:

    标签: facebook iframe facebook-graph-api location facebook-iframe


    【解决方案1】:

    您只需要user_locationuser_hometown permissions

    所以你的登录网址应该是这样的:

    $url = $facebook->getLoginUrl(array(
        'scope' => 'user_location,user_hometown'
    ));
    

    【讨论】:

      【解决方案2】:

      这并不难,这就是您调用 fb api 时得到的结果(FB 文档中示例代码的一部分)

         "id": "220439",
         "name": "Bret Taylor",
         "first_name": "Bret",
         "last_name": "Taylor",
         "link": "http://www.facebook.com/btaylor",
         "username": "btaylor",
         "hometown": {
            "id": "108363292521622",
            "name": "Oakland, California"
         },
         "location": {
            "id": "109650795719651",
            "name": "Los Gatos, California"
         },

      要获取该信息,您首先调用 api <pre>$me = $facebook-&gt;api('/me');</pre>

      正如您在示例中看到的,家乡的名称位于“家乡”数组中。位置(当前城市)也是如此,它位于“位置”数组中。所以你现在要做的是

      $hometown = $me['hometown']['name'];
      $current_city = $me['location']['name'];

      echo '您目前居住在:'.$current_city.'但你的家乡是:'.$hometown

      希望对人有所帮助;)

      编辑:

      $access_token = $facebook->getAccessToken(); $req_id = $_GET['request_ids']; $req = $facebook->api('/me/?access_token='.$access_token); echo $req['hometown']['name'];

      【讨论】:

      • 对不起,但这无济于事,因为您已经准确地建议了我在问题中所写的内容,而家乡和位置不存在
      • 那么当前城市不存在,因为您可能无权获得它...您在使用 access_token 吗?
      • 最后再次阅读我的答案我添加了我的个人代码,该代码已更改以满足您的需求...除非您使用 access_token,否则您将无法回到家乡...忽略 $req_id = 我忘了删除它;)
      猜你喜欢
      • 1970-01-01
      • 2018-04-03
      • 2010-11-25
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多