Пишем Instagram виджет для сайта. Инструкция для любопытных. Готовое решение для всех остальных / Хабр

Требования к виджету:

Для начала сформулирую, что за виджет я хотел сделать.

Итак, виджет должен иметь:

Вот, что получилось в итоге:

Пример в картинках:

А вот так вставляется в 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 Как подключить виджет к сайту?:

Инструкция по шагам:

История версий:

inWidget-1.1.4

Дата: 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. Позволяет переопределить скин виджета при обращении к скрипту.
inWidget-1.1.0

Дата: 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
Если файл не существует, виджет пытается создать его. Если файл существует, виджет пытается открыть его на чтение и запись.

Разработчикам плагинов и приложений:


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

Гаджет:  «Сколько разрешать — час, два, четыре?» Что делать, если ребенок вечно в телефоне | Православие и мир
Оцените статью
GadgetManiac
Добавить комментарий