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

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 expressMetaCall использует свои собственные версии 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.jsMetaCall запустит 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.
