Пользователи и покупатели оставляют множество отзывов в Google Play на приложения, музыку, фильмы и книги. И любому разработчику под Android необходимо постоянно следить за появлением новых оценок на свои приложения, чтобы вовремя отреагировать.
Будучи таким разработчиком, я однажды задумался о создании сервиса для получения отзывов и рейтингов в режиме реального времени. И вот недавно на свет появился View Review — простой и бесплатный REST API для парсинга отзывов о любых продуктах в Google Play Store. Но оказалось, что весьма полезно использовать его не только в «разработческих» целях…

О том, как работает API и как к нему подключиться, а также несколько интересных примеров связки с автоматизатором IFTTT, подробно написано под катом.

Зачем нам такой API


Как известно, у Google Play есть возможность выгрузить отчет по отзывам за какой-то период в формате CSV. Но там мы не увидим отзывов за сегодняшний день. Более того, CSV тоже нужно парсить, а хочется, чтобы за нас это уже кто-то сделал.
Вдобавок ко всему, ссылка на CSV с отзывами доступна только из консоли разработчика. Но что мешает просто собрать данные со страницы продукта в Google Play? Мне показалось, что ничего не мешает, поэтому и было решено «запилить» такой сервис, да еще и научить его выдавать данные в разных форматах.

JSON и RSS


Если с JSON все и так понятно (куда же без него), то вот RSS мне нравится тем, что его можно «скормить» любой RSS-читалке, чтобы получать последние отзывы по приложению (фильму, книге, альбому) практически в режиме реального времени.
Но что еще интереснее, такой RSS фид можно «сдать» в качестве триггера в такие сервисы как IFTTT или Zapier, чтобы по-разному реагировать на новые оценки.

Между прочим, последний умеет подключать такие корпоративные сервисы, как HipChat, репозитории Bitbucket и много всего полезного именно для разработчиков.

Но об этом еще поподробнее будет в конце статьи. А сейчас я опишу API с его возможностями.

API


Итак, как уже было сказано, это очень простой REST API, через который можно получать отзывы к любому товару (приложение, фильм, музыкальный альбом или книга) либо в формате JSON, либо в виде RSS рассылки.
Отзывы упорядочиваются по дате добавления, так что самые новые отзывы идут первыми.

JSON


Чтобы получить JSON с отзывами и оценками, нужно подставить id товара (его можно взять из URL на странице Google Play) и его тип в URL вида
http://api.viewreview.org/json/{type}?id={id}

где type может иметь одно из следующих значений:
  • app — для приложения
  • movie — для фильма
  • album — для музыкального альбома
  • book — для книги

В результате сервис выдаст массив объектов, каждый из которых будет примерно таким:
{
  "rating":5,
  "date":"September 7, 2015",
  "author":"KM MARTTINEN",
  "photo":"https://lh4.googleusercontent.com/-tKH3pWlaxoQ/AAAAAAAAAAI/AAAAAAAAAKo/8FZQ1APxf7M/w48-c-h48/photo.jpg",
  "title":"Highly recommended read...",
  "text":"One of a kind, inspiring, motivational biography of the greatest technology leader and visionary this world has had."
}

Нетрудно догадаться, какое поле что содержит, поэтому я не буду их подробно описывать.

RSS


Соответственно, чтобы получить RSS рассылку, нужно заменить в исходном URL слово json на rss.
В RSS полей немного меньше, поэтому рейтинг и имя автора содержаться в тэге title, разделенные минусом.

<item>
 <title>5 - abdi setiawan</title>
 <link>https://lh3.googleusercontent.com/-pfY6nNVy6GI/AAAAAAAAAAI/AAAAAAAAAjc/FWcSBMp8Mdc/w48-c-h48/photo.jpg#d4d3652e86a3ac30630a19d16e92fe95</link>
 <description>Good book. After i was read it, i realized that you should know if you have a dream, you have to struggling utmost and don't given up!!</description>
 <pubDate>Sat, 26 Sep 2015 16:36:44 GMT</pubDate>
 <guid>https://lh3.googleusercontent.com/-pfY6nNVy6GI/AAAAAAAAAAI/AAAAAAAAAjc/FWcSBMp8Mdc/w48-c-h48/photo.jpg#d4d3652e86a3ac30630a19d16e92fe95</guid>
</item>


Тэги link и guid содержат уникальные значения для пары «автор-отзыв», поэтому RSS читалка должна правильно реагировать на обновления пользователем своего отзыва, считая их новыми элементами, если пользователь изменил оценку или сам отзыв.

Как видите, все предельно просто! Но, это еще не все…

Еще несколько полезных параметров


hl Фильтрация по языку. По-умолчанию используется en, поэтому для русскоязычных приложений полезно всегда выставлять его в ru.
page Этим параметром можно указывать, какую по счету страницу Google Play нужно парсить. Только для формата JSON.
limit Максимальное количество отзывов на странице, которые нужно выдать в ответ.
from Минимальная оценка в отзыве, чтобы он оказался в выдаче.
to Соответственно, максимальная оценка.

Все вышеперечисленные параметры являются необязательными, но еще раз отмечу, что hl нужно выставить в ru, если хочется увидеть самые свежие отзывы на русском.

Еще применения


