Как мы на сайте автопостинг внедряли
Привет! Погружаясь в нашу внутреннюю работу, хотим поделиться полезным кейсом для будущих сайтов. Расскажу немного о процессе, как статьи попадают на наш внутренний портал.
В первую очередь после того, как автор подготовил статью, она попадает к нашему редактору. Задача редактора оценивать этику контента, и при необходимости помогать автору в редактировании статьи. Затем редактор размещает статьи на сайте, и контент попадает к нашему читателю.
Часть аудитории читает материал только в социальных сетях, поэтому этот канал связи с ними очень важен для нас.
Для того чтобы проводить кросспостинг публикаций с сайта, мы использовали стороннее решение, которое по факту требовало от редактора двойную работу – помимо размещения статьи на сайте, контент частично нужно было размещать в SMM-планере и выставлять время с разницей, чтобы сначала статья вышла на сайте, а через минуту уже в социальных сетях.
Поэтому перед нами была поставлена задача: автоматизировать размещение статей с сайта и исключить лишнюю работу для наших редакторов.
Разработка решения делалась для трёх социальных сетей — «ВКонтакте», Telegram, Facebook (о каждом из них расскажем подробнее).
Для начала добавляем хук в нашу систему СMS на изменение статуса записи.
Обязательно проверяем, чтобы наш хук не срабатывал на обновление записи, а только на изменение статуса на «опубликован».
«ВКонтакте»
Для начала работы с VK API переходим по ссылке и создаем новое Singletone приложение.
Далее переходим в настройки приложения, и все что нам нужно — ID приложения.
Для получения токена доступа к методам API от имени вашей страницы нужно сделать запрос по открытому протоколу Oauth. В строке браузера формируем строку, подобной ниже, где:
Client_id — ID вашего приложения.
Scope — разрешения, которые вы запрашиваете. Конкретно для этой задачи нам потребовались photos (загрузка фото), pages (доступ к странице), groups (доступ к группам).
Переходим по сформированной ссылке и даем доступ приложению к запрошенным разрешениям.
После нажатия кнопки «Разрешить» в ответ получаем токен доступа, который позволяет нам начать работать с API.
Чтобы отправить пост на стену, нужно сформировать запрос на серверной части сайта. Все необходимые данные мы получаем из встроенного массива $post (создается в момент изменения статус записи)
Для того чтобы добавить картинку посту, грузим вложение на сервер, а после добавляем ID, полученный от сервера к запросу в API. Затем, используя метод API wall.post, отправляем запрос и пост появляется группе. В ответ приходит post_id, по которому можно легко найти наш опубликованный пост!
Функцию CURL выделяем отдельно, для отправки запроса по нужному URL.
Telegram
Все действия, которые мы будем совершать, обязательно требуют наличие бота.
Бота нужно зарегистрировать и получить его ID, являющийся в том числе и токеном. Для этого в Telegram существует специальный бот — @BotFather.
Отправляем сообщение /start и в ответ получаем список его методов. Следом пишем /newbot, отправляем, и бот попросить придумать новое имя вашему боту. Название обязательно должно оканчиваться на «bot».
В случае успеха BotFather возвращает токен бота и ссылку для быстрого добавления бота в контакты. Полученных данных достаточно для начала работы с API. Подключаем VPN и начинаем читать документацию.
Не забудьте проверить полученный токен с помощью ссылки
Ищем любой бесплатный хостинг, создаем там обработчик запросов от нашего сайта и спокойно отправляем и получаем нужные данные.
Конечная функция, которая отправляет в группу сообщение, приведена ниже:
Facebook
Чтобы получить доступ к работе с Facebook API, нам потребуется создать приложение, разработать прототип, а после уже пройти App Review.
Создаем приложение по ссылке → Сreate new App.
После создания приложения переходим на его страницу и видим основные параметры приложения, которые понадобятся нам в будущем (App ID и App Secret):
Так как мы разрабатываем решение для сайта, правила Facebook требуют наличия политики конфиденциальности на сайте. Ссылку на нее вставляем в поле Privacy Policy URL. После внизу нажимаем «Добавить платформу», выбираем Web App и прописываем в полях, где написано URL, название сайта.
Приложение будет реализовать функцию «Войти через Facebook», соответственно все те страницы, которые будут использованы в прототипе, нужно обязательно внести в поля «Действительные URI для перенаправления OAuth».
После подготовки всех нужных данных приступаем к разработке прототипа.
Facebook предоставляет свой SDK для работы с методами, поэтому качаем его с официального аккаунта на Github и включаем в проект. Также можно подключить с использованием composer.
Чтобы пройти App Review, нам понадобилось три страницы:
- Первая страница должна обрабатывать данные постера и позволять пользователю получить тот самый заветный токен страницы через свою учетку Facebook. Cама страница состоит из простейшей разметки HTML и скрипта JavaScript, который шлет POST-запросы на наш callback.php.
- Вторая страница (callback.php) обрабатывает действия пользователя и выводит в конце токены к тем страницам, к которым он разрешил доступ.
- Третья страница (sendpostfb.php) отправляет данные поста в Facebook.
На всех страницах всегда проверяем сессию:
Добавляем в наш запрос к файлу callback.php разрешения, которые хотим получить от пользователя.
Код страницы, которую покажем пользователю:
По клику на кнопку «facebook-post» отправляем пост на страницу. В дальнейшем, после App Review, необходимость в данной странице отпала и в действии оставили только код, который отправляет пост, с некоторыми доработками.
Страница callback.php содержит в себе код, который позволяет пользователю перейдя в Facebook дать разрешения к страницам, в которых пользователь имеет права администратора, а после возвращает в виде ответа массив с токенами (если страниц несколько). Нам в полученном ответе нужны только access_token и pageID. Их используем на предыдущей странице размещения поста.
Важный момент: сессия при получении токена не должна отличаться, иначе Facebook SDK вернет ошибку вместо токена.
Ну и наконец код страницы, которая непосредственно отправляет пост в Facebook:
После разработки и тестирования, готовим текст запроса в App Review.
При отправке запроса, мы должны предоставить:
А) Текст описания интеграции, с подробностями, зачем нам нужны эти функции и как пользователь будет ими пользоваться.
Б) Видео (cкринкаст), который явно покажет, как будет использоваться ваше приложение.
Само окно запроса выглядит так:
Важные рекомендации, следуя которым вы сможете увеличить шанс успешного прохождения проверки:
- Расписывайте все подробно. Сотрудники Facebook не будут разбираться или думать, куда им нажать лишний раз. Они выполняют ваши инструкции и, если где-то что-то идет не по плану, сразу пишут отказ без пояснения причин.
- Путь, по которому будет идти проверка, должен быть максимально простым. Все кнопки, переходы и ссылки должны быть на виду.
- Мы писали текст на русском и английском. Думаю, это тоже критично влияет.
- Записывая скринкаст, делайте все не в быстром темпе, обязательно делайте остановки и показывайте места, где проверяющий может ошибиться. Либо заранее предусматривайте все подводные камни и закрывайте их.
В заключение хочу сказать, что положительный эффект от внедрения этой фичи появился незамедлительно, плюс в процессе у редакторов появились новые предложения по улучшению сервиса, которые мы будем реализовать в дальнейшем, но об этом в следующий раз.
Друзья, если у вас есть предложения, как можно упростить данную задачу, будем рады выслушать ваши предложения.
Какой отвратительный код.