Я прочитал много других тем по этому вопросу, но я не нашел ничего полезного.
Что я хочу сделать
Когда я добавляю статью на свой сайт, я бы хотел опубликовать обновление в Twitter и Facebook. Он работает для Twitter, но у меня проблема с Facebook.
Я загрузил facebook.php, который использует OAuth.
Моя проблема
Когда я публикую простой текст, он отлично работает, он отображается как размещен на странице по мере необходимости. Но когда я хочу опубликовать текст с миниатюрой, ссылкой, надписью и описанием, она будет размещена так, как будто моя личная учетная запись разместила это обновление на стене моей страницы.
Вот мой код для простого текста (я попросил acces_token выше):
$post = array('access_token' => $token, 'message' => 'My message'); try{ $res = $facebook->api('/mypage/feed','POST',$post); print_r($res); } catch (Exception $e){ echo $e->getMessage(); }
Вот неправильный код:
$post = array('access_token' => $token, 'message' => 'My message', 'picture' => 'http://img.ruphp.com/post/picture.jpg', 'link' => 'http://www.website.com', 'caption' => 'test caption', 'description' => 'test description', 'from' => array('name' =>'Page name', 'id' => 'page id'), ); try{ $res = $facebook->api('/mypage/feed','POST',$post); print_r($res); } catch (Exception $e){ echo $e->getMessage(); }
API Facebook плохо документирован, но я искал везде, чтобы не задавать вам этот вопрос. Но я не нашел никакого решения.
Большое спасибо за помощь.
Вениамин
Надеясь, что у вас есть следующие разрешения (publis_stream, manage_pages, offline_access) и access_token, попробуйте следующий код
<?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 supposed to be page admin $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 , 'name' => 'My Wall Post Header/Title Here', 'caption' => 'Small caption here', 'link' => 'http://www.mywebsite.org', 'description' => 'Wall Post Details Here', 'picture' => "http://www.mywebsite.org/images/logo.gif", ); $post_id = $facebook->api("/$page_id/feed","post",$args); } } 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')); } ?>
Вам нужно реализовать некоторые og:tags
Open Graph og:tags
на вашей странице, чтобы Facebook знал, какие изображения, описания и названия нужно брать.
https://developers.facebook.com/docs/opengraphprotocol/
Они выглядят примерно так:
<meta property="og:title" content="The Rock"/> <meta property="og:type" content="movie"/> <meta property="og:url" content="http://www.imdb.com/title/tt0117500/"/> <meta property="og:image" content="http://ia.media-imdb.com/rock.jpg"/> <meta property="og:site_name" content="IMDb"/> <meta property="fb:admins" content="USER_ID"/> <meta property="og:description" content="A group of US Marines, under command of a renegade general, take over Alcatraz and threaten San Francisco Bay with biological weapons."/>
После того, как вы внедрили необходимые метатеги, вы можете протестировать свою работу, используя удобный отладчик URL-адресов Facebook . Он расскажет вам, есть ли проблемы, какие именно они есть, и как их исправлять.
Вероятно, это будет не так, убедитесь, что вы не используете URL-адреса изображений, которые разрешают внутреннее имя домена (т. Е. Путем обновления вашего файла локальных хостов ). Я обнаружил, что после большого тестирования (хотя и с использованием вызова FB.UI в JS), если имя домена указывает внутри, даже если оно также доступно извне (это бит, который меня бросил), вы можете получить ошибки. Это только казалось важным для аргумента Picture.
Удачи!