На самом деле, оказывается полезным использовать такой сервис не только для своих приложений (фильмов, альбомов и книг :) ). Например, можно последить за конкурентом, или подключиться к приложению, где в отзывах могут содержаться промо-коды и т.п. информация от самих пользователей. Можно быть уверенным, вы узнаете о таких данных первыми.

Автоматизация IFTTT и Zapier




Как я уже упоминал, благодаря RSS можно очень гибко настроить любую автоматизацию с помощью таких сервисов как IFTTT или Zapier. Они будут реагировать на новые оценки и моментально перенаправлять их данные на нужный вам сервис, API которого взаимодействует с выбранным сервисом автоматизации.

На скриншоте выше приведен рецепт для IFTTT, который автоматически создаст todo в вашем Todoist списке дел, как только на ваше (или не ваше) приложение придет отзыв с низкой оценкой. Удобно...

Все что нужно для этого сделать — создать рецепт в вашем IFTTT, где в качестве триггера будет RSS feed, а в качестве действия — любая нужная вам реакция. С помощью параметров API View Review, описанных выше, можно контролировать фильтрацию отзывов так, чтобы по-разному реагировать на разные отзывы.

А вот еще парочка рецептов:
Этот «пульнет» нотификацию с новым отзывом в ваш Pushbullet:



Этот отправит нотификацию прямиком на ваши «умные» часы:



А этот зажигает красную сирену в нашем офисе, когда нам ставят «гневную единицу» (релизовано с помощью сервиса для умного дома OpenHAB)


Еще раз напомню, что Zapier имеет большой набор интересных фишек, как например интеграция с Bitbucket, которых нет в IFTTT, и которые тоже могут пригодиться.

Вместо заключения


Вот такой интересный сервис получился. В планах — выйти на IFTTT и создать там отдельный триггер ViewReview вместо обычного RSS, чтобы можно было гибко управлять данными отзыва. А также создать подобный механизм в Zapier.

Комментарии (12)


  1. tehnolog
    26.09.2015 21:18
    +4

    Отличный сервис у вас получился! Мне всегда казалось, что такая функциональность должна быть из коробки у Гугла.
    P.S. Котёнка пристроить не могу. Я из Москвы и у самого подобранный кот. Котёнку удачи.


  1. BupycNet
    26.09.2015 22:59
    -1

    Мы сейчас разрабатываем систему платных каналов для уведомлений, вполне возможно что на основе платных каналов будет канал пользовательских RSS-фидов с обновление в 10-15 минут, можно будет удобно, в том числе и такие вещи прикручивать.
    PS. при желании можете сами создать простенький канал-сервис правда тут уже где то надо будет сами мощности для скана ставить, хотя тот же AppEngine от гугла может потянуть вполне. В течении месяца представим платные каналы, сможете еще и окупить возможные затраты на мощности, цена 10-20 рублей в месяц для разработчиков будет ерудной, хотя возможно им проще будет сделать такой вариант, чем трудиться деньги переводить.

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


  1. andkulikov
    27.09.2015 01:07

    Пользуюсь приложением Andlytics для этих целей. Кроме отзывов показывает и просто оценки и установки, и графики по ним всем строит.
    Но за IFTTT спасибо, очень гибко получается


  1. dotneter
    27.09.2015 11:19

    Какой смысл фильтра по языку? И как его можно полностью убрать что бы выдавались отзывы на всех языках?
    В pubDate имело бы смысл ставить дату отзыва.


    1. morfeusys
      27.09.2015 11:33
      +3

      Смысл в том, что гугл отдает отзывы на каком-то определенном языке, а отзывы на других языках скрывает. Если вы посмотрите, как выглядит страница приложения на Google Play, то увидите, что если ваш язык русский, то будут видны отзывы только от русскоговорящих пользователей.
      Относительно pubDate — к сожалению туда невозможно проставить дату публикации отзыва, так как формат даты на странице Google Play отличается в зависимости все от того же языка. Поэтому нужно писать свой парсер дат под каждый язык.
      Если вы посмотрите в JSON формат, то там вы увидите именно дату публикации отзыва, именно так, как она есть в Google Play.


  1. Assada
    27.09.2015 11:55
    +1

    Еще есть такая пепятка: github.com/meduza-corp/interstellar
    Шлет отзывы сразу в канал слака


  1. beststream
    27.09.2015 18:34

    Аналогичных сервисов куча, но все платные, так что продукт может быть востребован

    В данных о отзыве не помешает еще ссылка на профиль ревьювера в g+

    Ну и раз уж взялся, то иди до конца — сделай для App Store


    1. xzeror
      28.09.2015 06:51

      beststream, у Apple эта функциональность существует с самого начала. Там не надо ничего городить. rss.itunes.apple.com/us/?urlDesc=%2Fgenerator


      1. morfeusys
        28.09.2015 10:23

        Кажется, это немного другое — генератор RSS для чартов. А в статье описан сервис, генерирующий RSS и JSON для конкретного продукта


      1. beststream
        28.09.2015 10:40

        Ссылка, которую вы приводите вообще не о том

        В App Store есть на самом деле RSS с отзывами, он они там делят их сразу по странам — это очень неудобно


  1. withkittens
    27.09.2015 20:08
    +1

    Оставьте для котёнка какой-нибудь контакт. Хабр читают много незарегистрированных пользователей.


    1. morfeusys
      27.09.2015 20:58
      +1

      Спасибо вам за подсказку