API Поделиться счет Facebook График устарел? - PullRequest
1 голос
/ 19 апреля 2019

С сегодняшнего дня, когда я пытаюсь получить количество акций, ответом является: поле share не рекомендуется для версий v2.9 и выше.

Пример с: https://graph.facebook.com/?id=https://stackoverflow.com&fields=share

Без & fields = share отображается содержимое json, но без значения общего ресурса.

Мне нужно получить общий счет Facebook из URL.

Ответы [ 4 ]

9 голосов
/ 19 апреля 2019

API действительно изменился.

Должно быть так.

https://graph.facebook.com/?id=https://stackoverflow.com&fields=engagement&access_token=user-access-token

Вам нужен токен доступа.Если у вас есть Facebook, перейдите на https://developers.facebook.com/ и создайте приложение.

Graph API Explorer

Затем нажмите «Graph API Explorer».

Получить токен

и «Получить токен» (Get App Token).Вот и все.

Если вы используете JavaScript для подсчета, это будет что-то вроде этого.

// split('#')[0] : Remove hash params from URL
const url = encodeURIComponent( window.location.href.split('#')[0] );

$.ajax( {
    url : '//graph.facebook.com/?id=' + url + '&fields=engagement&access_token=user-access-token',
    dataType : 'jsonp',
    timeout: 5000,
    success : function( obj ) {
        let count = 0;

        if ( typeof obj.engagement.reaction_count !== 'undefined' ) {
            count = obj.engagement.reaction_count;
        }
        // do something with 'count'
    },
    error : function() {
        // do something
    }
} );

Существуют и другие типы подсчета, такие как comment_count и share_count.

См. https://developers.facebook.com/docs/graph-api/reference/v3.2/url

Есть ли способ получить счет без отправки токена доступа?

Я хочу знать, что сам LOL


ОБНОВЛЕНИЕ:

Спасибо Антону Лукину.

Да.Я не должен показывать токен доступа.Это должно быть скрыто.Я чувствую себя очень глупо.

Так что теперь быстрый ответ.Это действительно работает без токена!

Мой окончательный (надеюсь, окончательный) ответ будет таким:

// split('#')[0] : Remove hash params from URL
const url = encodeURIComponent( window.location.href.split('#')[0] );

$.ajax( {
    url: '//graph.facebook.com/?id=' + url + '&fields=og_object{engagement}',
    dataType : 'jsonp',
    timeout: 5000,
    success : function( obj ) {
        let count = 0;

        try {
            count = obj.og_object.engagement.count
        } catch (e) {
            console.log(e)
        }
        // do something with 'count'
    },
    error : function() {
        // do something
    }
} );

Один из моментов здесь заключается в том, что когда никто никогда не разделял целевую страницу,'og_object.engagement' даже не определено.

Я думал, что получу 0 в качестве возвращаемого значения.Но это не так.

Итак, давайте воспользуемся try-catch.

Теперь моя единственная проблема - это ограничения API.Если ваш сайт получает много просмотров страниц, эта обновленная версия может не работать ..

3 голосов
/ 20 апреля 2019

Поскольку вы не можете отобразить свой токен доступа на внешнем интерфейсе, я предлагаю вам прокси-запросы с nginx, скрывая ваш access_token на вашем сервере.

  1. Вам нужен токен доступа,Перейдите к https://developers.facebook.com/ и создайте приложение.

  2. Перейдите к Обозреватель графиков и скопируйте токен.Чтобы получить постоянный токен, следуйте этому короткому руководству

  3. Добавьте пользовательское правило в конфигурацию nginx

http {
    ...

    # Optional: set facebook cache zone  
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=facebook:100m inactive=60m;

    ...
}

server {
    server_name example.org;
    ... 

    location /facebook {
        # Optional: don't log requests
        access_log off;
        log_not_found off;

        # Allow get shares only for single domain (remove condition to allow all domains)
        if ( $arg_id ~ "^https://example.org/" ) {
            set $args"${args}&access_token=your_access_token_here";
        }

        # Set dns resolver address (you can change it with any dns server)
        resolver 1.1.1.1;

        proxy_pass https://graph.facebook.com?$args;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # Optional: add cache for 30 minutes
        proxy_ignore_headers Expires;
        proxy_ignore_headers Cache-Control;

        proxy_cache facebook;
        proxy_cache_valid any 30m;
        proxy_cache_key $host$uri$is_args$arg_id;
    }

    ...
}
Теперь вы можете сделать ответ, заменив graph.facebook.com вашим пользовательским доменом.

До :

https://graph.facebook.com/?fields=engagement&callback=FB.Share&id=https://example.org/&access_token=your_access_token

После :

https://example.org/facebook?fields=engagement&callback=FB.Share&id=https://example.org/

Обратите внимание на ограничения API Facebook.Если у вас большое количество запросов, вы можете попробовать использовать page token .Для каждого пользователя на вашей странице вы можете сделать 4800 запросов на график API в день.
2 голосов
/ 10 мая 2019

Если вы не хотите использовать токен доступа или решение прокси nginx, см. https://stackoverflow.com/a/45796935/2424880:

Вы можете использовать запрос

https://graph.facebook.com?id=<your-url>&fields=og_object{engagement}

Ответ будет

{
  "og_object": {
    "engagement": {
      "count": 197,
      "social_sentence": "197 people like this."
    },
    "id": "895062470590407"
  },
  "id": "<your-url>"
}
0 голосов
/ 02 июля 2019

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

https://graph.facebook.com/?id={URL}&fields=engagement&access_token={your-app_id}|{your-app_secret}

Ответ будет таким:

{
  "engagement": {
    "reaction_count": 36,
    "comment_count": 2,
    "share_count": 20,
    "comment_plugin_count": 3
  },
  "id": "https://www.example.com"
}

Ссылка: https://developers.facebook.com/docs/facebook-login/access-tokens

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