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

时间:2012-05-27 15:08:17

标签: php mysql arrays facebook facebook-graph-api

如何使用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中存储朋友列表?

3 个答案:

答案 0 :(得分:3)

friends连接将返回封装在name数组中的朋友的iddata。因此,您需要向下一步,然后在implode之前收集ID:

$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

答案 1 :(得分:0)

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.

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

答案 2 :(得分: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存储在字段中(这实际上是一个坏主意,请参见下文),那么您必须序列化friends-list-data(可能be)使用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..
} 

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