#php #facebook #facebook-comments
#php #Facebook #facebook-комментарии
Вопрос:
Я планирую использовать плагин комментариев facebook для моего нового веб-сайта блога и хотел бы показать некоторую статистику в заголовке статьи (дата, просмотры, время комментариев и т.д.), Но я не могу отобразить количество просмотров facebook. Вот код, который у меня есть на данный момент:
<div id="fb-root"></div>
<script>
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_GB/sdk.js#xfbml=1amp;appId=277028005786031amp;version=v2.0";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
В позиции отображения
<b>Commented On:</b> <fb:comments-count href="http://example.com/"></fb:comments-count> Times
Все это показывает на странице:
Прокомментировано: Раз
Как я могу заставить его отображать фактическое количество сообщений?
Ответ №1:
Начиная с API, 2.0
для каждого запроса API требуется действительный access_token
, и из вашего кода я вижу, что вы используете 2.0
, это означает отправку конфиденциальных данных в Graph, что совсем небезопасно, если вы используете JS
Действительный access_token
-
Приложение
access_token
, комбинация идентификатора приложения и секрета в этой форме{app_id}|{app_secret}
(рекомендуется, поскольку срок его действия не истекает) -
пользователь
access_token
, выданный путем авторизации приложения (срок действия истекает через 2 часа после выдачи, через 60 дней после продления)
Решение № 1 (простое)
Переключитесь обратно на API версии v1.0, доступный до ** 30 апреля 2015
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_GB/sdk.js#xfbml=1amp;appId={app_id}amp;version=v1.0";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
Решение № 2 (предварительное)
Вы отметили PHP
, поэтому решение, которое я опубликую, предназначено для использования в будущем,
comments-count.php
<?php
header('Content-Type: application/json');
$config = array('appId' => '{Your-app-Id}',
'secret' => '{Your-app-secret}');
/** If the $_GET['href'] is set and not empty **/
if( isset($_GET['href']) amp;amp; !empty($_GET['href']) ) {
$href = $_GET['href'];
$commentsCount = getCommentsCount($href);
// check if the HREF has comments count
if ( array_key_exists('comments', $commentsCount) ) {
$comments = $commentsCount['comments'];
} else {
$comments = 0;
}
echo json_encode( array('meta' => array('code' => 200),
'id' => $commentsCount['id'],
'comments' => $comments,
'shares' => $commentsCount['shares']), JSON_PRETTY_PRINT);
} else {
/** else print the error below (JOSN encoded) **/
header('HTTP/1.1 400');
echo json_encode( array('meta' => array('code' => 400),
'message' => 'href is not provided'), JSON_PRETTY_PRINT);
// JSON_PRETTY_PRINT requires PHP 5.4 or higher, you should remove it if you have 5.3 or lower
}
function getCommentsCount($href) {
global $config;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://graph.facebook.com/v2.0/?id='. $href . 'amp;access_token=' . $config['appId'] . '|' . $config['secret']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$r = curl_exec($ch);
return json_decode($r, true);
}
comments-count.js
;(function($) {
$.fn.facebookCommentsCount = function( options ) {
var $target = this;
/** Plugin default settings **/
var settings = $.extend({
apiPath : 'fb-comments-count/comments-count.php', // Path to `comments-count.php`
zeroComments : null,
oneComment : null,
multipleComments : null
}, options);
return $target.each( function() {
var href = $(this).attr('data-href');
var $this = $(this)
$.ajax({
url: settings.apiPath,
type: 'GET',
dataType: 'json',
data: { href : href },
success: function(data) {
if (data.comments === 0) {
if(settings.zeroComments) {
$this.html(data.comments 'amp;nbsp;' settings.zeroComments);
} eles {
$this.html(data.comments);
}
} else if (data.comments === 1 ) {
if(settings.oneComment) {
$this.html( data.comments 'amp;nbsp;' settings.oneComment);
} else {
$this.html(data.comments);
}
} else {
if(settings.multipleComments) {
$this.html( data.comments 'amp;nbsp;' settings.multipleComments);
} else {
$this.html(data.comments);
}
}
},
error: function(error) {
console.log(error);
}
});
});
};
}(jQuery));
Как использовать
На вашей странице добавьте div
, span
или p
(встроенные элементы лучше, div
это блок)
<div class="fb-comments-count" data-href="{URL}">0</dvi>
<script>
$('.fb-comments-count').facebookCommentsCount();
</script>
Комментарии:
1. Спасибо, Адам. Я полностью за использование простых решений, поэтому возврат к версии v1.0 меня устраивает на год — второе решение кажется большим количеством кода только для того, чтобы вытащить несколько чисел, поэтому я, вероятно, не буду обновляться до 2.0. Еще раз спасибо