Показывать количество комментариев Facebook в блоге (не WordPress)

#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>
  

GitHub

ДЕМОНСТРАЦИЯ

Комментарии:

1. Спасибо, Адам. Я полностью за использование простых решений, поэтому возврат к версии v1.0 меня устраивает на год — второе решение кажется большим количеством кода только для того, чтобы вытащить несколько чисел, поэтому я, вероятно, не буду обновляться до 2.0. Еще раз спасибо