我正在使用documentation与spotify api进行通信以获取我的用户详细信息。 spotify api返回用户数据,然后我想将其添加到json文件中。基本上,无论从api发回的是什么,我都希望为每个用户附加到json文件。
当我print_r($api->me());
时,从api返回的数据如下所示:这基本上来自this php library。
stdClass Object ( [display_name] => Paul Flanagan
[email] => paulflanagan@gmail.com
[external_urls] => stdClass Object (
[spotify] => https://open.spotify.com/user/21aydctlhgjst3z7saj2rb4pq ) [followers] => stdClass Object (
[href] => [total] => 19 )
[href] => https://api.spotify.com/v1/users/2391231jasdasd1
[id] => 21aydctlhgjst3z7saj2rb4pq
[images] => Array ( [0] => stdClass Object (
[height] => [url] => https://scontent.xx.fbcdn.net/v/t1.0-1/p200x200/18301863_452622995075637_5517698155320169855_n.jpg?oh=9e949fafd3ee84705ea5c1fa1aa9c811&oe=59C9F63C
[width] => ) ) [type] => user [uri] => spotify:user:21aydctlhgjst3z7saj2rb4pq )
我想将此代码写入json文件
我尝试了很多方法,但由于我比php更专注于JavaScript,我正在努力正确地编写数据。我对代码的最新尝试如下:
<?php
require 'vendor/autoload.php';
$session = new SpotifyWebAPI\Session(
'KEY1',
'KEY2',
'CALLBACK_URL'
);
$api = new SpotifyWebAPI\SpotifyWebAPI();
if (isset($_GET['code'])) {
$session->requestAccessToken($_GET['code']);
$api->setAccessToken($session->getAccessToken());
$file = "users.json";
$json = json_decode(file_get_contents($file), true);
$file = fopen($file,'w+');
fwrite($file, $api->me());
fclose($file);
print_r($api->me());
} else {
$options = [
'scope' => [
'user-read-email',
],
];
header('Location: ' . $session->getAuthorizeUrl($options)$
die();
}
?>
答案 0 :(得分:1)
当$api->me()
返回object
时 - 您无法直接将其写入文件。您应该将对象转换为string
。简单的方法是json_encode
:
$file = "users.json";
$json = json_decode(file_get_contents($file), true);
$file = fopen($file,'w+');
fwrite($file, json_encode($api->me()));
fclose($file);
下一个问题 - 覆盖数据。当您使用w+
打开文件时 - 您的文件被截断为0长度。
这里的解决方案取决于您以前的数据需要什么。如果你想重写一些数据 - 我认为目前的行为已经成功了。
如果要将数据附加到文件,则应在打开文件时使用another mode,例如a+
。但在这种情况下,文件内容将不正确json,因为您写入文件不是单个json字符串,而是几个字符串,不正确的json。因此,您需要找到合适的解决方案。
<强>更新强>
根据文件名,我想你将用户存储在其中。所以,我认为有一个用户列表,用json编码。因此,一个简短的解决方案可以是:
$file = "users.json";
$json = json_decode(file_get_contents($file), true);
// Now $json stores list of you current users. I suppose it's a simple array of arrays
// This is data for a new user
$new_user = $api->me();
// as data `$new_user` is object, I think you need to convert it to array
// this can be done as:
$new_user = json_decode(json_encode($new_user), true);
// now, add new user to existsing array
$json[] = $new_user;
$file = fopen($file,'w+');
// now we can encode `$json` back and write it to a file
fwrite($file, json_encode($json));
fclose($file);