Facebook Graph API SDK v5 - 将图片发布到页面的相册
Facebook Graph API SDK v5 - Publishing a picture to a page's Album
我正在尝试使用 Facebook PHP SDK v5将图片发布到属于 Facebook 页面的相册。
我已经检查了(很多)类似的问题,但是它们都与 SDK 的早期版本有关,当时 publish_actions
仍然被允许。
我的设置:
- 我的应用程序配置正确,我能够检索我的访问令牌
- 我能够 运行 一些测试 API 没有问题的查询
- 我是此页面的管理员,我的访问令牌具有以下权限
['manage_pages','publish_pages','user_photos']
- 已使用
'fileUpload' => true
作为参数正确初始化 SDK
将图片发布到相册的代码
它基于example provided in the SDK documentation。
<?php
require_once __DIR__.'/vendor/autoload.php';
$fb = new Facebook\Facebook(['app_id' => '123456', 'app_secret' => '123456', 'default_graph_version' => 'v3.3', 'fileUpload' => true]);
$picture = 'https://www.example.com/pic.jpg';
$album_id = '123456';
$access_token = 'mytoken';
try {
$response = $fb->post('/'.$album_id.'/photos', array ('url' => $picture), $access_token);
}
catch(Facebook\Exceptions\FacebookResponseException $e) {
die('Graph returned an error: ' . $e->getMessage());
}
catch(Facebook\Exceptions\FacebookSDKException $e) {
die('Facebook SDK returned an error: ' . $e->getMessage());
}
$graphNode = $response->getGraphNode();
这是我遇到的错误
Graph returned an error: (#200) This endpoint is deprecated since the
required permission publish_actions is deprecated
确实,changes introduced in April 2018 删除了使用 publish_actions
的功能,但似乎文档尚未相应更新。
将图片发布到页面相册的新方法是什么?
非常感谢您的帮助!
在研究了几个小时的替代解决方案后,我找到了解决方法。
显然我使用的是用户访问令牌而不是页面访问令牌。
解决方案
1 - 首先,verify 如果您的令牌是 User/Page 访问令牌
2 - 如果是用户令牌,则需要请求页面访问令牌:
$user_access_token = 123456;
$page_id = 123456; // Can be retrieved via right click on your page logo + Copy link address
$response = $fb->get('/'.$page_id.'?fields=access_token', $user_access_token);
$page_access_token = json_decode($response->getBody())->access_token;
echo $page_access_token;
3 - 最后,post 使用页面访问令牌的页面上的图片
完整代码
<?php
require_once __DIR__.'/vendor/autoload.php';
$fb = new Facebook\Facebook(['app_id' => '123456', 'app_secret' => '123456', 'default_graph_version' => 'v3.3', 'fileUpload' => true]);
$picture = 'https://www.example.com/pic.jpg';
$album_id = '123456';
$user_access_token = 'mytoken';
$page_id = 123456;
try {
$response = $fb->get('/'.$page_id.'?fields=access_token', $user_access_token);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
die('Graph returned an error: ' . $e->getMessage());
} catch(Facebook\Exceptions\FacebookSDKException $e) {
die('Facebook SDK returned an error: ' . $e->getMessage());
}
$page_access_token = json_decode($response->getBody())->access_token;
try {
$response = $fb->post('/'.$album_id.'/photos', array ('url' => $picture), $page_access_token);
}
catch(Facebook\Exceptions\FacebookResponseException $e) {
die('Graph returned an error: ' . $e->getMessage());
}
catch(Facebook\Exceptions\FacebookSDKException $e) {
die('Facebook SDK returned an error: ' . $e->getMessage());
}
$graphNode = $response->getGraphNode();
希望对您有所帮助!
我正在尝试使用 Facebook PHP SDK v5将图片发布到属于 Facebook 页面的相册。
我已经检查了(很多)类似的问题,但是它们都与 SDK 的早期版本有关,当时 publish_actions
仍然被允许。
我的设置:
- 我的应用程序配置正确,我能够检索我的访问令牌
- 我能够 运行 一些测试 API 没有问题的查询
- 我是此页面的管理员,我的访问令牌具有以下权限
['manage_pages','publish_pages','user_photos']
- 已使用
'fileUpload' => true
作为参数正确初始化 SDK
将图片发布到相册的代码
它基于example provided in the SDK documentation。
<?php
require_once __DIR__.'/vendor/autoload.php';
$fb = new Facebook\Facebook(['app_id' => '123456', 'app_secret' => '123456', 'default_graph_version' => 'v3.3', 'fileUpload' => true]);
$picture = 'https://www.example.com/pic.jpg';
$album_id = '123456';
$access_token = 'mytoken';
try {
$response = $fb->post('/'.$album_id.'/photos', array ('url' => $picture), $access_token);
}
catch(Facebook\Exceptions\FacebookResponseException $e) {
die('Graph returned an error: ' . $e->getMessage());
}
catch(Facebook\Exceptions\FacebookSDKException $e) {
die('Facebook SDK returned an error: ' . $e->getMessage());
}
$graphNode = $response->getGraphNode();
这是我遇到的错误
Graph returned an error: (#200) This endpoint is deprecated since the required permission publish_actions is deprecated
确实,changes introduced in April 2018 删除了使用 publish_actions
的功能,但似乎文档尚未相应更新。
将图片发布到页面相册的新方法是什么?
非常感谢您的帮助!
在研究了几个小时的替代解决方案后,我找到了解决方法。
显然我使用的是用户访问令牌而不是页面访问令牌。
解决方案
1 - 首先,verify 如果您的令牌是 User/Page 访问令牌
2 - 如果是用户令牌,则需要请求页面访问令牌:
$user_access_token = 123456;
$page_id = 123456; // Can be retrieved via right click on your page logo + Copy link address
$response = $fb->get('/'.$page_id.'?fields=access_token', $user_access_token);
$page_access_token = json_decode($response->getBody())->access_token;
echo $page_access_token;
3 - 最后,post 使用页面访问令牌的页面上的图片
完整代码
<?php
require_once __DIR__.'/vendor/autoload.php';
$fb = new Facebook\Facebook(['app_id' => '123456', 'app_secret' => '123456', 'default_graph_version' => 'v3.3', 'fileUpload' => true]);
$picture = 'https://www.example.com/pic.jpg';
$album_id = '123456';
$user_access_token = 'mytoken';
$page_id = 123456;
try {
$response = $fb->get('/'.$page_id.'?fields=access_token', $user_access_token);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
die('Graph returned an error: ' . $e->getMessage());
} catch(Facebook\Exceptions\FacebookSDKException $e) {
die('Facebook SDK returned an error: ' . $e->getMessage());
}
$page_access_token = json_decode($response->getBody())->access_token;
try {
$response = $fb->post('/'.$album_id.'/photos', array ('url' => $picture), $page_access_token);
}
catch(Facebook\Exceptions\FacebookResponseException $e) {
die('Graph returned an error: ' . $e->getMessage());
}
catch(Facebook\Exceptions\FacebookSDKException $e) {
die('Facebook SDK returned an error: ' . $e->getMessage());
}
$graphNode = $response->getGraphNode();
希望对您有所帮助!