Как создать генератор мемов с помощью Twilio MMS, Imgflip и Sinatra

Автор: | 29.07.2026

Когда я вспоминаю самые смешные SMS-диалоги с моим 26-летним младшим братом, почти все они связаны с мемами. Если я стою перед выбором между двумя привлекательными вариантами, велика вероятность, что я получу мем «Почему бы и нет?». Работаешь над казалось бы невыполнимой задачей? Скоро прилетит «Непросто просто…». Запуск Twilio MMS заставил меня задуматься о процессе отправки этих мемов.

Что могло бы сделать ещё проще для моего брата отправку мемов мне? Я не хотел, чтобы ему приходилось отвлекаться от переписки для создания мема. Самый удобный способ — преобразовать предложение, отправленное по SMS, в картинку-мем и вернуть её на его телефон. Именно это я и реализовал к запуску Twilio MMS. Я хочу показать, как я это сделал, чтобы вы могли создать свои собственные варианты.

Если вы не можете дождаться, потому что очень хотите генерировать мемы с помощью SMS, я вас понимаю. Вы можете попробовать генератор мемов, отправив слово «list» на один из следующих номеров (в зависимости от того, находитесь ли вы в США или Канаде):

Теперь пришло время…

— Аккаунт Twilio — вы можете зарегистрироваться бесплатно здесь.

— Twilio-номер с поддержкой MMS (доступно в США и Канаде).

— Ruby.

— Библиотека Twilio Ruby.

— Sinatra.

— Аккаунт Imgflip — зарегистрируйтесь бесплатно здесь.

Приложение будет включать список шаблонов мемов, с которыми будут сопоставляться входящие сообщения. Например, входящее сообщение, начинающееся со слов «Готовьтесь», будет сопоставлено с мемом «Готовьтесь». Пользователь также может отправить слово «list», чтобы получить список доступных шаблонов мемов. Любое сообщение, которое не является словом «list» и не соответствует шаблону мема, вернёт текстовое сообщение о том, что мем не распознан, и предложение использовать ключевое слово «list» для поиска допустимых форматов.

Для реализации всего этого мы будем использовать сервер Sinatra с библиотекой twilio-ruby для обработки входящих сообщений. Если мем будет найден, мы сделаем REST-запрос к API Imgflip для создания мема и используем полученный URL изображения, чтобы отправить MMS обратно пользователю.

Если вы хотите увидеть это в действии до изучения кода, вы можете развернуть собственную версию этого проекта на Heroku с помощью удобной кнопки Heroku ниже. (Примечание: не забудьте указать учётные данные API Imgflip в разделе переменных окружения.)

Полный код проекта доступен, если вы хотите следовать за ним: Github.

Для начала работы над проектом вам понадобится установить Ruby и Ruby Gems. Если вы используете Mac, это уже должно быть установлено. Пользователям Windows рекомендую ознакомиться с Ruby Installer. Для пользователей Linux, которым может понадобиться освежить знания по управлению пакетами, вот руководство по использованию apt-get в Ubuntu.

Теперь, когда это требование выполнено, откройте окно терминала и создайте новую папку с названием «memegen». Эта директория будет содержать весь код приложения, поэтому перейдите в неё. Для работы проекта нам нужно установить несколько Ruby Gems:

Далее создадим файл, который будет содержать наше приложение:

Мы создадим генератор мемов с использованием Sinatra — лёгкого веб-фреймворка на Ruby. Также мы будем использовать gem Twilio Ruby для взаимодействия с API Twilio, чтобы упростить работу. Я также использую gem Unirest для выполнения REST-запросов к API Imgflip, но вы можете использовать другой способ, если у вас есть предпочтения (например, Rest Client).

Структура нашего проекта готова, давайте генерировать мемы!

Наш генератор мемов требует простой логики на стороне сервера, поэтому я выбрал Sinatra. Он очень лёгкий и позволяет сосредоточиться на главном — генерации мемов!

