Скажу сразу, статья скорее техническая, это инструкция.
Но начну с истории.

Сейчас я работаю на компанию со 100 процентным государственным участием, учредитель — одна уважаемая госкорпорация.

Год назад я запустил здесь новый процесс — участие в госзакупках. Да — да, вот так бывает, госкомпания не участвовала в госзакупках.

Попытки запустить это были, но безуспешные.

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

Я был в недоумении некоторое время, пока не решил перезапустить этот процесс, выпросив оплатить аккаунт на Контур.Закупках.

Всё настроил и стал мониторить сам. Находил конкурсы отдавал в отдел продаж, завертелось, закружилось.

Людям нравится когда что-то происходит. Отдел продаж загорелся.

Если кратко описать, что нужно, чтобы запустить процесс участия в госзакупках, то вам надо:
1. Настроить мониторинг госзакупок
2. Чтобы кто то отбирал проекты, понимая ФЗ и читая все требования. Убирать лишнее.
3. Вести учет состояния проектов в едином интерфейсе.
4. Готовить заявку на участие в конкурсе, понимая структуру вашей цены
5. Иметь аккаунты на электронных торговых площадках (ЭТП)
6. Уметь писать жалобы в ФАС на снос конкурсов (юрист)
7. Проводить аналитику своего, извиняюсь, рынка

Мне очень помогает аккаунт в Контур.Закупки делать п.п. 1-3 и 7.

Но аккаунт у них и подобных сервисов — платный. И не все могут себе позволить приобретение и сидят, мучаются.

Вот для вас, мои будущие миллионеры, Я набросал инструкцию, как сделать отбор конкурсов более удобным и совсем бесплатным.

  1. Возмём RSS-поток конкурсов от zakupki.gov.ru
  2. Будем мониторить этот RSS с помощью IFTTT и отправлять в Google SpreadSheets (они же Google.Таблицы)
  3. Отформатируем таблицы так, чтобы там появлялось название конкурса и максимальная цена контракта


В итоге получим вот такую табличку, данные в которой будут обновляться самостоятельно:

image

Поехали!

1. RSS-поток конкурсов от zakupki.gov.ru



Заходите zakupki.gov.ru/epz/order/extendedsearch/search.html
Важно именно из extendedsearch, потому как результаты, выдаваемые quicksearch отличаются от результатов extended. В частности в quicksearch система не подставляет название заказчика, а его мы хотим вывести в табличку. Пользуемся extended.

Итак, в форме поиска вводим:
— искомые слова для поиска конкурса. В моём случае это «оплаты проезда»
— этап закупки. Нас интересуют «Подача заявки», остальные отключаем
Нажимаем «Найти».

image

Система выдаст результаты поиска. Если это то, что нужно, получаем ленту RSS с обновлениями по данному запросу, нажимая значок RSS.

image

Скопируйте себе URL RSS-ленты [ в нашем случае — zakupki.gov.ru/tinyurl/ab14226a-5b2a-4de6-b283-112b6972f6bc ]

2. Мониторинг RSS с помощью IFTTT



Зайдите в IFTTT.
Если не зарегистрированы, то сделайте это и заходите в «My Applets»

Нажимаем кнопку «New Applet» для создания нового апплета (триггер и действие).
image

На следующем экране нажмите на часть "+ this", система предложит выбрать сервис. В поисковой строке наберите «rss» или найдите триггер «RSS Feed» в ленте сервисов.

Кликните на квадрат «RSS Feed».
Появятся 2 опции, выбираем «New feed item».
image

Триггер сработает, если в ленте RSS появится новый объект
<item>ТЕЛО_ОБЪЕКТА</item>
.

На экране создания триггера вставляем URL нашей RSS-ленты и нажимаем «Create trigger».
image

Далее нажимаем кнопку "+ that".
На экране поиска действий пишем «sheets» и кликаем на найденный action.
image

На следующем экране выбираем вариант «Add row to spreadsheet» (добавить строку в таблицу)

Конфигурируем IFTT, как заполнять таблицу.
image
Spreadsheet name — название файла таблицы. Если такой таблицы не существует, то IFTTT создаст её на Вашем диске. Увидеть таблицу можно будет у себя в списке таблиц Google.

