Фреймворк: Django version 2.1.3
Клонировать репозиторий и настроить права доступа к скриптам запуска:
$ git clone https://github.com/alienJohny/Parallels-Scrollable-Banners.git
$ cd Parallels-Scrollable-Banners/psb/
$ chmod +x ./init.sh && ./init.sh
После этого должно запуститься веб-приложение по адресу: http://127.0.0.1:8000/
В дальнейшем запускать веб сервер можно командой $ ./run.sh
из директории проекта ../psb/
Тестировал сервис на 100 изображениях (далее баннерах) из датасета cifar10.
Каждому баннеру я приписываю N случайных категорий, N также генерируется случайно в диапозоне от 1 до 10.
Также к каждому баннеру я генерирую число P - то, сколько раз он должен показаться.
Далее я запускаю простой веб-сервер на Python для хранения изображений и эмуляции их получения с веб-сервера.
Сборка:
- Скачать архив с баннерами:
https://yadi.sk/d/IVpd0wEb-Ayo_g
- В директории, где находятся баннеры открыть Терминал и запустить веб-сервер:
python3 -m http.server 9000
- В этой же директории создать Python файл со следующим содержимым и запустить его:
import glob
import numpy as np
import random
BASE_URL = "http://0.0.0.0:9000/"
f = open("cfg.csv", "w")
header = "Image_URL;prepaid_shows_amount;" + \
";".join(["category" + str(n) for n in range(1, 11)])
f.write(header + "\n")
cats = ["truck", "dog", "cat", "ship", "bird", "airplane", "auto", "horse", "deer", "frog"]
for img in glob.glob("*.png"):
imgurl = BASE_URL + img
psa = str(random.randint(10, 5 * 1000))
ncats = random.randint(1, 10)
current_cats = list(np.random.choice(cats, ncats, replace=False))
entry = ";".join([imgurl, psa] + current_cats) + "\n"
f.write(entry)
f.close()
Если все сделано верно, создался файл cfg.csv. Его можно отправлять на submit в форму на домашней страницы веб-приложения PSB.
HTTP GET пример: http://127.0.0.1:8000/get?category=auto&category=trains
$ curl -X GET "http://127.0.0.1:8000/get?category=auto&category=trains"
В качестве способа я выбрал с вероятностью 33% заменять баннер на один из списка подходящих по категории.
Вероятность выбрал эвристически. Таким образом есть вероятность 66%, что баннер все же будет показан 2 раза подряд.
И 10% вероятность, что баннер будет заменем на другой 2 раза подряд.
Функционал реализован в классе DataManager
по ссылке.
Если конфигурационный файл не был загружен, но произошел запрос на /get, то возвращается страница 404 not found.