Давайте настроим сервер Sinatra с зависимостями twilio-ruby и unirest:

Эндпоинт, который мы настроили на /memegen, будет вызываться Twilio при поступлении входящего SMS на наш Twilio-номер. Начнём с обработки случая, когда пользователь отправляет слово «list». В этом случае мы вернём текстовое сообщение с перечнем поддерживаемых мемов. Вот список шаблонов мемов, которые мы будем поддерживать:

— Непросто просто _____

— Что, если я скажу вам _____

— Готовьтесь _____

— _____, но это не моё дело

— _____ все _____

— _____, у нас нет на это времени

— _____, мы имеем дело с крутым парнем

— _____, и всё пропало

Добавьте следующий код внутри эндпоинта /memegen:

Сначала мы сохраняем текст входящего сообщения в переменную, затем сравниваем сообщение, чтобы проверить, содержит ли оно слово «list». Обратите внимание, что мы убираем пробелы в начале и конце строки и приводим её к нижнему регистру, так как регистр не важен (мемы пишутся заглавными буквами). Если сообщение содержит только «list», мы используем библиотеку Twilio Ruby для возврата TwiML-ответа и отправки SMS пользователю с поддерживаемыми форматами мемов.

Далее напишем метод для сопоставления с нашими шаблонами мемов:

Мы используем регулярные выражения для сопоставления с нашими шаблонами мемов. Обратите внимание, что я допускаю необязательную пунктуацию, так как она может быть непоследовательной в текстовых сообщениях (другими словами, я допускаю лень). Для сопоставленных мемов мы возвращаем хэш, содержащий ID мема на Imgflip (вот список популярных ID мемов) и текст для верхней и нижней частей мема. Если сообщение не соответствует ни одному шаблону, мы возвращаем nil, чтобы позже проверить это и вернуть сообщение об ошибке.

Теперь мы можем использовать наш метод match_memes для входящего сообщения. Если оно не соответствует ни одному шаблону, мы отправим пользователю ответ с информацией о том, как получить список допустимых шаблонов. Если соответствие найдено, мы делаем REST-запрос к API Imgflip и сохраняем URL изображения из ответа.

Осталось только отправить мем обратно на телефон пользователя:

Вот и всё, теперь вы можете генерировать мемы с помощью простого текстового сообщения! Разместите код вашего сервера в общедоступном месте, чтобы Twilio мог связаться с вашим сервером. Я рекомендую использовать для этого Heroku, и это руководство покажет, как развернуть приложение Sinatra на Heroku. Вы можете посмотреть полный проект на Github.

Есть ещё одна вещь, которую нужно сделать, прежде чем генератор мемов заработает. Нам нужно подключить наше приложение к Twilio, чтобы входящие сообщения направлялись в нашу логику приложения. Войдите в Twilio и перейдите в раздел номеров. Нажмите на номер, который вы хотите использовать для генератора мемов, и настройте URL для сообщений так, чтобы он указывал на ваш недавно развёрнутый сервер Sinatra:

Теперь генератор мемов готов к работе. Отправьте допустимое предложение для мема, чтобы протестировать его!

Теперь, когда у нас есть работающий генератор мемов, мы можем расширить его, добавив ещё больше функций. Вот несколько идей, что можно добавить:

— Поддержка всех мемов.

— Поддержка пользовательских мемов.

— Вместо того чтобы отправлять мемы себе, почему бы не создать Meme-o-gram и отправлять мемы друзьям? Кстати, после создания не стесняйтесь отправлять их на номер (248) 686-3637, чтобы поделиться со мной!

Создание генератора мемов было очень увлекательным, и это демонстрирует один из творческих способов использования Twilio MMS. Учитывая, насколько просто им пользоваться, я уверен, что мой брат скоро начнёт бомбардировать меня мемами через MMS.

Мне очень интересно увидеть, что вы создадите с помощью MMS, поэтому не стесняйтесь делиться своими результатами со мной. Меня легко найти в Twitter @brentschooley или написать на почту brent@twilio.com.