Formatted row — правило для заполнения строки. Выбираем нужные нам поля, разделяя их знаком |||.
Заполните
{{EntryPublished}} ||| {{EntryTitle}} ||| {{EntryUrl}} ||| {{EntryContent}} |||zakupki.gov.ru{{FeedUrl}}||| {{EntryAuthor}}
То есть в ячейки будет записаны:
ДАТА|||НАЗВАНИЕ КОНКУРСА|||URL записи|||ПОЛНОЕ ОПИСАНИЕ КОНКУРСА|||RSS-лента|||НАЗВАНИЕ ЗАКАЗЧИКА

Drive folder path — название папки на Вашем Google Drive, в которую будет помещён файл с таблицей. Я помещаю все таблицы в папку zakupki.

Нажимаем «Create action».

На финальном экране — выбираем имя для правила IFTTT.
И жмём «Finish».
image

Всё, правило создано, таблица начнёт заполняться, как только будет появляться новые конкурсы в ленте RSS.
image

3. Отформатируем таблицы



Вставим заголовки над столбцами. Вот что мы видим:
image

Осталось выделить из description название конкурса и начальную цену.
Добавляем столбец «Название конкурса» и вставляем в первую (после заголовков) ячейку вот такую формулу:
=ArrayFormula(IF(ISBLANK($C$2:$C);"";SUBSTITUTE(SUBSTITUTE(MID(($D$2:$D);FIND("Наименование объекта закупки: </strong>";($D$2:$D))+LEN("Наименование объекта закупки: </strong>");FIND("<br/><strong>Размещение выполняется по";($D$2:$D))-FIND("Наименование объекта закупки: </strong>";($D$2:$D))-LEN("Наименование объекта закупки: </strong>"));"«";"");"»";"")))

image

Формула будет парсить столбец D (description) и автоматически заполнять в данный столбец название конкурса при появлении новой строчки в таблице.

Добавляем столбец (вводим название столбца «Начальная цена») и вставляем в первую (после заголовков) ячейку вот такую формулу:
=ArrayFormula(IF(ISBLANK($C$2:$C);"";MID(($D$2:$D);
IFERROR(FIND("Начальная цена контракта: </strong>";($D$2:$D))+35;FIND("Начальная цена: </strong>";($D$2:$D))+25);
FIND("<strong> Валюта";($D$2:$D))-IFERROR(FIND("Начальная цена контракта: </strong>";($D$2:$D))+35;FIND("Начальная цена: </strong>";($D$2:$D))+25)
)))

image

И последний штрих. Бывает, ссылка приходит в двух видах. С доменом и без:
<link>http://zakupki.gov.ru/223/purchase/public/purchase/info/common-info.html?regNumber=31907911258</link>
<link>/epz/order/notice/ea44/view/common-info.html?regNumber=0818200000219000092</link>

Поэтому надо будет сделать формулу, чтобы ссылка на конкурс всегда была кликабельной. Для этого вводим новый столбец «Ссылка на КД» и вставляем в первую (после заголовков) ячейку вот такую формулу:
=ArrayFormula(IF(ISBLANK($C$2:$C);"";
IFERROR(
IF(FIND("epz";($C$2:$C));SUBSTITUTE(($C$2:$C);"/epz";"http://zakupki.gov.ru/epz"));
($C$2:$C))
))

image

Столбцы C,D,E можно свернуть, чтобы не мешались.
Приятного пользования!

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


  1. aRomanyuk Автор
    28.05.2019 17:02

    Поддержите плюсом, если добавляете инструкцию в избранное.
    Вам это просто, мне приятно.


    1. akryukov
      28.05.2019 18:42

      Добавить в избранное может любой, а поставить плюс — не только лишь все.


      1. aRomanyuk Автор
        28.05.2019 19:01

        Лишь все, кто придумали в голову мысль об этом или лишь другом


        1. roscomtheend
          30.05.2019 11:49

          Это неверная информация, плюс могут поставить лишь имеющие карму от +5.


          1. aRomanyuk Автор
            31.05.2019 11:29

            Чистая правда. Я вот пока не могу


  1. servekon
    28.05.2019 22:41

    Вы в курсе, что через некоторое время RSS канал становится недоступным, если с одного IP идут множественные запросы?


    1. aRomanyuk Автор
      29.05.2019 11:36

      Это же зависит от того скрипта, который выдает этот RSS )) Если скрипт не реализует такую логику, то он отрабатывает все запросы. К примеру, у меня на порталах скрипт именно простой, его хоть дидось с одного IP, он будет исправно генерировать нужный XML.
      Если Вы конкретно про RSS Госзакупок, то такая табличка по другой теме (мониторинг транспорта) у меня работает с прошлого декабря. При этом в одну табличку пишут сразу 2 правила IFTTT (то есть несколько RSS-госзакупок). В табличке уже сотни записей.
      То есть пока что такая проблема мне не встречалась. Расскажите, пожалуйста, если знаете что-то.


      1. servekon
        29.05.2019 17:41

        Я мониторил по теме ЖКХ и там каждый день по сотни записей. Читал через TinyRssTiny Tiny RSS
        , потом начала выскакивать ошибка обновления канала. Если напрямую через бразуер смотришь — всё отображается корректно.


        1. aRomanyuk Автор
          31.05.2019 10:39

          То есть проблемы были именно с лентой закупок. Это плохо.
          С другой стороны, ошибку могли пофиксить на стороне Закупок.
          Либо сам Tiny RSS мог иметь какое-то неадекватно большое количество запросов или другие косяки, а IFTTT может их не иметь.
          Я к тому, что надо тестировать на часто обновляемой ленте. Я мониторю системы мониторинга транспорта, там обновлений не так много.
          Попробуете, или я сам?


  1. PendalFF
    29.05.2019 15:27

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


    1. aRomanyuk Автор
      29.05.2019 16:11

      Спасибо. Если что — я отвечу на вопросы.


      1. PendalFF
        29.05.2019 16:56

        Результат появился, я имею первую запись в файле
        Тендерный отдел попискивает от восторга:)


        1. aRomanyuk Автор
          31.05.2019 10:32

          Вау. Я очень рад, что они попискивают. Ура!!!


          1. PendalFF
            31.05.2019 11:12

            Написал в личку, что-то все же пошло не так, строка в файле только одна хот уже более 90 срабатываний


  1. maximax
    29.05.2019 22:31

    Алексей, спасибо!

    Хочу пойти дальше и настроил еще один IFTTT-рецепт — если в этой таблице появилась новая строка, то делаем веб-запрос (триггер webhook) с методом POST и адресом api.telegram.org/bot[идентификатор бота, полученный от @botfather в Телеграме]/sendMessage, а посылаем следующее: {«chat_id»:"@[название канала, в котором наш бот числится админом и может туда постить]",«text»:" {{ColumnF}} {{ColumnG}} {{ColumnH}} {{ColumnI}}"}

    Предварительно создаем бота и канал, в который добавляем бота админом.
    Получился канал для широкой аудитории, куда падают свежие конкурсы по ключевым словам из определенной отрасли. Жду завтрашних конкурсов, чтобы протестировать, как это заработает))


    1. maximax
      29.05.2019 23:08

      Кавычки в передаваемом тексте воспринимаются FTTT как закрывающие, поэтому строка, уходящая боту обрезается. Помогло экранирование символами <<<{{ColumnF}} >>>


    1. maximax
      30.05.2019 00:07

      Докрутил, формат сообщения такой:

      {«chat_id»:"@[название канала]",«text»:" <<<{{ColumnF}}>>> \n\n<<<{{ColumnG}}>>> \n\n<<<{{ColumnH}}>>>\n\n<<<{{ColumnI}}>>>", «parse_mode»:«HTML»}

      А в таблице для сумм применил формат «Российский рубль», чтобы красиво с пробелами между разрядами и символ рубля)


      1. aRomanyuk Автор
        31.05.2019 10:34

        Максим, дайте, пожалуйста, посмотреть, как это выглядит в ТГ — имя бота


        1. maximax
          31.05.2019 10:40

          В личку ответил Вам