Но начну с истории.
Сейчас я работаю на компанию со 100 процентным государственным участием, учредитель — одна уважаемая госкорпорация.
Год назад я запустил здесь новый процесс — участие в госзакупках. Да — да, вот так бывает, госкомпания не участвовала в госзакупках.
Попытки запустить это были, но безуспешные.
Когда я пришел работать в эту компанию, закупки кто-то мониторил, но отдел продаж не получал конкурсов от этого кого-то, хотя им были высланы ключевые слова по тематике департамента. Процесс был сломан.
Я был в недоумении некоторое время, пока не решил перезапустить этот процесс, выпросив оплатить аккаунт на Контур.Закупках.
Всё настроил и стал мониторить сам. Находил конкурсы отдавал в отдел продаж, завертелось, закружилось.
Людям нравится когда что-то происходит. Отдел продаж загорелся.
Если кратко описать, что нужно, чтобы запустить процесс участия в госзакупках, то вам надо:
1. Настроить мониторинг госзакупок
2. Чтобы кто то отбирал проекты, понимая ФЗ и читая все требования. Убирать лишнее.
3. Вести учет состояния проектов в едином интерфейсе.
4. Готовить заявку на участие в конкурсе, понимая структуру вашей цены
5. Иметь аккаунты на электронных торговых площадках (ЭТП)
6. Уметь писать жалобы в ФАС на снос конкурсов (юрист)
7. Проводить аналитику своего, извиняюсь, рынка
Мне очень помогает аккаунт в Контур.Закупки делать п.п. 1-3 и 7.
Но аккаунт у них и подобных сервисов — платный. И не все могут себе позволить приобретение и сидят, мучаются.
Вот для вас, мои будущие миллионеры, Я набросал инструкцию, как сделать отбор конкурсов более удобным и совсем бесплатным.
- Возмём RSS-поток конкурсов от zakupki.gov.ru
- Будем мониторить этот RSS с помощью IFTTT и отправлять в Google SpreadSheets (они же Google.Таблицы)
- Отформатируем таблицы так, чтобы там появлялось название конкурса и максимальная цена контракта
В итоге получим вот такую табличку, данные в которой будут обновляться самостоятельно:
Поехали!
1. RSS-поток конкурсов от zakupki.gov.ru
Заходите zakupki.gov.ru/epz/order/extendedsearch/search.html
Важно именно из extendedsearch, потому как результаты, выдаваемые quicksearch отличаются от результатов extended. В частности в quicksearch система не подставляет название заказчика, а его мы хотим вывести в табличку. Пользуемся extended.
Итак, в форме поиска вводим:
— искомые слова для поиска конкурса. В моём случае это «оплаты проезда»
— этап закупки. Нас интересуют «Подача заявки», остальные отключаем
Нажимаем «Найти».
Система выдаст результаты поиска. Если это то, что нужно, получаем ленту RSS с обновлениями по данному запросу, нажимая значок RSS.
Скопируйте себе URL RSS-ленты [ в нашем случае — zakupki.gov.ru/tinyurl/ab14226a-5b2a-4de6-b283-112b6972f6bc ]
2. Мониторинг RSS с помощью IFTTT
Зайдите в IFTTT.
Если не зарегистрированы, то сделайте это и заходите в «My Applets»
Нажимаем кнопку «New Applet» для создания нового апплета (триггер и действие).
На следующем экране нажмите на часть "+ this", система предложит выбрать сервис. В поисковой строке наберите «rss» или найдите триггер «RSS Feed» в ленте сервисов.
Кликните на квадрат «RSS Feed».
Появятся 2 опции, выбираем «New feed item».
Триггер сработает, если в ленте RSS появится новый объект
<item>ТЕЛО_ОБЪЕКТА</item>
.На экране создания триггера вставляем URL нашей RSS-ленты и нажимаем «Create trigger».
Далее нажимаем кнопку "+ that".
На экране поиска действий пишем «sheets» и кликаем на найденный action.
На следующем экране выбираем вариант «Add row to spreadsheet» (добавить строку в таблицу)
Конфигурируем IFTT, как заполнять таблицу.
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».
Всё, правило создано, таблица начнёт заполняться, как только будет появляться новые конкурсы в ленте RSS.
3. Отформатируем таблицы
Вставим заголовки над столбцами. Вот что мы видим:
Осталось выделить из 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>"));"«";"");"»";"")))
Формула будет парсить столбец 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)
)))
И последний штрих. Бывает, ссылка приходит в двух видах. С доменом и без:
<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))
))
Столбцы C,D,E можно свернуть, чтобы не мешались.
Приятного пользования!
Комментарии (19)
servekon
28.05.2019 22:41Вы в курсе, что через некоторое время RSS канал становится недоступным, если с одного IP идут множественные запросы?
aRomanyuk Автор
29.05.2019 11:36Это же зависит от того скрипта, который выдает этот RSS )) Если скрипт не реализует такую логику, то он отрабатывает все запросы. К примеру, у меня на порталах скрипт именно простой, его хоть дидось с одного IP, он будет исправно генерировать нужный XML.
Если Вы конкретно про RSS Госзакупок, то такая табличка по другой теме (мониторинг транспорта) у меня работает с прошлого декабря. При этом в одну табличку пишут сразу 2 правила IFTTT (то есть несколько RSS-госзакупок). В табличке уже сотни записей.
То есть пока что такая проблема мне не встречалась. Расскажите, пожалуйста, если знаете что-то.servekon
29.05.2019 17:41Я мониторил по теме ЖКХ и там каждый день по сотни записей. Читал через
TinyRssTiny Tiny RSS
, потом начала выскакивать ошибка обновления канала. Если напрямую через бразуер смотришь — всё отображается корректно.aRomanyuk Автор
31.05.2019 10:39То есть проблемы были именно с лентой закупок. Это плохо.
С другой стороны, ошибку могли пофиксить на стороне Закупок.
Либо сам Tiny RSS мог иметь какое-то неадекватно большое количество запросов или другие косяки, а IFTTT может их не иметь.
Я к тому, что надо тестировать на часто обновляемой ленте. Я мониторю системы мониторинга транспорта, там обновлений не так много.
Попробуете, или я сам?
PendalFF
29.05.2019 15:27Поддержу автора хотя бы комментом.
Настроил пару триггеров по разным ключевым словам, будем посмотреть на результат
maximax
29.05.2019 22:31Алексей, спасибо!
Хочу пойти дальше и настроил еще один IFTTT-рецепт — если в этой таблице появилась новая строка, то делаем веб-запрос (триггер webhook) с методом POST и адресом api.telegram.org/bot[идентификатор бота, полученный от @botfather в Телеграме]/sendMessage, а посылаем следующее: {«chat_id»:"@[название канала, в котором наш бот числится админом и может туда постить]",«text»:" {{ColumnF}} {{ColumnG}} {{ColumnH}} {{ColumnI}}"}
Предварительно создаем бота и канал, в который добавляем бота админом.
Получился канал для широкой аудитории, куда падают свежие конкурсы по ключевым словам из определенной отрасли. Жду завтрашних конкурсов, чтобы протестировать, как это заработает))maximax
29.05.2019 23:08Кавычки в передаваемом тексте воспринимаются FTTT как закрывающие, поэтому строка, уходящая боту обрезается. Помогло экранирование символами <<<{{ColumnF}} >>>
maximax
30.05.2019 00:07Докрутил, формат сообщения такой:
{«chat_id»:"@[название канала]",«text»:" <<<{{ColumnF}}>>> \n\n<<<{{ColumnG}}>>> \n\n<<<{{ColumnH}}>>>\n\n<<<{{ColumnI}}>>>", «parse_mode»:«HTML»}
А в таблице для сумм применил формат «Российский рубль», чтобы красиво с пробелами между разрядами и символ рубля)
aRomanyuk Автор
Поддержите плюсом, если добавляете инструкцию в избранное.
Вам это просто, мне приятно.
akryukov
Добавить в избранное может любой, а поставить плюс — не только лишь все.
aRomanyuk Автор
Лишь все, кто придумали в голову мысль об этом или лишь другом
roscomtheend
Это неверная информация, плюс могут поставить лишь имеющие карму от +5.
aRomanyuk Автор
Чистая правда. Я вот пока не могу