Размещение на странице с facebook4j

1

Есть ли способ публикации на стене страницы facebook? Из учебников показано, как получить информацию о странице. Я не смог опубликовать на публичной странице (не мой, а тот, у которого у клиента есть права администратора).

Я также попытался использовать приложение, и я успешно получил OAuthAppAccessToken, но этого недостаточно.

An active access token must be used to query information about the current user.

Есть ли какой-то учебник? потому что большинство людей просто хотят получить и комментарии со страниц.

Теги:
facebook
facebook-graph-api

1 ответ

2
Лучший ответ

Вариант 1 (получить токен через инструменты)

Этот параметр требует ручного ввода и копирования сгенерированных токенов с помощью инструментов графического api. Я не собираюсь освещать этот вариант, потому что эти две ссылки, получающие токен доступа к странице Facebook, используют 4-ступенчатую программу и Post to Facebook Page wall, используя RestFB api, достаточно хорошо ее покрывают.


Вариант 2 (одно решение кнопки)

Теперь это довольно автоматизированное решение, которое (если вы похожи на меня) вы хотите. Поскольку я не мог сказать своему клиенту: "Иди сюда, скопируй это, дай мне это и прочее...". Мне нужно было сделать большинство удобных для пользователя решений. В конце я внедрил кнопку входа в FB и простой вызов ajax, который получит долговечный токен доступа к странице. С помощью этого токена наше приложение может публиковать на своей странице автоматически при возникновении какого-либо события. Используя доступ к токенам доступа к странице Facebook, вы найдете следующее решение:

  1. Сделайте свое приложение https://developers.facebook.com/apps/ (вам может потребоваться добавить платформу сайта и сделать его вживую).
  2. На панели инструментов найдите идентификатор приложения и приложение.
  3. Внедрите кнопку входа в систему на своем веб-сайте. Огромную информацию об этом можно найти здесь fb login для Интернета. Фрагмент кода есть все, что вам нужно, просто замените идентификатор приложения на свой идентификатор приложения.
  4. Добавьте области в login-button, чтобы мы могли получать страницы, а также иметь разрешения на публикацию действий.

<fb:login-button scope="public_profile,email,manage_pages,publish_actions" onlogin="checkLoginState();"> </fb:login-button>

  1. В кнопке входа вы можете видеть функцию, которая вызывается каждый раз, когда вызывается логин. В этой функции мы можем получить ответ от FB с токенами и информацией, которые нам нужны о нашем пользователе (в этом случае это действительно просто токен, который нам нужен). После кода javascript отправляет пользовательский токен (короткий) через ajax на наш сервер.

    function checkLoginState() { FB.getLoginStatus(function (response) { statusChangeCallback(response); }); } function statusChangeCallback(response) { if (response.status === 'connected') { getLongLivedToken(response.authResponse.accessToken); } } function getLongLivedToken(access) { var data = { ${fbParam}: acces }; $.post( '${fbUrl}', data, function (INFO) { console.log("done"); }, 'text' ); }

  2. Следующий шаг - серверный. На данный момент мы получаем токен, мы должны преобразовать его в долгоживущий.

        String url = "https://graph.facebook.com/oauth/access_token";
        String charset = "UTF-8";
        String grandType = "fb_exchange_token";
    
        String query = String.format("grant_type=%s&client_id=%s&client_secret=%s&fb_exchange_token=%s",
                URLEncoder.encode(grandType, charset),
                URLEncoder.encode(Constants.FACEBOOK_APP_ID, charset),
                URLEncoder.encode(Constants.FACEBOOK_APP_SECRET, charset),
                URLEncoder.encode(shortToken, charset));
        HttpsURLConnection con = (HttpsURLConnection) new URL(url + "?" + query).openConnection();
        InputStream ins = con.getInputStream();
        InputStreamReader isr = new InputStreamReader(ins);
        BufferedReader in = new BufferedReader(isr);
    
        String inputLine;
        String result = "";
        while ((inputLine = in.readLine()) != null) {
            System.out.println(inputLine);
            result += inputLine;
        }
        in.close();
    
        String[] params = result.split("&");
        Map<String, String> map = new HashMap<String, String>();
        for (String param : params) {
            String name = param.split("=")[0];
            String value = param.split("=")[1];
            map.put(name, value);
        }
        String longToken=map.get("access_token");
    
  3. Теперь на последнем этапе нам нужно получить токен доступа для страницы, на которую мы хотим отправить сообщение. С этого момента мы можем использовать facebook4j.

        Facebook facebook = new FacebookFactory().getInstance();
        facebook.setOAuthAppId(Constants.FACEBOOK_APP_ID, Constants.FACEBOOK_APP_SECRET);
    
        facebook.setOAuthAccessToken(new AccessToken(longToken));
        try {
            String pageToken = null;
            for (Account a : facebook.getAccounts()) {
                if (a.getName().toLowerCase().contains("nameOfPage")) {
                    pageToken = a.getAccessToken();
                }
            }
    
  4. PROFIT: с этим токеном мы можем опубликовать на желаемой странице:

    PostUpdate post = new PostUpdate(new URL("http://priklad.sk"))
                    .picture(new URL("http://priklad.sk/obrazcok/testik.png"))
                    .name("priklad")
                    .caption("priklad")
                    .message("priklad")
                    .description("priklad");
    try {
         if (pageToken != null) {
             facebook.setOAuthAccessToken(new AccessToken(id));
             facebook.postFeed(post);
             Input.addInfoAnnotation(req, "sysAdminTools.annotation.fb.ok");
                                }
          } catch (FacebookException ex) {
             Logger.getLogger(EditAdPreviewServlet.class.getName()).log(Level.SEVERE, null, ex);
          }
    

Примечание: это решение не предназначено для использования в качестве спамера страниц. Пользователь должен быть проинформирован о том, какие события вызовут публикацию на его странице. Если пользователь хочет уменьшить/удалить разрешения, он может выполнять настройки FB.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню