Facebook Graph Api - размещение на фан-странице в качестве администратора - PullRequest
17 голосов
/ 02 сентября 2010

Я установил скрипт, который позволяет пользователям публиковать сообщения на фан-странице в 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);

Ответы [ 7 ]

17 голосов
/ 04 октября 2011

Чтобы опубликовать как Страница , а не как Пользователь , вам необходимо следующее:
Разрешения:

  • publish_stream
  • manage_pages

Требования:

  • Идентификатор страницы и access_token (можно получить, так как мы получилитребуемые разрешения выше)
  • Текущий пользователь, чтобы быть администратором (чтобы иметь возможность получить access_token)
  • access_token с долгоживущим сроком действия одного из администраторов, если вы хотите сделать это в автономном режиме (из фонового скрипта)

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 script
 * 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 должен быть администратором.

Результат:
enter image description here

Больше в моем учебнике

9 голосов
/ 02 сентября 2010

Насколько я знаю, все, что вам нужно сделать, это указать uid (то есть идентификатор страницы) при вызове stream.publish

РЕДАКТИРОВАТЬ

Посмотрите на олицетворение

1 голос
/ 12 июня 2015

Вот как я это делаю с 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();	
}
1 голос
/ 15 мая 2014

Вы должны получить access_tokens для страниц и приложений, которые администрирует пользователь.

Токены доступа можно запросить, вызвав / {user_id} / account черезAPI API.

Подробнее:

https://developers.facebook.com/docs/facebook-login/permissions/v2.0 -> Справка -> Страницы

1 голос
/ 04 октября 2011

Поскольку в результатах поиска Google есть единственная релевантная запись для "График facebook не будет публиковать на странице как на странице", я хочу отметить решение, которое я нашел.Вам нужен токен доступа с полномочиями manage_pages.Затем позвоните

https://graph.facebook.com/<user_id>/accounts?access_token=<access_token>

. Здесь будут перечислены все страницы, к которым у пользователя есть доступ, и будут предоставлены маркеры доступа для каждой из них.Затем вы можете использовать эти токены для публикации на странице.

1 голос
/ 12 июня 2011

Graph API ожидает, что параметр page_id (идентификатор объекта страницы поклонника) будет передан в качестве аргумента вызовам API, чтобы получить события, размещенные на стене фан-страницы. Не упоминается нигде в официальной документации Graph API, но это работает. Я успешно протестировал его с Официальным 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);
1 голос
/ 22 апреля 2011

Ответ заключается в получении разрешения «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) является CFC Джеффа Гладника в RIA Forge: http://facebookgraph.riaforge.org/

Я добавил следующееUDF для CFC Джеффа, если вы хотите его использовать:

<cffunction name="getPageLogins" access="public" output="true" returntype="any" hint="gets a user's 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 (не требуется в этом контексте).

Итак, ОЧЕНЬ ВАЖНО: Идентификатор - это то, что вы передаете, чтобы указать, какую страницу вы публикуете.и ACCESS_TOKEN - это то, что вы передаете, чтобы установить, кто вы POSTING AS.

Получив список страниц, вы можете проанализировать данные, чтобы получить массив из трех элементов:

ID - ACCESS_TOKEN - ИМЯ

Будьте осторожны, потому что ACCESS_TOKEN Facebook использует некоторые странные символы.Дайте мне знать, если вам понадобится дополнительная помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...