2011-02-01 3 views
0

Я хочу обновить статус FAN-PAGE с помощью PHP с помощью графика Facebook api. google говорит: не работает.FACEBOOK GRAPH/rest api: как подключить мой СОБСТВЕННЫЙ ПОЛЬЗОВАТЕЛЬ, чтобы обновить мое СОСТОЯНИЕ с помощью PHP

Теперь я хочу обновить свой собственный пользовательский статус с помощью PHP. Моя главная проблема заключается в том, как подключить мой собственный пользователь к графику api (с PHP), без использования браузера и без смешных обходных решений PHP.

+0

«я только хотел обновить ** статус FAN-PAGE **» против «, чтобы обновить * * мой СТАТУС ** «да? – zerkms

+0

У меня есть главная страница facebook (пользователь) и собственная страница-фан-сайт, в учетной записи пользователя – alex

+0

@alex: так? на чью страницу вы хотите опубликовать? – zerkms

ответ

1

В обоих случаях вам нужно получить publish_stream разрешения http://developers.facebook.com/docs/authentication/permissions

Это может быть сделано с FB.login()

Дополнительная информация: http://developers.facebook.com/docs/authentication

После этого вы можете просто обновить статус с графиком апи сообщение: http://developers.facebook.com/docs/reference/api/post

+0

и логин с FB.login неограниченно действителен? – alex

+0

@alex: вы прочитали ссылки, которые я дал? 'publish_stream \t Позволяет вашему приложению публиковать контент, комментарии и пожелания в потоке пользователя и потоках друзей пользователя. С помощью этого разрешения вы можете публиковать контент в фиде пользователя в любое время без необходимости использования offline_access. Однако учтите, что Facebook рекомендует пользовательскую модель совместного использования. «Разрешение неограничено, токены - короткие. Но вы всегда можете получить новое. – zerkms

+0

«Но вы всегда можете получить новое» - как это сделать с php? – alex

1

Основная проблема заключается в том, как войти в систему самостоятельно пользователь на график api (с php), без браузера и без смешные обходные пути PHP.

Там нет никакого способа для вас действовать от имени пользователя (даже ваш собственный пользовательский), не взаимодействуя с ним через браузер, по крайней мере один раз, чтобы получить offline_access.

Как получить разрешение offline_access и как его использовать оттуда, объясняется в этом answer.

EDIT:
Прочтите комментарии! спасибо @zerkms!

+0

Есть способ. Это в моем ответе. «Вы все еще нуждаетесь в публикации publish_stream для публикации на стене, даже с помощью offline_access», это просто неправильно. Я использую 'publish_stream' ** без **' offline_access'. – zerkms

+0

@zerkms: пожалуйста, прочитайте вопрос и всю дискуссию о том, что ответ. Пользователь ** не ** хочет повторно просить пользователя войти в систему, чтобы публиковать от его имени каждый раз, вот почему вы ** нуждаетесь * * 'offline_access' для этого. И я думаю, это и так, потому что он не хочет использовать браузер! – ifaour

+0

@ifaour: да, я это знаю. Но для публикации ** без ** браузера и любого пользовательского взаимодействия вам не нужно 'offline_access'. Мои приложения работают только с разрешенным «publish_stream». Что я пропустил и что я делаю неправильно? ;-)) – zerkms

1

Вам нужно несколько вещей, чтобы обновить свой профиль facebook или кормить страницы: приложение facebook (client_id, client_secret), profile_id и access_token (publish_stream, manage_pages, разрешений offline_access)

Вам нужен offline_access, потому что если нет, то токен доступа истечет. Если вы прочитали, что вам не нужен offline_access, если у вас уже есть параметр publish_stream, они просто означали, что вам это не нужно всегда.

Чтобы опубликовать сообщение легко:

$data = array(
    'access_token' => $access_token, 
    'message' => 'status message', 
    ); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch, CURLOPT_URL, "https://graph.facebook.com/{$profile_id}/feed"); 

Теперь, как получить profile_id и access_token, вы можете использовать мое приложение post panda, или создать свой собственный сценарий. Я включу его здесь:

# arvin castro 
# http://codecri.me/ 
# January 16, 2011 

$client_id  = ''; # application id 
$client_secret = ''; # application secret 
$callbackURL = 'http://'; # the URL of this script 
$extendedPermissions = 'publish_stream,manage_pages,offline_access'; 

session_name('facebookoauth'); 
session_start(); 

if(isset($_GET['logout']) and $_SESSION['loggedin']) { 
    $_SESSION = array(); 
    session_destroy(); 
} 

if(isset($_GET['signin'])) { 

    # STEP 1: Redirect user to Facebook, to grant permission for our application 
    $url = 'https://graph.facebook.com/oauth/authorize?' . xhttp::toQueryString(array(
     'client_id' => $client_id, 
     'redirect_uri' => $callbackURL, 
     'scope'  => $extendedPermissions, 
    )); 
    header("Location: $url", 303); 
    die(); 
} 

if(isset($_GET['code'])) { 

    # STEP 2: Exchange the code that we have for an access token 
    $data = array(); 
    $data['get'] = array(
     'client_id'  => $client_id, 
     'client_secret' => $client_secret, 
     'code'  => $_GET['code'], 
     'redirect_uri' => $callbackURL, 
     ); 

    $response = xhttp::fetch('https://graph.facebook.com/oauth/access_token', $data); 

    if($response['successful']) { 

     $var = xhttp::toQueryArray($response['body']); 
     $_SESSION['access_token'] = $var['access_token']; 
     $_SESSION['loggedin']  = true; 

    } else { 
     print_r($response['body']); 
    } 
} 

if($_SESSION['loggedin']) { 
    // Get Profile ID 
    $data = array(); 
    $data['get'] = array(
      'access_token' => $_SESSION['access_token'], 
      'fields' => 'id,name,accounts', 
      ); 
    $response = xhttp::fetch('https://graph.facebook.com/me', $data); 
    echo '<pre>'; 
    print_r(json_decode($response['body'], true)); 
    echo '</pre>'; 

} else { 
    echo '<a href="?signin">Sign in with Facebook</a>'; 
} 

?> 

Я использую мой Curl класс-обертку, xhttp

+0

Или вы можете просто отправить по почте ('[email protected] ',' сообщение статуса ',' '); – Arvin