CoderCastrov logo
CoderCastrov
Серверлесс

Этот серверный полиглот для парсинга - MetaCall

Этот серверный полиглот для парсинга - MetaCall
просмотров
3 мин чтение
#Серверлесс
Table Of Content

    MetaCall - это инструмент, который позволяет смешивать языки. Вы можете создавать полиглотные приложения с его помощью. В этой статье мы покажем вам пример полиглотного приложения пошагово, используя BeautifulSoup (Python) вместе с сервером Express (NodeJS), чтобы создать API для парсинга.

    Давайте вместе пройдем процесс установки, чтобы увидеть, насколько легко с ним работать. Сначала склонируйте репозиторий:

    git clone [https://github.com/metacall/beautifulsoup-express-example](https://github.com/metacall/beautifulsoup-express-example)

    Затем нам нужно установить MetaCall. MetaCall распространяется различными способами, включая Docker, Guix или Installer. Он высоко портативен, поэтому должен работать на любой системе Linux. Установим его:

    curl -sL [https://raw.githubusercontent.com/metacall/install/master/install.sh](https://raw.githubusercontent.com/metacall/install/master/install.sh) | sh

    Теперь у нас есть доступ к команде metacall, которая представляет собой полноценный интерфейс командной строки (CLI) для разработки полиглотных приложений.

    После этого мы должны установить зависимости. Со стороны Python нам нужно установить зависимость BeautifulSoup для парсинга и зависимость certify для запроса HTTPS-веб-страниц.

    metacall pip3 install beautifulsoup4 certifi

    Со стороны NodeJS нам нужно установить express для нашего сервера и metacall в качестве пакета для вызова Python.

    metacall npm install metacall express

    MetaCall использует свои собственные версии npm и pip, чтобы избежать загрязнения системы и обеспечить портабельность. Поэтому мы добавляем префикс metacall ко всем командам менеджера пакетов, хотя синтаксис остается тем же.

    Отлично. Мы закончили с утомительной и скучной частью. Пришло время изучить, что делает приложение и как магически смешиваются языки программирования.

    На стороне NodeJS мы видим скрипт [index.js](https://github.com/metacall/beautifulsoup-express-example/blob/master/index.js). Он реализует сервер Express, но также использует пакет metacall для загрузки скрипта [scraping.py](https://github.com/metacall/beautifulsoup-express-example/blob/master/scraping.py).

    Первые две строки (строки 2 и 5) загружают Python-скрипт. На этом этапе вы можете легко вызывать функции из scraping.py с помощью функции metacall. Мы делаем именно это в обработчике нашего REST API в сервере Express (строка 14). Мы используем metacall('links'), чтобы вызвать функцию links, которая реализована в скрипте [scraping.py](https://github.com/metacall/beautifulsoup-express-example/blob/master/scraping.py).

    Функция links принимает URL, который открывается и запрашивается для получения HTML (строки 8-17). Затем инициализируется BeautifulSoup для парсинга HTML (строка 20), а затем получаются все ссылки на веб-странице (строки 23-26).

    Легко-прелегко.

    Теперь пришло время протестировать это и увидеть, как это происходит. Чтобы запустить наше приложение, мы просто выполняем:

    metacall index.js

    MetaCall запустит index.js и запустит сервер Express. Логи будут передаваться в $HOME/metacall.log, а сервер будет слушать порт 3000, чтобы мы могли использовать curl для его запроса. Давайте спарсим все ссылки с веб-сайта NPM:

    curl localhost:3000/?url=https://www.npmjs.com/

    Если все прошло хорошо, мы должны увидеть в ответе что-то подобное:

    ["https://docs.npmjs.com","https://npm.community","https://go.npmjs.com/npm-pkgsafe","https://docs.npmjs.com","https://npm.community","https://www.npmjs.com/advisories","http://status.npmjs.org/","https://blog.npmjs.org/"]

    Для группы DevOps и в пользу контейнеризации мы также предоставляем версию в контейнере приложения, которая включает автоматическое тестирование. Его можно построить и запустить с помощью следующих команд:

    docker build -t metacall/beautifulsoup-express-example .
    docker run --rm -p 3000:3000 -it metacall/beautifulsoup-express-example

    Наконец, мы добавили файл [metacall.json](https://github.com/metacall/beautifulsoup-express-example/blob/master/metacall.json), который является конфигурацией, используемой для развертывания в MetaCall FaaS. В этой версии мы используем только Python-скрипт, потому что MetaCall FaaS способен экспортировать функции и автоматически генерировать API Gateway, поэтому сервер Express не нужен, и мы также получим более высокую производительность, потому что наш FaaS-сервер реализован с учетом высокой производительности и параллелизма.

    Таким образом, мы можем развернуть это как автономное приложение на любой платформе или через высокомасштабируемый FaaS. Если вы хотите попробовать платформу MetaCall FaaS, она находится в бета-тестировании и доступна только по предварительному доступу (вы можете запросить доступ на https://metacall.io).

    Для получения дополнительной информации о MetaCall или чтобы стать частью нашего сообщества, вы можете присоединиться к нашей Telegram Group.

    Исходный код лицензирован Apache 2.0 License и может быть найден по адресу: https://github.com/metacall/beautifulsoup-express-example.

    Увидимся, мета-программист!

    Висенте Эдуардо Феррер Гарсия. Основатель и технический директор MetaCall.