Skip to main content

Автоматическое уведомление о появлении радиодеталей на Digikey

Описание проблемы

Понадобилось тут как-то отслеживать появление некоторых позиций на Digikey (в эту же группу входят всякие кастомные разъёмчики от SAMTEC, например, под мезонин FMC) и в какой-то момент это надоело делать, открывая периодически сохраненную ссылку, а уж коль скоро не пристало последние годы заниматься Design Automation, то и тут пришлось в очередной раз сесть за «клавикорд».

ТЗ на проблему и черновик решения

NB!  Несмотря на богатый API Digikey [https://api-portal.digikey.com/] с удобным интерфейсом и кучей примеров начиная с bash & php и заканчивая Go & Swift [https://api-portal.digikey.com/node/3287], в первую очередь задал себе цель показать мощь и изящество инструментов для DOM-парсинга страниц и принципа «каждой задаче — свой инструмент».

Для решения поставленной задачи используем так ненавистный ЕЕ-сообществом и так любимый мной за быстрый старт (минимум кодинга) и множество примеров интерпретируемый язык PHP. Помимо самого интерпретатора нам понадобится библиотека PHP Simple HTML DOM Parser[http://simplehtmldom.sourceforge.net/], которая распарсит любой HTML с фиксированной структурой легко и непринуждённо, впрочем понадобится она номинально, поскольку устанавливать самому ничего не надо — она скачивается автоматически из мейкфайла, если отсутствует в директории запуска скрипта. 

На входе скрипта должны быть партнамберы электронных компонентов, которые нам надо периодически пробивать на наличие у поставщика, но мне удобнее давать конкретную ссылку, поэтому в файле partnumber.list будет просто список URL-адресов наблюдаемых компонентов в формате: каждый URL с новой строки (лишние пробелы в начале и в конце строк удаляются внутри скрипта).

На выходе скрипта желаем получить уведомление о появлении у поставщика компонентов из списка в partnumber.list в удобном для нас формате:

  • в виде письма на email
  • в виде сообщения в телеграм-клиенте
  • в виде push-уведомления на смартфоне, например через ранее обозреваемое приложение PushOver: http://idoka.ru/pushover-notifications-on-gadgets/

В самом теле сообщения хотим видеть что за компонент (партнамбер) появился, его количество в наличии и стоимость (в US$, для кого интересно в рублях — можно запрашивать через API текущий курс и пересчитывать налету).

Сам скрипт будем пускать по cron с подходящим нам периодом.

Подробности решения

Тут всё достаточно просто и лаконично: парсим файл со ссылками и запускаем цикл foreach. Далее, получив страницу через curl, используем всю мощь Simple HTML DOM Parser, а именно, нам надо найти в исходнике страницы якоря следующих элементов: партнамбер, количество в стоке и цена за 1 шт.

Партнамбер

Партнамбер можно вытянуть из нескольких мест файла, остановимся на одном, а именно:

Из этого кода следует, что нам надо сообщить simplehtmldom, что надо извлечь партнамбер из уникального для текущей страницы сочетания: содержимое тега h1, у которого атрибут  itemprop установлен в значении «model»:

Количество

В нотации simplehtmldom запишем действие «найти содержимое тега span с id=dkQty»: 

Цена

На языке simplehtmldom это означает найти содержимое тега span с якорем itemprop в значении price: 

 Также перед этим не лишним было убедиться что это единственный элемент на странице (обычно присутствуют оптовые цены за 10, 25, 50, 250шт, но у них другие якоря).

Итог работы скрипта

Возможные альтернативные применения

Модифицировав, скрипт можно использовать не только для начальной задачи, но и для множества иных, как то:

  • динамика изменения цены на компонент
  • отслеживание популярности компонента через отслеживание изменения количества в стоке
  • инверсная задача: отслеживание опустошения складских запасов (чтобы те, кто запасся заранее знали когда из под полы можно начать приторговывать. #лопата #смеяться #шутка)

Скачать

 

Листинг исходника

https://github.com/iDoka/digikey-cool-stuff/blob/master/digikey-stock-watcher.php

 

 

 

Читать далее

[opensource]: Мои скрипты для EDA/CAE/CAD

Приведенное ниже — описание к коллекции моих EDA-скриптов для работы с тулами для ASIC и FPGA

Конвертор из UCF в XDC

Конвертирует для ПЛИС Xilinx привязки ножек и стандартов из формата ucf (Xilinx ISE) в новый формат xdc (Xilinx Vivado). Использование:

В текущей директории появится файл FILENAME.xdc.

Пример входного ucf-файла

Пример сгенеренного утилитой xdc-файла

(далее…)

Читать далее

[opensource]: генератор распиновки СБИС для оформления даташитов и документации

Постановка задачи

Использование концепции единого источника, минимизация человеческого фактора при одновременной правке табличной информации об изменении/перемещении/исправлении_ошибок в списке внешних ножек СБИС и его графической репрезентации. Притом хорошо бы на выходе получать векторную картинку.

Решение

Исходными данными является (нативная для сборщика документации) таблица в формате asciidoc, которая sed‘ом и grep‘ом переводится в классический CSV (comma separated value), после чего средствами PHP переводим его в JSON, и уже JSON скармливаем скрипту рисования SVG (а если надо — и PNG).

PS: Перевод в JSON — опциональный, просто потому что формат удобный, быть может в будущем в каком-нибудь скрипте прийдётся работать со списком пинов, например, автосоздание либы с символьным обозначением для Altium/PCAD/KiKAD/Eagle.

Возможности

  • Поддержка следующего типа полей из оригинального asciidoc-описания:
    • Номер пина
    • Имя пина
    • Тип пина
    • Стандарт ввода-вывода
    • Описание пина
  • Возможность для любого из полей назначить свой цвет пина (DecidePinColour.php), на данный момент поддерживаются:
    • GND — земля
    • VDD — питание
    • VDDA — питание аналоговых цепей
    • CMOS — цифровые ножки общего назначения
    • LVDS — дифференциальные пары
    • JTAG — отладочные цепи
    • XTAL — тактирующие цепи
    • ANALOG — аналоговые выводы
  • Возможность задания произвольного прямоугольного корпуса — с произвольным соотношением пинов по ортогональным сторонам
  • Возможность опционального задания имени СБИС
  • Возможность задания типа и начертания шрифта для имени СБИС, номера пина, имени пина

(далее…)

Читать далее

nginx: советы и шпаргалки

Настройки безопасности

Чтобы не светить версии nginx и php делаем следующее: в файле /etc/nginx/nginx.conf в секции http дописываем:

а в файле /etc/php.ini дописываем:

Рестартуем сервисы:

Проверяем командой:

(далее…)

Читать далее

[Maria|My]SQL: советы и шпаргалки

Настройка /etc/my.cnf

Установка профайлера и анализатора настроек:

Запуск:

После запуска и анализа структур и производительности БД следует обратить внимание на замечания, начинающиеся с символов [!!] (например, на число фрагментированных таблиц) и на раздел Recommendations.

Пример:

(далее…)

Читать далее