ЗМІСТ ВСТУП...................................................... 7 1 АНАЛІЗ СУЧАСНОГО СТАНУ ПИТАННЯ ТА ОБГРУНТУВАННЯ ТЕХНІЧНОГО ЗАВДАННЯ НА РОБОТУ............................. 10 1.1 Суть технічної проблеми..............................10 1.1.1 Контекстна реклама............................... 10 1.1.2 Реклама в соціальних мережах.....................11 1.2 Існуючі способи вирішення технічної проблеми.........13 1.2.1 Система «Яндекс.Метрика».........................14 1.2.2 Система «Google Analytics».......................15 1.3 Висновки по розділу.................................. 16 2 РОЗРОБКА АРХІТЕКТУРИ СИСТЕМИ...........................18 2.1 Поняття архітектури програмного забезпечення.........18 2.2 Оцінка успішності кінцевої архітектури продукту......21 2.3 Якість програмного забезпечення......................24 2.4 Розробка архітектури програмного забезпечення........26 3 АНАЛІЗ ТА ВИБІР ТЕХНОЛОГІЙ РОЗРОБКИ....................28 3.1 Мова програмування Java..............................28 3.2 Фреймворк Spring..................................... 31 3.3 Бібліотека Hibernate................................. 33 4 РОЗРОБКА ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ......................35 4.1 Розробка структури системи...........................35 4.2 Розробка діаграм станів системи......................36 4.3 Проектування бази даних..............................38 5 РОЗРОБКА ДОКУМЕНТІВ НА СУПРОВОДЖЕННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ.............................................. 40 5.1 Інструкція програмісту...............................40
103
Embed
inmad.vntu.edu.uainmad.vntu.edu.ua/portal/static/B639EEB6-6A43-4952-A48D... · Web viewІншими словами, кожен варіант використання визначає
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
1 АНАЛІЗ СУЧАСНОГО СТАНУ ПИТАННЯ ТА ОБГРУНТУВАННЯ ТЕХНІЧНОГО ЗАВДАННЯ НА РОБОТУ......................................................................10
3.3 Бібліотека Hibernate..............................................................................................33
4 РОЗРОБКА ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ...................................................35
4.1 Розробка структури системи................................................................................35
4.2 Розробка діаграм станів системи.........................................................................36
4.3 Проектування бази даних.....................................................................................38
5 РОЗРОБКА ДОКУМЕНТІВ НА СУПРОВОДЖЕННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ...............................................................................................................40
7.1 Аналіз небезпечних та шкідливих виробничих факторів у виробничому приміщенні.....................................................................................................................49
6
7.2 Карта умов праці...................................................................................................53
7.3 Рекомендації щодо покращення умов праці......................................................55
7.4 Розрахунок точковим методом локалізованого штучного освітлення............55
Додаток А (Обов’язковий). Архітектура системи..........................................................65
Додаток Б (Обов’язковий). UML – діаграма послідовності завантаження кампанії до соц.мережі .........................................................................................................................66
Додаток В (Обов’язковий). UML – діаграма варіантів використання.........................67
Додаток Г (Обов’язковий). ERD – схема бази даних.....................................................68
Додаток Д (Додатковий). Завдання для розрахунку розділу охорони праці...............69
Додаток Е (Обов’язковий). Лістинг програми................................................................70
7
ВСТУП
Актуальність даної роботи підтверджується необхідністю швидкого
управління контекстною рекламою у соціальних мережах з використанням єдиної
централізованої системи, яка реалізує в собі як можливість перегляду статистики
рекламних компаній в різних соц. мережах, так і можливість створення нових
рекламних компаній з різноманітним таргетингом відповідно до цільової категорії.
Тому, враховуючи постійних ріст попиту на контекстну рекламу в соціальних
мережах, розробка подібної системи є напрочуд актуальною і така система може
мати великий попит у різноманітних рекламних фірм.
Проникнення Інтернету в повсякденне життя більшості активних людей
змінило відношення до інформації. За минулі десятиліття були сформовані нові
навички та моделі поведінки, підтримувані тим, що новини в Інтернеті свіжіші і
різноманітніші, картинки і анекдоти безкоштовні і нескінченні, опису товарів і
відгуки покупців більші, ніж у магазинах, та, крім того, є можливість знайти кращі
ціни.
Інтернет сформував у більшості користувачів уміння шукати і знаходити
потрібну інформацію. Саме це дало принципову можливість створити нову модель
інтерактивної двонаправленої рекламної комунікації – контекстну рекламу, коли
спочатку користувач запитує в пошуковій системі те, що йому потрібно, а у
відповідь отримує потрібну інформацію та рекламні оголошення, пов’язані з його
запитом. Відвідувач із задоволенням переглядає сам те, що йому необхідно,
переходить по посиланнях на сайти продавців і здійснює покупки.
Феноменальне зростання популярності контекстної реклами пов’язане з тим,
що вона корисна для користувачів і ефективна для рекламодавців. На даний момент
в світі не існує універсальної системи з управління контекстною рекламою в
соціальних мережах. Існують сервіси за допомогою яких можна відслідкувати
основні показники проходження кампанії – це сервіси “Яндекс.Метрика” та “Google
Analytics”[1].
8
Яндекс.Метрика — безкоштовний сервіс, призначений для оцінювання
відвідуваності веб-сайтів та аналізу поведінки користувачів. Сервіс інтегровано з
Яндекс.Директом та Яндекс.Маркетом і дозволяє групувати відвідувачів ресурсу за
декількома параметрами [2].
Google Analytics (скорочено GA) - безкоштовний сервіс, що надається Google
для створення детальної статистики відвідувачів веб-сайтів. Статистика збирається
на сервері Google, користувач тільки розміщує JS-код на сторінках свого сайту.
Безкоштовна версія обмежена 10 мільйонами переглядів сторінок на місяць.
Користувачам з активним акаунтом Google AdWords надається можливість
відстеження необмеженого числа переглядів сторінок [3].
Google AdWords — сервіс контекстної реклами від компанії Google,
орієнтований на рекламодавців. Надає зручний інтерфейс і набір інструментів для
створення ефективних рекламних оголошень. AdWords — флагманський рекламний
проект Google та основне джерело прибутків компанії [4].
Разом із зростанням попиту рекламодавців на контекстну рекламу, зростає
попит на технологічні рішення у реалізації управління контекстною рекламою у
вигляді готової програмної системи.
Метою даної роботи є аналіз розробки систем управління контекстною
рекламою та підвищення ефективності такої розробки.
Об’єктом даного дослідження є процес таргетування контекстної реклами в
соціальних мережах.
Предмет – методи та засоби розробки систем управління контекстною
рекламою.
Задачами даної роботи є дослідження існуючих програмних рішень
управління рекламними кампаніями у соц. мережах, дослідження існуючих підходів
до реалізації складних систем з розподіленою архітектурою та вибір найбільш
ефективної архітектури системи, розроблення програмного модуля взаємодії із
зовнішніми сервісам як частини системи таргетування контекстної реклами в
соціальних мережах.
9
Головним науково-технічним результатом роботи є розробка системи
управління контекстною рекламою в соціальних мережах, яка за рахунок ефективної
організації обміну та збереження даних забезпечує підвищення швидкодії та
розширення функціональних можливостей процесу таргетування контекстної
реклами в соціальних мережах.
Практичною цінністю даної роботи є створення програмного додатку для
створення, редагування та завантаження рекламних кампанії та їх статистики у соц.
мережах.
Дана робота була апробована у доповіді на XLII регіональній науково-
технічній конференції професорсько-викладацького складу, співробітників та
студентів університету з участю працівників науково-дослідних організацій та
інженерно-технічних працівників підприємств м. Вінниці та видана до друку.[5]
10
1 АНАЛІЗ СУЧАСНОГО СТАНУ ПИТАННЯ ТА ОБГРУНТУВАННЯ
ТЕХНІЧНОГО ЗАВДАННЯ НА РОБОТУ
1.1 Суть технічної проблеми
З'явившись в 1998 році, контекстна реклама раз і назавжди змінила
рекламний ринок і дала величезний імпульс до розвитку інтернет-економіки.
Технології контекстної реклами в даний момент можна вважати вершиною
рекламних технологій.
Основне завдання управління контекстною рекламою – зосередження усіх
можливих механізмів впливу на рекламну кампанію, збір та систематизація
статистичних даних використання даної кампанії в одному місці, що б забезпечило
підвищення швидкодії управління та збільшення кількості рекламних кампанії
Багатопотокова. Java підтримує багатопотокове програмування, що дає змогу
створювати програми, які паралельно виконують різні потоки команд. Це,
відповідно, дає змогу створювати інтерактивні мережні програми й ефективно
використовувати час процесора.
Архітектурно незалежна. Написане одного разу виконується скрізь, у будь-
який час і завжди. Для досягнення цієї цілі розробники зробили деякі жорсткі
обмеження у мові та віртуальній Java-машині.
Інтерпретована та високоефективна. Java дає змогу створювати міжплатфор-
мові програми завдяки їх компіляції у проміжковий байт-код, який може інтерпре-
туватися в будь-якій системі, забезпеченій віртуальною Java-машиною.
Розподілена. Java розроблена для розподіленого Internet-середовища. Java-
програма може обробляти протоколи TCP/IP та здійснювати доступ до ресурсів із
використанням URL. Більше того технологія RMI (Remote Method Invocation)
вносить новий рівень абстракції в програмування на основі клієнт-сервера,
забезпечуючи віддалений виклик методів об’єкта, який виконується на іншому
комп’ютері [16].
31
3.2 Фреймворк Spring
Spring - це легковаговий відкритий фреймворк, що спрощує розробку
корпоративних (J2EE) додатків і націлений на використання простих JavaBean
(звичайний Java клас, який ні від кого не успадковується і максимум, що робить - це
реалізує який-небудь інтерфейс) об'єктів .
Основні концепції Spring:
Легковагий. 2.5 мегабайт і програма не залежить від класів Spring-а,
тобто ми ніде не робимо наслідування від Spring і ніяк від нього не залежимо,
максимум ми можемо реалізовувати який-небудь інтерфейс. Виходить, що наш
додаток реалізує логіку, а за додатковими сервісами ми просто звертаємося до
Spring, викликаючи його методи. Причому виклик робиться таким чином, що ми в
основному викликаємо теж інтерфейси, а реалізація у цих інтерфейсів може бути
різна, тобто Spring пропонує кілька реалізацій для різних платформ, наприклад,
різна реалізація доступу до даних ітд. Також Spring можна використовувати в
маленьких додатках.
Інверсія контролю (або ін'єкція залежностей) (англ. IoC). Класи не
створюють своїх залежностей, вони їх отримують (через метод setter можна
отримати будь-який сервіс). Залежність? Тобто один клас залежить від іншого
класу. Наприклад, який-небудь наш сервіс виконує відправку пошти. Виходить, що
наш сервіс залежить від сервісу відправки пошти. У IoC суть полягає в тому, що ми
не створюємо сервіс відправки пошти (new MailService і далі виклик методів), а ми
його отримуємо. По суті ми отримуємо на вхід, наприклад, через setter або як
завгодно, але ми отримуємо Service і далі робимо з ним, що завгодно. Цікаво тут, те,
що ми можемо отримати будь MailService.
Аспектно-орієнтований. Використовується AspectJ. У Spring є своя
реалізація АОП, але все ж краще використовувати AspectJ. Якщо коротко, то АОП -
це виділення наскрізної функціональності в окремі модулі. Наприклад,
функціональність, яка займається управлінням транзакцією, тобто ця
функціональність виноситься в окремий модуль і додаток до функціональності теж
32
виноситься в окремий модуль. Потім визначаємо, що такий-то і такий-то метод
будуть брати участь у транзакції. Тобто це дозволяє локалізувати все, що пов'язано з
наскрізною функціональністю в одному місці.
Spring - це контейнер об'єктів. Це означає, що Spring зберігає в собі
об'єкти, створює і управляє їх життєвим циклом. По суті це означає, що ми ніде не
викликаємо оператор new (через Spring не викликає конструктор, тобто не
використовуємо new). Якщо нам знадобився якийсь об'єкт, то потрібно звертатися
до контейнера Spring і він його видає. Як він його видає - це все можна
налаштувати. Наприклад, або через new, або буде видавати Singleton, або буде
видавати з пулу об'єктів. IoC працює завдяки тому, що всі об'єкти знаходяться в
одному контейнері.
Фреймворк. Значить, що є можливість, компонувати складні додатки з
простих компонент, що налаштовуються в конфігураційних файлах. Також
фреймворк спрощує виконання та управління J2EE функціями в додатку (транзакції,
повідомлення, веб).
Архітектура Spring представлена схемою, зображеною на рис. 3.1 та включає
в себе наступні компоненти:
IoC – головний модуль;
AOP – Spring може підключитись до програми у будь якій точці та виконати
там потрібний код;
Service Abstraction – абстрагуємося завдяки тому, що ми викликаємо
інтерфейси Spring-а і викликаємо його методи для роботи. За рахунок цього
він абстрагується від усього іншого (Web remoting, EJB, JMS, Scheduling
ітп);
ORM – JPA, Hibernate технології для роботи з базами даних;
WEB – класи, які допомагают спростити розробку Web (авторизація, доступ
до бінів Spring-а із web);
MVC – створює web.
33
Рисунок 3.1 – Архітектурна схема фреймворка Spring
3.3 Бібліотека Hibernate
Hibernate — засіб відображення між об'єктами та реляційними структурами
(object-relational mapping, ORM) для платформи Java. Hibernate є вільним
програмним забезпеченням, яке поширюється на умовах GNU Lesser General Public
License. Hibernate надає легкий для використання каркас (фреймворк) для
відображення між об'єктно-орієнтованою моделлю даних і традиційною реляційною
базою даних.
Метою Hibernate є звільнення розробника від значних типових завдань із
програмування взаємодії з базою даних. Розробник може використовувати Hibernate
як при розробці з нуля, так і для вже існуючої бази даних.
Hibernate піклується про зв'язок класів з таблицями бази даних (і типів даних
мови програмування із типами даних SQL), і надає засоби автоматичної побудови
SQL запитів й зчитування/запису даних, і може значно зменшити час розробки, який
34
зазвичай витрачається на ручне написання типового SQL і JDBC коду. Hibernate
генерує SQL виклики і звільняє розробника від ручної обробки результуючого
набору даних, конвертації об'єктів і забезпечення сумісності із різними базами
даних.
Hibernate забезпечує прозору підтримку збереження даних, тобто їхньої
персистентності (англ. persistence) для «POJO»-об'єктів, себто для звичайних Java-
об'єктів; єдина сувора вимога до класу, що зберігається — конструктор за
замовчанням (Для коректної поведінки у деяких застосуваннях потрібно приділити
особливу увагу до методів equals() і hashCode().
Колекції об'єктів даних, як правило, зберігаються у вигляді колекцій Java-
об'єктів, таких як набір (Set) і список (List). Підтримуються узагальнені класи
(Generics), введені в Java 5. Hibernate може бути налаштований на «ледачі»
(відкладені) завантаження колекцій. Відкладені завантаження є варіантом за
замовчуванням, починаючи з Hibernate 3.
Зв'язані об'єкти можуть бути налаштовані на каскадні операції. Наприклад,
батьківський клас, Album (музичнй альбом), може бути налаштований на каскадне
збереження і/або видалення свого нащадка Track. Це може скоротити час розробки і
забезпечити цілісність. Функція перевірки зміни даних (dirty checking) дозволяє
уникнути непотрібного запису дій в базу даних, виконуючи SQL оновлення тільки
при зміні полів персистентних об'єктів.
Hibernate може використовуватись як у самостійних програмах Java, так і в
програмах Java EE, що виконуються на сервері (наприклад, сервлети чи EJB session
beans). Також він може включатись як додаткова можливість до інших мов
програмування. Наприклад, Adobe інтегрував Hibernate у дев'яту версію ColdFusion
(що запускається на серверах з підтримкою додатків J2EE) з рівнем абстракції нових
функцій і синтаксису, доданих до CFML.
35
4 РОЗРОБКА ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
4.1 Розробка структури системи
Згідно із завданням на бакалаврську дипломну роботу система, що
розробляється повинна мати графічний інтерфейс, модуль звертання до соціальної
мережі та інтеграційний модуль, який зв’язує два вищеназвані. Загальна структура
системи матиме вигляд наведений на рисунку 4.1.
Структура системи визначає її основні структурні елементи. Вона будується
на основі діаграми варіантів використання і визначення основних функцій.
Розроблювана система складається з наступних модулів:
програмний модуль роботи з графічним інтерфейсом;
програмний модуль сервісів системи;
програмний модуль бізнес-логіки;
програмний модуль інтеграції із зовнішніми сервісами (соціальними
мережами).
У свою чергу модуль бізнес логіки розділяється на:
програмний модуль бізнес-об’єктів;
програмний модуль бізнес-компонентів;
програмний модуль роботи з базою даних.
Модуль графічного інтерфейсу (Web App Module) відповідає за відображення
графічного інтерфейсу користувачу, передачу запитів від користувача до модуля
сервісів, обробку та відображення відповіді сервісів на запити. Він містить у собі
набір інтерактивних web-сторінок, які поєднуючись утворюють графічну оболонку
системи (GUI).
Модуль сервісів (Service App Module) містить у собі контролери обробки
запитів з графічного інтерфейсу. Він являється посередником між користувачем та
головною логікою співставляючи відповідні дії користувача на графічному
інтерфейсі до програмних функцій бізнес логіки.
36
Модуль бізнес-логіки (Business App Module) призначений для обробки
бізнес-об’єктів, роботи з базою даних, запитів до модулю інтеграції з зовнішніми
сервісами.
Модуль інтеграції (Social Integration Module) із зовнішніми сервісами
забезпечує завантаження рекламних даних до соціальних мереж, їх вивантаження,
редагування, видалення, збір статистики що до проходженню рекламних кампаній
та їх рейтинг.
Лістинг модулів системи представлений у додатку Е.
«system»Програма
«subsystem»Модуль графічного
інтерфейсу
«subsystem»Модуль сервісів
«subsystem»Модуль бізнес-логіки
«subsystem»Модуль інтеграції із
зовнішніми сервісами
«subsystem»Модуль бізнес-
об'єктів
«subsystem»Модуль бізнес-
компонентів
«subsystem»Модуль роботи з
базою даних
Рисунок 4.1 – Структура системи
4.2 Розробка діаграм станів системи
Діаграми станів системи включають в себе такі види діаграм:
діаграма послідовності;
діаграма прецендентів.
37
На діаграмах послідовностей буде показано обмін повідомленнями (тобто
виклик методів) між декількома об’єктами у окремій обмеженій часом ситуації.
Об’єкти є екземплярами класів. Основний наголос на діаграмах послідовностей
робиться на порядок і моментах часу, у які повідомлення надсилаються об’єктам.
На діаграмах послідовностей об’єкти буде показано вертикальними
штриховими лініями з назвою об’єкта над ними. Вісь часу також має вертикальний
напрямок, її спрямовано вниз, повідомлення, які надсилаються від одного об’єкта до
іншого, буде позначено стрілками з назвами операції і параметрів. Діаграма
послідовності зображена у додатку Б.
Діаграма прецедентів — в UML, діаграма, на якій зображено відношення між
акторами та прецедентами в системі. Також, перекладається як діаграма варіантів
використання. Діаграма прецедентів є графом, що складається з множини акторів,
прецедентів (варіантів використання) обмежених границею системи (прямокутник),
асоціацій між акторами та прецедентами, відношень серед прецедентів, та
відношень узагальнення між акторами. Діаграми прецедентів відображають
елементи моделі варіантів використання.
Суть даної діаграми полягає в наступному: проектована система
представляється у вигляді безлічі сутностей чи акторів, взаємодіючих із системою за
допомогою так званих варіантів використання. Варіант використання (use case)
служить для опису сервісів, що система надає актору. Іншими словами, кожен
варіант використання визначає деякий набір дій, чинений системою при діалозі з
актором. При цьому нічого не говориться про те, яким чином буде реалізована
взаємодія акторів із системою.
У мові UML є кілька стандартних видів відношень між акторами і варіантами
використання:
асоціації (association relationship);
включення (include relationship);
розширення (extend relationship);
узагальнення (generalization relationship).
38
При цьому загальні властивості варіантів використання можуть бути
представлені трьома різними способами, а саме — за допомогою відношень
включення, розширення і узагальнення.
Відношення асоціації – одне з фундаментальних понять у мові UML і в тій чи
іншій мірі використовується при побудові всіх графічних моделей систем у формі
канонічних діаграм.
Включення (include) у мові UML — це різновид відношення залежності між
базовим варіантом використання і його спеціальним випадком. При цьому
відношенням залежності (dependency) є таке відношення між двома елементами
моделі, при якому зміна одного елемента (незалежного) приводить до зміни іншого
елемента (залежного). Відношення розширення (extend) визначає взаємозв'язок
базового варіанта використання з іншим варіантом використання, функціональна
поведінка якого задіюється базовим не завжди, а тільки при виконанні додаткових
умов. Діаграма прецендентів системи зображена у додатку В.
4.3 Проектування бази даних
Перед тим як створювати таблиці, форми та інші об'єкти, потрібно задати
структуру бази даних. Добра структура бази даних є основою для створення
адекватної вимогам, ефективної бази даних. Сам процес проектування бази даних
являє собою складний процес проектування відображення опису предметної області
у схему внутрішньої моделі даних. Перебіг цього процесу є послідовністю більш
простих процесів проектування менш складних відображень. Ця послідовність у
процесі проектування весь час уточнюється, вдосконалюється таким чином, щоб
були визначені об'єкти, їх властивості та зв'язки, які будуть потрібні майбутнім
користувачам системи.
Етапи проектування (створення) бази даних можна розділити на такі:
визначення мети створення бази даних;
визначення таблиць, що їх повинна містити база даних;
39
визначення необхідних у таблиці полів;
завдання індивідуального значення кожному полю;
визначення зв'язків між таблицями;
відновлення структури бази даних;
додавання даних і створення запитів, форм, звітів та інших об'єктів
бази даних;
Відповідно до зв’язку об’єктів та запитів у соціальній мережі Facebook
представлених діаграмою, зображеною на рисунку 4.2, було спроектовано базу
даних MySQL зображену у вигляді ERD – діаграми у додатку Г.
Рисунок 4.2 – Діаграма об’єктів у соц. мережі Facebook5
40
5 РОЗРОБКА ДОКУМЕНТІВ НА СУПРОВОДЖЕННЯ ПРОГРАМНОГО
ЗАБЕЗПЕЧЕННЯ
5.1 Інструкція програмісту
Дана програмна система написана на мові програмування Java у середовищі
NetBeans 7.2.1. Система має головний Web-модуль, який виконується на стороні
сервера. За допомогою даного модуля здійснюється керування усіма функціями
системи через графічний інтерфейс.
Програма знаходиться на диску на якій є всі необхідні файли для роботи з
даною програмою.
Для запуску усієї системи, апаратне забезпечення, на якому власне і буде
здійснюватися запуск системи повинен мати встановлену Java Virtual Machine з
підтримкою Java Spring Framework під Apache Tomcat 7.0.26.
Мінімальна конфігурація комп’ютера необхідна для роботи програми:
Платформа: Windows, Linux, MacOS;
Разрядність системи: 32/64/86 bit;
Процессор з тактовой частотою не менше 1 ГГц;
ОЗП: 1 Гб і більше;
Реляційна база даних : MySQL, PostgreSQL, Oracle;
Web-броузер: Mozilla Firefox, Chrome, Opera, Internet Explorer;
Для запуску системи необхідно стартувати локальний сервер Apache Tomcat
із задеплоєними у папку Catalina ресурсами проекту.
5.2 Інструкція користувачеві
Для запуску системи необхідно відкрити web-браузер та ввести у його адресній стрічці наступну адресу: http :// localhost :8080/ appservice / , після чого на
Приклад такого тестування наведено нижче: import org.apache.log4j.Logger;import org.junit.*;import java.io.IOException;import java.util.Date;import java.util.concurrent.TimeUnit;
import static junit.framework.Assert.*;/** * Tests AdCampaignOperations */public class TestAdCampaignOperations extends AbstractExtendedFacebookApiTest { private static AdCampaignOperations adCampaignOperation; private static AdCampaignOperations adRTBCampaignOperation; private static Long CAMPAIGN_ID; private static Logger logger = Logger.getLogger(TestAdCampaignOperations.class); /** * Sets the parameters */ @BeforeClass public static void setUp() { adRTBCampaignOperation = extendedRTBFacebookTemplate.getAdCampaignOperation(); adCampaignOperation = extendedFacebookTemplate.getAdCampaignOperation(); AdCampaign campaign = adCampaignOperation.createCampaign(ACCOUNT_ID, "My First campaignCCC", 100, 0, 0, 0, 0); CAMPAIGN_ID = campaign.getId(); System.out.println("Campaign ID is " + CAMPAIGN_ID); }
/** * Prints out results */ @AfterClass public static void after() { System.out.println("In After"); System.out.println("Campaign ID is " + CAMPAIGN_ID); adCampaignOperation.deleteCampaign(CAMPAIGN_ID); }
@Test public void testCreateAdCampaignWithValidData() throws IOException { long accountId = ACCOUNT_ID; String name = "test"; long dailyBudget = 100L; logger.info("all attributes - valid"); AdCampaign campaign = adCampaignOperation.createCampaign(accountId, name, dailyBudget,
оптичний діапазон 0 0Мікроклімат у приміщенні: температура повітря, С 15 21 26 швидкість руху повітря, м/с 0,4 0,5 + відносна вологість повітря, % 75 61
Період року холоднийТемпература повітря для постійних робочих місць, С
26
Відносна вологість повітря, % 61Швидкість руху повітря, м/с 0,5Iнтенсивність теплового випромінювання, Вт/м² 203
Виробниче освітлення
ДБН
В.2
.5-2
8-20
06
Найменший розмір об’єкта розрізнення, мм 0,78Контраст об’єкта розрізнення з фоном великийХарактеристика фону середнійКПО для бокового, природного освітлення, % 1,6Освітленість для загального штучного освітлення, лк
/** * AdCampaignOperations implementation. Refer to <a * href="http://developers.facebook.com/docs/reference/ads-api/adcampaign/">Ad
75
* Campaign</a> * * @author Andrew Topolyuk */public class AdCampaignTemplate extends AbstractAdFacebookOperation implements AdCampaignOperations {
private static final String DAILYBUDGETSTR = "daily_budget"; private static final String LIFETIMEBUDGETSTR = "lifetime_budget"; private static final String CAMPAIGNSTATUSSTR = "campaign_status"; private static final String ADCAMPAIGNSSTR = "/adcampaigns"; private static final String DATASTR = "data"; private static final String DATEFORMATSTR = "&date_format=U"; private static final String OFFSETSTR = "offset"; private static final String ENDTIME = "end_time"; private static final String STARTTIME = "start_time";
/** * Constructor * * @param extendedGraphApi extended graph API * @param restTemplate test template for requests * @param isAuthorizedForUser yes or not */ public AdCampaignTemplate(ExtendedGraphApi extendedGraphApi, RestTemplate restTemplate, boolean isAuthorizedForUser) { super(isAuthorizedForUser); this.extendedGraphApi = extendedGraphApi; this.restTemplate = restTemplate; }
/** * Method to create the Campaign for a Account * * @param accountid The account Id for which the Campaign need to be created * @param name The name of the Campaign * @param dailyBudget The daily budget for the campaign * @param lifetimeBudget The lifetime budget of the campaign * @return the newly added Campaign * @throws ApiException if there is an error while communicating with * Facebook. */ @Override public AdCampaign createCampaign(long accountid, String name, long dailyBudget, long lifetimeBudget, long endDate, long startDate, int status) { MultiValueMap<String, Object> params = new LinkedMultiValueMap<String, Object>(); params.add("redownload", "1"); params.add("name", name); if (endDate > 0L) { params.add(ENDTIME, "" + endDate); } if (startDate > 0L) { params.add(STARTTIME, "" + startDate); } if (dailyBudget > 0) { params.add(DAILYBUDGETSTR, "" + dailyBudget); } if (lifetimeBudget > 0) { params.add(LIFETIMEBUDGETSTR, "" + lifetimeBudget); } if (status > 0) { params.add(CAMPAIGNSTATUSSTR, "" + status); } else { params.add(CAMPAIGNSTATUSSTR, "1"); } URIBuilder uriBuilder = URIBuilder.fromUri(ExtendedGraphApi.GRAPH_API_URL + ACT + accountid + ADCAMPAIGNSSTR); JsonNode jsonNode = this.restTemplate.postForObject(uriBuilder.build(), params, JsonNode.class);
/** * Delete the given Campaign */ @Override public boolean deleteCampaign(long campaignId) { this.extendedGraphApi.delete("" + campaignId); return true; } /** * Fetch the Campaign informations for the given Campaign Ids * * @param adCampaignId The array of Campaign ID * @param includeRemainingBudget whether to include the remaining budget in * the response * @return The array of Campaign information * @throws ApiException if there is an error while communicating with * Facebook. */ @Override public AdCampaign[] fetchCampaigns(Long[] adCampaignId, boolean includeRemainingBudget) { MultiValueMap<String, Object> params = new LinkedMultiValueMap<String, Object>(); params.add("include_budget_remaining", includeRemainingBudget ? "1" : "0"); AdCampaign[] campaigns = new AdCampaign[adCampaignId.length]; String campainIds = StringUtils.arrayToCommaDelimitedString(adCampaignId); URIBuilder uriBuilder = URIBuilder.fromUri(ExtendedGraphApi.GRAPH_API_URL + "?ids=" + campainIds + DATEFORMATSTR); JsonNode dataNode = this.restTemplate.getForObject(uriBuilder.build().toString(), JsonNode.class, params); for (int i = 0; i < adCampaignId.length; i++) { long campaignId = adCampaignId[i]; JsonNode tempNode = dataNode.get("" + campaignId); campaigns[i] = this.extendedGraphApi.deserializeData(tempNode, AdCampaign.class);
} return campaigns; }
@Override public AdCampaign updateCampaign(AdCampaign adCampaign) { if (adCampaign != null) { MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>(); createAdCampaignValueMap(adCampaign, params, "1");