Ответ 1
Насколько мне известно, все, что вам нужно сделать, это указать uid
(то есть идентификатор страницы) при вызове stream.publish
ИЗМЕНИТЬ
Посмотрите impersonation
Я установил script, который позволяет пользователям публиковать сообщения на странице поклонников на Facebook. Все это работает, но есть одна небольшая проблема.
Проблема:
Когда сообщение добавляется к фиду страницы, он отображает личную учетную запись пользователя. Я бы предпочел, чтобы он показывал учетную запись страницы (например, когда вы являетесь администратором страницы, она говорит, что она появилась на этой странице). Учетная запись, которую я отправляю, имеет права администратора на странице, но она по-прежнему отображается как личная запись.
HTTP POST
$url = "https://graph.facebook.com/PAGE_ID/feed";
$fields = array (
'message' => urlencode('Hello World'),
'access_token' => urlencode($access_token)
);
$fields_string = "";
foreach ($fields as $key => $value):
$fields_string .= $key . '=' . $value . '&';
endforeach;
rtrim($fields_string, '&');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
$result = curl_exec($ch);
curl_close($ch);
Насколько мне известно, все, что вам нужно сделать, это указать uid
(то есть идентификатор страницы) при вызове stream.publish
Посмотрите impersonation
Чтобы опубликовать страницу не как Пользователь, вам необходимо следующее:
Разрешения:
publish_stream
manage_pages
Требования:
access_token
(можно получить, так как мы получили требуемые разрешения выше)access_token
)access_token
с долговременным сроком действия одного из администраторов, если вы хотите сделать это в автономном режиме (из фона script)Пример PHP-SDK:
<?php
/**
* Edit the Page ID you are targeting
* And the message for your fans!
*/
$page_id = 'PAGE_ID';
$message = "I'm a Page!";
/**
* This code is just a snippet of the example.PHP скрипт
* from the PHP-SDK <http://github.com/facebook/php-sdk/blob/master/examples/example.php>
*/
require '../src/facebook.php';
// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
'appId' => 'app_id',
'secret' => 'app_secret',
));
// Get User ID
$user = $facebook->getUser();
if ($user) {
try {
$page_info = $facebook->api("/$page_id?fields=access_token");
if( !empty($page_info['access_token']) ) {
$args = array(
'access_token' => $page_info['access_token'],
'message' => $message
);
$post_id = $facebook->api("/$page_id/feed","post",$args);
} else {
$permissions = $facebook->api("/me/permissions");
if( !array_key_exists('publish_stream', $permissions['data'][0]) ||
!array_key_exists('manage_pages', $permissions['data'][0])) {
// We don't have one of the permissions
// Alert the admin or ask for the permission!
header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream, manage_pages")) );
}
}
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
// Login or logout url will be needed depending on current user state.
if ($user) {
$logoutUrl = $facebook->getLogoutUrl();
} else {
$loginUrl = $facebook->getLoginUrl(array('scope'=>'manage_pages,publish_stream'));
}
// ... rest of your code
?>
Здесь подключенный $user
должен быть администратором.
Результат:
Больше в моем tutorial
Ответ заключается в получении разрешения "manage_pages" на кнопке FB:login
, например:
<fb:login-button perms="publish_stream,manage_pages" autologoutlink="true"></fb:login-button>`
Когда вы получаете эти разрешения, вы можете получить структурированный список на всех страницах, в которые входит зарегистрированный пользователь. URL для вызова:
https://graph.facebook.com/me/accounts?access_token=YourAccessToken
Я ненавижу документацию в Facebook, но вот страница с некоторой информацией об этом: https://developers.facebook.com/docs/reference/api/ См. Разделы "Авторизация" и "Вход в страницу", в частности, на этой странице.
Отличным ресурсом для объединения всех этих продуктов (для разработчиков Coldfusion) является Jeff Gladnick CFC на RIA Forge: http://facebookgraph.riaforge.org/
Я добавил следующий код UDF в Jeff CFC, если вы хотите его использовать:
<cffunction name="getPageLogins" access="public" output="true" returntype="any" hint="gets a user associated pages they manage so they can log in as that page and post">
<cfset var profile = "" />
<cfhttp url="https://graph.facebook.com/me/accounts?access_token=#getAccessToken()#" result="accounts" />
<cfif IsJSON(accounts.filecontent)>
<cfreturn DeserializeJSON(accounts.filecontent) />
<cfelse>
<cfreturn 0/>
</cfif>
</cffunction>
То, что это возвращает, - это структура всех страниц, с которыми зарегистрированный пользователь является администратором. Он возвращает страницу NAME, ID, ACCESS_TOKEN и CATEGORY (не требуется в этом контексте).
Итак, ОЧЕНЬ ВАЖНО: Идентификатор - это то, что вы передаете, чтобы установить, какую страницу вы отправляете TO, а ACCESS_TOKEN - это то, что вы передаете, чтобы установить, кто вы POSTING AS.
После того, как у вас есть список страниц, вы можете проанализировать данные, чтобы получить трехэлементный массив:
ID - ACCESS_TOKEN - NAME
Будьте осторожны, потому что Facebook ACCESS_TOKEN использует некоторые странные символы. Дайте мне знать, если вам нужна дополнительная помощь.
API-интерфейс Graph ожидает, что параметр page_id
(Идентификатор объекта страницы вентилятора) будет передан как аргумент вызова API для получения событий, размещенных на стене фан-страницы. Не упоминается нигде в официальной документации API Graph, но она работает. Я успешно протестировал его с официальным PHP SDK v3.0.1
Требуемые разрешения приложений будут create_event и manage_pages
Пример будет выглядеть примерно так:
//Facebook/Fan Page Id
$page_id = '18020xxxxxxxxxx';
//Event Start Time
$next_month = time() + (30 * 24 * 60 * 60);
//Event Paramaeters
$params = array(
'page_id' => $page_id, // **IMPORTANT**
'name' => 'Test Event Name',
'description' => 'This is the test event description. Check out the link for more info: http://yoursite.com',
'location' => 'Kottayam, Kerala, India',
'start_time' => $next_month
);
$create_event = $facebook->api("/$page_id/events", "post", $params);
Поскольку это единственная релевантная публикация в результатах Google для "графика facebook не будет размещаться на странице как страница", я хочу отметить решение, которое я нашел. Вам нужен токен доступа с разрешениями manage_pages. Затем вызовите
https://graph.facebook.com/<user_id>/accounts?access_token=<access_token>
Здесь перечислены все страницы, к которым пользователь имеет доступ, и предоставит токены доступа для каждого. Затем вы можете использовать эти токены для публикации в качестве страницы.
Вы должны получить access_tokens для страниц и приложений, которые пользователь администрирует.
Ключи доступа можно запросить, вызвав /{user_id}/accounts через API-интерфейс Graph.
Подробнее:
https://developers.facebook.com/docs/facebook-login/permissions/v2.0 → Ссылка → Страницы
Вот как я это делаю с PHP SDK 4.0 и Graph API 2.3:
/**
* Posts a message, link or link+message on the page feed as a page entity
*
* @param FacebookSession $session (containing a page admin user access_token)
* @param string $pageId
* @param string $message - optional
* @param string $link - optional
*
* @return GraphObject
*/
function postPageAsPage( $session, $pageId, $message = '', $link = '' ){
// get the page token to make the post request
$pageToken = ( new FacebookRequest(
$session,
'GET',
"/$pageId" . "?fields=access_token"
))->execute()->getGraphObject();
return ( new FacebookRequest(
$session,
'POST',
"/$pageId/feed",
array(
'access_token' => $pageToken->getProperty( 'access_token' ),
'message' => $message,
'link' => $link,
)
))->execute()->getGraphObject();
}