Требования к виджету:
Для начала сформулирую, что за виджет я хотел сделать.
Итак, виджет должен иметь:
Вот, что получилось в итоге:
Пример в картинках:
А вот так вставляется в HTML:
Если заинтересовались, то приглашаю ознакомится с деталями реализации.
Установите права на запись для папки /inwidget/cache:
В папке /inwidget/cache виджет будет хранить кэшированные данные.
Если для директории будут отсутствовать права на запись, вы увидите ошибку ERROR
Настройте виджет:
Отредактируйте файл /inwidget/config.php
Получение данных через API:
Для того, чтобы получать данные через API нужно использовать т.н. «Конечные точки» описанные в документации. Это просто список URL адресов. Каждый адрес отвечает за выдачу определённых данных. Данные отдаются в формате JSON. Поскольку я хотел транслировать фотографии и статистику профиля, то я сразу пошёл в подраздел «пользователи». Авторизация для этого ненужна.
Вставьте виджет в сайт с помощью следующего кода:
Ещё примеры вставки с различным отображением виджета:
1 Кэширование:
Первая версия виджета записывала кэш в БД MySQL, но затем я одумался и перенёс кэш в файл.
Как итог — выше скорость работы, меньше телодвижений с настройками, и не у всех есть MySQL.
Кэш хранится в формате JSON. Актуальность проверяется по дате последней модификации файла. Если кэш устарел, то происходит запрос к API на получение актуальных данных.
Если при отправке запроса происходит ошибка, то она с пояснением записывается в кэш как обычный текст. Если в кэше обычный текст, то он выводится вместо виджета. Запросы к API не будут отправляться пока кэш снова не устареет. Тем самым виджет не будет нагружать сервер регулярными запросами к API, если что-то пойдёт не так. И можно будет понять, почему виджет перестал работать.
2 Исходный код:
Отправляем запросы cURL, записываем данные в кэш, рисуем виджет с помощью HTML CSS, пишем подробную инструкцию и занимаемся перфекционизмом ещё несколько бессонных ночей. В результате получилось вот это:
Репозиторий на GitHub >
Самое интересное происходит в файле inwidget.phpconfig.php – отвечает за настройки, а template.php за вёрстку.И, конечно, всё бесплатно. Всё для народа.
3 Как подключить виджет к сайту?:
Инструкция по шагам:
История версий:
Дата: 28 ноября 2021 г.
- Добавлен адаптивный режим. (подробнее)
- Добавлена GET переменная adaptive ( true / false, по умолчанию false ), которая позволяет включить адаптивный режим при обращении к скрипту.
- Добавлены скины: modern-blue, modern-green, modern-red, modern-orange, modern-grey, modern-black, modern-violet, modern-yellow.
- Добавлен параметр skinDefault в файл config.php. Позволяет задать скин по умолчанию.
- Добавлена GET переменная skin. Позволяет переопределить скин виджета при обращении к скрипту.
Дата: 18 февраля 2021 г.
- Для работы виджета теперь требует PHP >= 5.4.0 с поддержкой библиотеки cURL
- Добавлена проверка на минимальные системные требования
- Отправка запросов и прасинг ответов от Instagram теперь осуществляется через библиотеку instagram-php-scraper (https://github.com/postaddictme/instagram-php-scraper)
- Удалены оригинальные функции класса inWidget отвечающие за отправку запросов и проверку ответов сервера.
- ACCESS_TOKEN упразднён и больше нигде не используется. Также больше не требуется регистрация своего приложения.
- Упразднены ошибки с номерами: 103, 401, 404, 405, 406, 407.
- Появилась ошибка с номером 500 — которая в большинстве случаев отдаёт текст ошибки сгенерированной библиотекой instagram-php-scraper.
- Виджет теперь может выводить любой открытый профиль, а не только ваш.
- Вывод фотографий по тегам снова стал глобальным, т.е. в выдачу будут попадать фото и других пользователей, а не только ваши.
- Теперь можно указать несколько хештегов через запятую.
- Теперь можно блокировать нежелательные аккаунты других пользователей через опцию bannedLogins в файле confing.php. Логины необходимо перечислить через запятую. Опция будет полезна при работе с хештегами.
- Имя кэш-файла теперь совпадает с логином пользователя. Благодаря этому виджет можно использовать с несколькими аккаунтами одновременно. Вам лишь необходимо решить, как вы будете менять значение переменной LOGIN в файле confing.php
- Теперь виджет может получать от сервера любое количество фотографий. Т.е. значение параметра imgCount может быть существенно больше 30 шт. Мне удалось получить 1000 шт. за один раз, но я крайне не рекомендую вводить экстремальные значения.
Коды ошибок:
ERROR #101 — не удаётся получить доступ к файлу с кэшем. Нужно изменить права на директорию /inwidget/cache
Если файл не существует, виджет пытается создать его. Если файл существует, виджет пытается открыть его на чтение и запись.
Разработчикам плагинов и приложений:
Вы можете подключить код виджета и задать параметры через конструктор класса.При использовании примера ниже будьте внимательны с путями к файлам. Классы поддерживают автозагрузку.