VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Для автоматического постинга в Twitter см. хак kerk'a TwitterBot.
Предисловие
Публиковать свежие ссылки на новые темы вашего сайта в соц.сети не только полезно с точки зрения СЕО (ускорения индексации в ПС), но и удобно для пользователей, которые предпочитают черпать новости из групп в социальных сетях. Данный скрипт для VBulletin позволяет не только автоматизировать этот процесс, сняв лишнюю нагрузку с ваших модераторов FB, но и добавит к вашим ссылкам хэштеги, с помощью которых всё больше новых пользователей смогут находить ваши темы.
Исходные данные
- Проверено на PHP 5.3.3 и 5.5.38.
- Кодировка форума UTF-8. Если у вас другая, то нужно пройтись по скрипту поиском фразы "iconv" и расскомментировать формирование переменных $tags и threadname с иcпользованием перекодировки iconv. Переменные без iconv рядом закомментируйте.
- Facebook-PHP-SDK. Я настраивал на v.3.0.0 ,который уже depricated, но работает.
- vBulletin 3.8. Хотя тут не особо важно - от форума нужно только из БД получить ID темы, Заголовок и Теги.
- Скорее всего понадобиться СЕО модуль от хака TwitterBot, чтобы форум научился отдавать META и OG теги (og:image, og:description, og:title, og:image:width, og:image:height и др.) См. рекомендацииздесь.
1.1. Создание приложения.
Предположим у вас есть Страница в Facebook, куда ваш VBulletin мог бы выкладывать сообщения о новых темах форума. Нужно создать Приложение, с помощью которого мы будем решать эту задачу.
- Заходим на developers.facebook.com , авторизовавшись в FB в качестве администратора вашей Страницы.
Жмем на кнопку "Мои приложения" - "Создать новое приложение". Выбираем название, например, Blancos-FEED2 и email для обраной связи.
- В созданном приложении заходим в меню Настройки (Основное)
- Нажимаем кнопку "Добавить платформу" и выбираем Web-сайт.
- Затем в поле "Домены приложений" добавляем имена сайтов, с которых это приложение будет присылать запросы. Например: "blancos.info","www.blancos.info"
- На этой же странице вы можете записать ID приложения и Secret.
1.2. Создание Бесконечного access token вашей Страницы.
- Заходим на https://developers.facebook.com/tools/explorer. В поле "Приложение: [?]" в выпадающем списке "Graph API Explorer" выбираете ваше приложение. Затем в поле "Маркер доступа:" нажимаете кнопку "Получить маркер", в выпадающем списке выбираете "Получить маркер доступа пользователя".
-В открывшемся окне поставьте чекбокс на "manage_pages" и "publish_pages".
-Копируем полученный краткосрочный маркер Пользователя и переходим на https://developers.facebook.com/tools/debug/accesstoken , чтобы там сделать из краткосрочного маркера долгосрочный.
-Для этого на вкладке "Маркер доступа" в поле "Отладка" вставляем полученный ранее краткосрочный маркер Пользователя и нажимаем кнопку "Отладка", чтобы увидеть его свойства (обращаем внимание поля Тип, Истекает и Действующий).
- После этого ниже нажимаем "Продлить маркер доступа" и видим уже долгосрочный маркер доступа Пользователя. Копируем его и возвращаемся на https://developers.facebook.com/tools/explorer.
- Снова выбираем ваше приложение в поле "Приложение: [?]", а в поле "Маркер доступа" вставляем полученный выше Долгосрочный маркер Пользователя. Затем в выпадающем списке ставите чекбокс на вашу страницу (под надписью "Маркеры доступа на Страницу") и кликаете на "Запросить publish_pages".
-Копируем полученный маркер Страницы и снова возвращаемся https://developers.facebook.com/tools/debug/accesstoken , вставляем туда полученный только что маркер доступа типа publish_pages и жмем кнопку "Отладка". Мы должны увидеть, что этот маркер Бесконечный и тип его Page. Например:
Итого, у нас должны быть значения следующих параметров:
-ID Страницы (можно посмотреть на вкладке Информация в самом низу)
-ID приложения;
-Secret;
-Unlimited token for Page;
2.1 Чтобы Facebook (впрочем как и другие соц.сети), могли корректно отобразить информацию с вашего сайта нужно, чтобы ваш сайт отдавал целый ряд OG- и Meta Тегов. Вы можете проверить в инструментах разработчика Facebook страницу, которую собираетесь публиковать, на предмет соответствия мета-информации требованиям.
Например, как это должно быть, чтобы всё работало корректно:
Сразу скажу, что иногда "скрапинг" у Фейсбука глючит и не схватывает meta-теги. Тогда можно попробовать повторить скрипинг и отладку, а потом повторить публикацию. Файсбук вообще рекомендует перед репостом делать скрапинг новых или измененных ссылок)))
Если каких-то тегов ваш форум не отдает или их нет в СЕО-модуле kerk в хаке TwitterBot (например, там может не быть fbages и fb:app_id), то их нужно добавить. Некоторые мета теги можно просто прописать в шаблоне headinclude таким же образом как в сорсе новостных страниц на форуме Blancos.info.
2.2. Верификация домена в FB.
Это нововведение от 7 ноября 2017 начиная с API 2.11. В 2.10 такого не было. Так что нужно делать, иначе, при попытке постить FB будет выдавать сообщение:
Quote:
Response: (#100) Only owners of the URL have the ability to specify the picture, name, thumbnail or description params.
Идет по более простому варианту через fbages. Для этого в шаблоне headinclude (либо в СЕО модуле TwitterBot'a) добавим запись вида:
<meta property="fbages" content="288800844466914" />
<meta property="fb:app_id" content="188361928381569" />
заменив значения на свои.
Где 288800844466914 - это ID FB-Страницы, а 188361928381569 это ID Приложения, которое будет на эту страницу добавлять контент.
2.3. Сначала нужно в таблице THREAD создать колонку fbposting с значением по умолчанию = 0. Например, так:
Code:
ALTER TABLE thread ADD fbposting INT(1) NOT NULL DEFAULT '0';
- Теперь, выставим всей этой колонке значение = 1, чтобы избежать публикации в Facebook старых сообщений. Например, так:
Код:
Code:
UPDATE thread SET fbposting = 1 WHERE fbposting <> 1;
-Сейчас для нескольких самых свежих тем в интересующих нас разделах выставим значение fbposting = 0, чтобы на них проверить работу скрипта. Например, так:
Код:
Code:
UPDATE thread SET fbposting = 0
WHERE forumid = 2
ORDER BY threadid DESC
LIMIT 2;
3.1. Скачиваем и распаковываем архив с PHP-скриптом из вложения или по этой ссылке с Yandex-диска на ваш Web-сервер. В папке со скриптом должен быть каталог "log" с правами 777, куда скрипт будет писать лог своей работы (логи хранятся только за 3 суток). Хотя если вам не нужно логирование, можете пройтись по скипту и закомменировать команды, записывающие результаты в файл.
Кроме того, в папке должен быть каталог с facebook-php-sdk (есть в архиве, но вы можете установить его самостоятельно командой "git clone https://github.com/facebookarchive/facebook-php-sdk"). facebook-php-sdk версии 3.0.0. Более новые не пробовал.
Для повышения безопасности в каталоге "log" положите файл .htaccess с таким содержимым (есть в архиве):
Code:
RemoveHandler .phtml
RemoveHandler .php
RemoveHandler .php3
RemoveHandler .php4
RemoveHandler .php5
RemoveHandler .cgi
RemoveHandler .exe
RemoveHandler .pl
RemoveHandler .asp
RemoveHandler .aspx
RemoveHandler .shtml
<Files ~ "\.php|\.phtml|\.cgi|\.exe|\.pl|\.asp|\.aspx|\.shtml">
Order allow,deny
Deny from all
3.2. Скрипт имеет два режима запуска: preview и send. Preview только покажет какие данные подходят для отправки. Send выполнит отправку.
,где forum_id - список (через запятую) форумов, в которых искать темы для отправки; amount - количество записей, которые искать в БД форума для отправки за раз; page_id - это ID вашей FB-страницы; defaulttags - список (через запятую) тегов, которые скрипт будет по умолчанию добавлять к меткам ваших тем. Например, РеалМадрид, новости, программирование, СказочноеБали; appId - ID вашего FB-Приложения из п.1.1; secret - секрет вашего приложения из п.1.1; accessToken - бесконечный access token Страницы, полученный в пункте 1.2.
В результате должно вывести инфу, например:
Code:
--- Data from forum: ---
array(1) {
[0]=>
array(4) {
["threadid"]=>
string(5) "10002"
["threadname"]=>
string(116) "Зинедин Зидан: «Еще не пришло время говорить о зимнем усилении»"
["post"]=>
string(511) "На предматчевой пресс-конференции перед игрой Лиги Чемпионов с «АПОЭЛом» главный тренер «Мадрида» Зинедин Зидан не стал отвечать на вопрос об усилении команды в зимнее трансферное окно, однако выразил оптимизм в том, что касается нынешнего состава и побед в предстоящих матчах."
["tags"]=>
string(73) "#РеалМадрид # RealMadrid # зидан # лигачемпионов"
}
}
--- Data from forum end. ---
------------ START posting to 288800844466914 ------------
Thread ID 10002: Зинедин Зидан: «Еще не пришло время говорить о зимнем усилении» was SENT to FB-page 288800844466914.
------------ END posting to 288800844466914 ------------
3.3. Смотрим результат в FB-странице. Например:
3.4. Добавляем скрипт в cron вашего сервера. В данном случае он будет отрабатывать каждые 20 мин круглосуточно:
P.S. Любые предложение по улучшению работы скрипта приветствуются. За малограмотность в написании PHP-кода прошу извинять, но 100% работает это факт.
P.S.S. Отдаю эту работу бесплатно и без обязательств, но был бы рад, если после внедрения на своем форуме вы сделаете на нём маленькую благодарственную заметку с ссылкой на сайт BLANCOS.INFO. Тут все от вашей Совести и благодарности зависит)))