v1lezz/yadro-project

Задание 2

Closed this issue · 0 comments

Работа с REST API

Цель

Создать CLI приложение, которое скачивает с сайта http://xkcd.com описание всех комиксов, нормализуя слова. На выходе должен получиться json файл вида

{
   “101”: {
       “url”: “https://imgs.xkcd.com/comics/laser_scope.jpg”,
      “keywords”: [“follow”, “question”] 
   },
   “102”: {
   …
}

То есть карта комиксов по ID, в качестве значения - URL картинки и список ключевых слов.
Используем стандартный http package, URL-путь до источника должен быть задан в конфигурационном файле.
Приложение должно поддерживать опциональный аргумент -o, при котором вывод программы отправляется на экран и -n для ограничения количества комиксов.
Каждый комикс идентифицируется целым числом, которому соответствуют страница комикса, например, https://xkcd.com/2651/, URL для описания https://xkcd.com/2651/info.0.json и URL картинки, спрятанной в JSON-e.
Рекомендуем при отладке ограничить ID комикса, например до 100.
Проект необходимо организовать по пакетам (папкам).

Критерии приемки

  • Представить Го проект (@github.com), c Makefile. При запуске make без аргументов должен появиться скомпилированный xkcd.
  • В корневой директории лежит config.yaml файл, в котором пользователь может задать параметры: source_url - по умолчанию https://xkcd.com, db_file - по умолчанию database.json
  • Запуск xkcd создает database.json c описанной в задании структурой.
  • Также xkcd может принимать опциональный флаг -o чтобы выводить на экран JSON структуру и -n для вывода максимум n записей о комиксах.
  • Package based project layout, минимум три папки:
    • cmd/xkcd (здесь лежит main.go)
    • pkg/xkcd (клиент для xkcd.com)
    • pkg/words (типы и функции для нормализации)
    • pkg/database (типы и функции для работы с JSON DB, она же файл)

Материалы для ознакомления

HTTP & REST & JSON:

Package based project layout