0

如何使用 PHP 在 MySQL 中存储 Facebook 用户的好友列表?

我可以使用下面的 PHP 代码获取并打印用户的好友列表吗?

//get friends list
$friends_list = file_get_contents('https://graph.facebook.com/me/friends?access_token=' . $atoken );

$friends_list_array  = json_decode($friends_list,true); 

//convert so that store in mysql 
$my_friends = implode("," , $friends_list_array['data']);
    echo "</br> my friends" . $my_friends;

//result my friendsArray,Array,Array,Array,Array,Array,Array,Array.....

如何在 MySQL 中存储好友列表?

4

3 回答 3

3

friends连接将返回朋友的nameid封装在一个data数组中。因此,您需要在数组中向下走一步并在之前收集 id implode

$friends_list = file_get_contents('https://graph.facebook.com/me/friends?access_token=' . $atoken );
$friends_list_array  = json_decode($friends_list,true);
$arr= $friends_list_array['data'];
$friend_ids_arr = array();
foreach($arr as $friend) {
    $friend_ids_arr[] = $friend['id'];
}
$friend_ids = implode("," , $friend_ids_arr);
echo $friend_ids; // output: id1,id2,id3...etc
于 2012-05-27T17:05:50.670 回答
0

从 a 开始,var_dump($friends_list_array)这样您就可以看到您实际使用的是什么。然后编写一个循环,获取您想要的相关数据并将其插入数据库。

类似于以下内容:

get the data
decode the data
create an empty array "arr"
foreach data as row
    do something with row, output should be something like
    "(123, 'John Smith', .....)"
    add this value to "arr"
implode "arr" with ","
add the start of the query ("insert into... ...values")
run the query.

但是,这可能最好避免。人们的朋友一直在变化,除非他们同意,否则他们可能不希望您存储他们的数据。

于 2012-05-27T15:15:39.093 回答
0

试试下面的。我没有测试过下面的。

$sql_string = "insert into friends_table(friend_id,friend_name) values";
$insertValues = array();
$friends_list_array = json_decode(....)['data'];
foreach($friends_list_array as $friends){
    $insertValues[] = "({$friend['id']}, {$friend['name']})";
}
if (mysql_query($sql_string . implode(",", $insertValues) . ";")){
    //added all the data..
}else{
    //some error..
} 

PS:Kolink 指出的问题非常有道理。您正在做的事情可能还有其他出路。


更新

如果您需要将朋友的所有 id 存储在单个字段中(这实际上是一个坏主意,请参见下文),那么您必须使用 JSON 序列化朋友列表数据(可能是),并将其存储为细绳。

$friends_list_array = json_decode(....)['data'];
$friends_id = array_map(function($friend){ return $friend['id'];},$friends_list_array);
$friends_list_json = json_encode($friends_id);
if (mysql_query("insert into friends_table(user, friends) values ('$curUserId','$friends_list_json';")){
    //added all the data..
}else{
    //some error..
} 

将序列化数据存储在单个字段中实际上是一个坏主意,除非您一次访问/修改整个列表。更好的选择是跨行传播数据。

于 2012-05-27T15:25:20.213 回答