【问题标题】:Facebook API - return friends list (PHP arrays)Facebook API - 返回好友列表(PHP 数组)
【发布时间】:2013-02-10 04:36:32
【问题描述】:

我试图在不使用 PHP SDK 的情况下使用 Facebook 应用程序返回用户的朋友列表。 我已经设法在不使用身份验证码的情况下返回用户姓名、性别等。我现在试图返回一个用户朋友的姓名列表,到目前为止我所做的只是打印数组,我似乎不能只打印名称,因为它的布局与用户姓名、性别等不同我设法通过这样做来回应:

$user->name

但是当我尝试在朋友列表中使用它时它不起作用并且根本没有回应任何东西,我只是想知道是否有人知道我是如何做到这一点的?

使用 print_r 我得到以下信息:

Array(
[0] => Array ( [name] => Friend's name [id] => x )
[1] => Array ( [name] => Friend's name [id] => x )
[2] =>....)

直到所有朋友都被列出为止。


 { "name": "Name", 
    "hometown": {
      "id": "Hometown_id", 
      "name": "Hometown"
    }, 
    "id": "Friend_id" }

上面是每个数组的结构,我认为一个潜在的问题是不是每个人都有家乡集,这可能是我收到 forEach 错误的原因?

【问题讨论】:

  • 你有适当的权限吗?
  • 是的,我正在使用 oauth_token,我可以打印整个数组,但我只想要名称
  • 你为什么不按照你在php中的正常方式访问数组呢?
  • 对不起,你什么意思?
  • 您在做什么来尝试访问这些名称?只是检查,但您使用的是 $arr[0]['name'] 而不是 $arr['name'] 或 $arr[0],对吗?

标签: php facebook facebook-graph-api


【解决方案1】:

鉴于该数组结构,很容易(在 php 中)得到你想要的。我建议阅读 arrays 上的 php 手册。

试试这样的:

foreach ($array as $inner_array) {
    echo $inner_array['name'] . "<br />";
}

除此之外,还有……

echo $your_array[0]['name'];
echo $your_array[1]['name'];

等等等等第四个..

更新:

您现在看到的不是一个数组,而是一个 javascript 对象。它被称为 JSON:Javascript Object Notation。

您需要一个特殊的解析器将其解释为一个数组:json_decode(),它随 php 大于或等于 5.2.0 一起提供。要使数组关联,您必须传递第二个参数,一个布尔值,true。否则默认为false。使用示例:

$json = '{ "name": "Name", 
    "hometown": {
      "id": "Hometown_id", 
      "name": "Hometown"
    }, 
    "id": "Friend_id" }';

$json_arr = json_decode($json,true);

foreach ($json_arr as $key => $var) {
    if (!is_array($var)) {
        if ($key == 'name') {
            echo $var . "<br />";
        }
    }
}

更新 2:

foreach ($json_arr as $key => $var) {
    if (!is_array($var)) {
        if ($key == 'name') {
            echo "Name: " . $var . "<br />";
        }
    }
    else {
        if ($key == 'hometown') {
            echo "Hometown: " . $var['name'] . "<br />";
        }
    }
}

以上应该可以满足您的需求。

【讨论】:

  • 正是我所追求的,现在刚刚试了一下,效果很好。非常感谢! :)
  • 抱歉,我刚刚意识到我需要包含一些朋友的详细信息,因此不能使用“/me/friends/”,并且不得不使用 API 中的官方 URL,该 URL 在类似的数组中返回不同的信息.我已经能够成功返回姓名,但家乡、生日等又在朋友数组中的数组中,我想知道您是否可以帮我修改您之前发布的代码以返回其他详细信息。我已经尝试过自己,但是每个错误都会得到一个,所以我认为我做错了什么?非常感谢!
  • 感谢您的回复,尽管我无法让您发布的代码正常工作。我已经在对值进行 json_decoding 以检索用户名。您发布的第一个代码段非常完美,它打印了用户朋友的简单列表,现在我要做的就是发布用户的家乡
  • 感谢您的回复,非常感谢您给我的帮助。现在它只是为每个人显示“家乡:'朋友的名字'”,而实际用户的家乡却无处可寻,是我做错了吗?我认为这很可能是公平的!
  • @thrash 没有看到阵列,我目前几乎是在黑暗中拍摄。希望我最近的更新(添加了检查)能满足您的需要。
【解决方案2】:

从 Facebook 查询特定数据的最佳方式是 FQL。查看 https://developers.facebook.com/docs/technical-guides/fql/ 并告诉我您是否正在寻找。

我提供的链接上的示例将抓取所有活跃用户的朋友。如果您使用示例作为启动器(已为您的应用填写了所有正确的信息以及有效的访问令牌),然后转到显示// run fql query 的区域并将uid2 更改为name 在下面行:

fql?q=SELECT+uid2+FROM+friend+WHERE+uid1=me()

将以下内容添加到脚本的末尾会将所有朋友的姓名填充到名为$names的数组中

$r = $fql_multiquery_obj['data'][0]['fql_result_set'];
foreach ($r as $u)
{
    $name[count($name)] = $u['name'];
}

这能帮助你做你想做的事吗?让我知道:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多