Синхронизация отзывов

Данный метод синхронизации позволяет сохранять отзывы Cackle в базу данных вашего локального сервера для хранения и индексации поисковыми системами, а также обновлять статусы и сообщения отзывов

Синхронизация отзывов в CMS

В Prestashop, Opencart, плагинах, синхронизация, и как следствие индексация(отображение html) отзывов существует по умолчанию, ниже описание как сделать синхронизацию для любой системы.

Синхронизация отзывов в платформах на PHP

Для сайтов на PHP существует Общее решение для PHP в котором уже реализована индексация, и все связанные с этим процессы, а именно:
  • Каждые 5 минут происходит запрос на сервер cackle и отзывы записываются в локальную БД(новые создаются, редактированные - обновляются поля)
  • Из локальной БД отзывы отображаются в html
  • В админ панели решения(cackle_admin.php) уже готовы поля для ввода и сохранения ключей, а также есть возможность ручной синхронизации.
Это решение (https://bitbucket.org/cackle-plugin/review-php/get/1.01.zip) представляет собой готовый класс, который вызывается на странице следующим образом:

include_once(dirname(__FILE__) . '/cackle_review.php');
$product_id = 12; //идентификатор страницы с отзывом
$a = new CackleReview(true,$product_id);

Ввод ключей производится на специальной странице администрирования - cackle_admin.php. Тут же можно провести ручную синхронизацию, а также выбрать кодировку Windows-1251(по умолчанию utf-8).

Описание синхронизации отзывов для других платформ

Мы крайне рекоммендуем при интеграции смотреть на код реализованные в Общем решении на PHP указанный выше. Тем не менее, ниже будет описан общий алгоритм синхронизации.

Пример формата api 3.0 (json)

{
"id":18874,
"siteId":28333,
"star":5,
"pros":"Pros test",
"cons":"Cons test",
"comment":"Comment test",
"media":"http://media.cackle.me/ba45c8f60456a672e003a875e469d0eb.jpg",
"up":0,
"down":0,
"created":1417596224333,
"status":"approved",
"details":[],
  "author": { "id":72343,
    "email":"email@gmail.com",
    "name":"Author name",
    "www":"https://plus.google.com/link_to_google",
    "provider":"googleplus",
    "openId":"https://plus.google.com/openId"
  }
},
"chan": {
  "id":12024,
  "channel":"13",
  "url":"http://localhost/cackle_review/cackle/page.php",
  "title":""},
  "ip":"91.202.45.183",
  "modified":"1417596224333"
}}

Установка базы данных

Для сохранения Cackle отзывов в локальную базу данных, необходима таблица со следующими полями:

  • id (bigint)
  • product_id (character)
  • pros (text)
  • cons (text)
  • comment (text)
  • date(datetime)
  • status (integer)
  • ip (character)
  • author(character)
  • email (character)
  • avatar (character)
  • is_register(int)
  • approve (int)
  • star(int)
  • up (int)
  • down (int)
  • user_agent (character)

Синхронизация отзывов

После того как таблица, в которую вы будете сохранять отзывы готова, можно приступить к реализации процесса синхронизации отзывов. Первое, что вам нужно сделать - это контроллер, который бы запрашивал Cackle отзывы раз в 5 минут. Отзывы доступны по следующему адресу API:

http://cackle.me/api/3.0/review/list.json?id={siteId}&siteApiKey={siteApiKey}&accountApiKey={accountApiKey}&modified={modified}&page={page}&size={size}

Где siteId (siteId), siteApiKey (Site API Key) и accountApiKey (Account API Key) можно получить в панели администратора на вкладке "Установить", снизу выбрав WordPress плагин, как показано на рисунках ниже:

reviews sync reviews sync

Необязательный параметр modified - время последнего изменения. То есть, данный запрос вернет все отзывы modified которых больше чем modified в запросе. Все возвращаемые отзывы упорядочены по review_id.

Необязательный параметр size - возвращает опр.кол-во отзывов

Необязательный параметр page - возвращает отзывы с определенной (page) страницы. Это необходимо если кол-во отзывов превышает size.

Итак у нас есть контроллер, который раз в 5 минут запрашивает отзывы, отсортированные по id. После каждого такого запроса, необходимо либо сохранить отзывы в базу данных либо обновить статус сообщений. Далее необходимо сохранить максимальный review_id и modified. Далее, в следующем запросе, передать максимальный modified в modified параметре API запроса.

Алгоритм:

  1. Контроллер для получения массива с отзывами запрашивает
    http://cackle.me/api/3.0/review/list.json?id={siteId}&siteApiKey={siteApiKey}&accountApiKey={accountApiKey}&modified={modified}&page={page}&size={size}
  2. По полученному ответу определяем размер комментариев и если он больше {size} в запросе, то необходимо будет сделать следующий запрос(после сл.шага синхронизации) с {page} +1 до тех пор, пока размер ответа не будет меньше размера запроса. Далее для каждого запроса выполняем след. шаг(3):
  3. Далее для каждого полученного отзыва делается следующая проверка:
    1. Если id полученного отзыва больше id последнего отзыва, сохраненного в БД, то данный отзыв добавляется в БД.
    2. Если id полученного отзыва меньше id последнего отзыва, сохраненного в БД, то обновить в БД только поля статуса(status) и сообщения(message) отзыва. При этом если modified полученного отзыва больше modified последнего отзыва, сохраненного в БД,то обновить modified последнего отзыва.
  4. Через 5 минут находим максимальный modified (в локальной базе данных):
    $since = "SELECT MAX(modified) FROM reviews"
  5. Снова запрашиваем API передавая максимальный modified &modified={$since}
  6. В ответ приходят все отзывы modified(время изменения) которых больше $since
  7. Переходим на пункт 3 и повторяем снова

Отрисовка отзывов

Наконец, после того как Cackle отзывы оказались в вашей локальной базе данных, вы можем вывести их на HTML страницу для поисковой индексации, в следующем виде:

<div id="mc-review">
    [... отрисуйте отзывы из локальной базы данных тут ...]
</div>
<script>
    document.getElementById('mc-review').innerHTML = '';
    [... Cackle код виджета отзывов ...]
</script>