Skip to content

Python библиотека для запросов к API Mytarget

License

Notifications You must be signed in to change notification settings

pavelmaksimov/tapioca-mytarget

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Python обертка для запросов к API Mytarget

Написано на версии python 3.5

Установка

pip install git+https://github.com/pavelmaksimov/tapioca-wrapper#egg=tapioca-wrapper-2019.4.5
pip install git+https://github.com/pavelmaksimov/tapioca-mytarget.git

Документация

Содержание
  • Низкоуровневая обертка Mytarget
  • Высокоуровневая обертка MytargetLight
  • Методы для получения токена MytargetAuth

Mytarget - Низкоуровневая обертка

Написанна на базе Tapioca.

from tapioca_mytarget import Mytarget

api = Mytarget(access_token='{access-token}', 
               # Будет ожидать и повторять запросы, если закончится квота 
               retry_request_if_limit=True)

Генерация класса Mytarget происходит динамически, поэтому узнать о добавленных в схему методах, можно так.

print(dir(api))

Принцип работы Tapioca

Ресурсы API указываются в схеме в файле: tapioca_mytarget/resource_mapping.py.

(Некоторые ресурсы я уже добавил, но не все. Вы можете сделать это сами и потом прислать мне схему ;). Тут я просто объясняю, как это работает)

# tapioca_mytarget/resource_mapping.py

RESOURCE_MAPPING = {
    'user2': {
        'resource': 'v2/user.json',
        'docs': 'https://target.my.com/doc/apiv2/ru/resources/user.html'
    },
}

Указав ресурс под ключом user2, появляется соответствующий метод.

api.user2()

Доступны разные типы запросов. (Мною был протестирован только запрос get)

api.user2().get()
api.user2().post()
api.user2().put()
api.user2().patch()
api.user2().delete()
api.user2().options()

Пример, если ресурс требует указание данных.

# tapioca_mytarget/resource_mapping.py

RESOURCE_MAPPING = {
    'campaign2': {
        'resource': 'v2/campaigns/{campaign_id}.json',
        'docs': 'https://target.my.com/doc/apiv2/ru/resources/campaigns.campaign_id.html'
    },
}

Значение указанное в методе, будет подставленно в ссылку

api.campaign2(campaign_id='12345').get()

Доступные GET параметры для ресурса указываются в params.

api.campaign2(campaign_id='12345').get(params={'fields': 'id,name,status'})

Данные в POST запросе отправить можно так.

api.campaign2(campaign_id='12345').post(data={'...': '...'})

Открываем в браузере документацию метода.

api.user2().open_docs()

Посылаем запрос в браузере.

api.user2().open_in_browser()

Формат возвращаемых данных.

Данные возвращаются в формате объекта Tapioca.

result = api.user2().get()
print(result().status_code)
print(result().response)
print(result().response.headers)
print(result())

Преобразовать в JSON можно так:

result().data

Преобразование в DataFrame:

result().to_df()

MytargetLight - Высокоуровневая обертка

В API MyTarget есть ограничения для получения статистики под дням, не более чем за 92 дня и не более 200 объектов в одном запросе.

Для методов объектов в одном запросе можно запросить не более 50 объектов

Так вот, эта обертка закрывает эти ограничения, автоматически получая необходимые объекты, посылая нескололько запросов, укладываясь во все ограничения.

from tapioca_mytarget import MytargetLight

light_api = MytargetLight(
    access_token='{access-token}', 
    # Будет ожидать и повторять запросы, если закончится квота
    retry_request_if_limit=True,
    # Будет возвращать данные в формате dataframe
    as_dataframe=True)

Получение статистики

https://target.my.com/adv/api-marketing/doc/stat-v2

# По умолчанию будет получена стат. по всем кампаниям.
data = light_api.get_stats()
# То же самое
data = light_api.get_stats(object_type=light_api.CAMPAIGN_STATS)
# Статистика по всем баннерам.
data = light_api.get_stats(object_type=light_api.BANNER_STATS)
# Статистика аккаунта.
data = light_api.get_stats(object_type=light_api.USER_STATS)
# По умолчанию будет возвращена суммарная статистика за все время.
data = light_api.get_stats()
from datetime import datetime

# Если указать date_from и date_to, 
# то будет запрошена стата по дням за указанный период.
# В формате строки или datetime.
data = light_api.get_stats(
    date_from='2019-01-01',
    date_to=datetime(2019, 1, 1))
# Можно ограничить для теста кол-во объектов 
# по которым будет запрошена статистика.
data = light_api.get_stats(limit=2)
# Метод делает несколько запросов для поулчения данных.
# Регулировать сколько в одном запросе будет запрошено 
# объектов или за какой интервал можно так
df = light_api.get_stats(
    limit_in_request=10,  # в одном запросе получать не более 10 объектов
    interval=30,  # кол-во дней статистики в одном запросе)
# Вернуть данные в формате dataframe
df = light_api.get_stats(as_dataframe=True)

Получение объектов

# Получение всех кампаний
data = light_api.get_campaigns()

# Получение всех объявлений
data = light_api.get_banners()

# Выбрать возвращаемые поля
data = light_api.get_campaigns(params={'fields': 'id,name'}))

# Получить 5 случайных кампаний.
data = light_api.get_campaigns(limit=5)

# Получить в формате dataframe.
df = light_api.get_campaigns(as_dataframe=True)
# Доступ к низкоуровневой обертке.
regions = light_api.low_api.regions2().get()
regions().data

MytargetAuth - Операции с токенами

https://target.my.com/adv/api-marketing/doc/authorization

Для операций с токенами используйте методы в классе MytargetAuth. Я не смог сделать эти операции через низкоуровневую обертку, т.к. отправляемый параметр grand_type, Mytarget не видел. Поэтому пришлось сделать отдельным классом.

from tapioca_mytarget import MytargetAuth

CLIENT_ID = ''
CLIENT_SECRET = ''
REFRESH_TOKEN = ''

auth = Mytarget()

auth.get_client_token(
    client_id=CLIENT_ID,
    client_secret=CLIENT_SECRET, 
    permanent='false')

auth.refresh_token(
    client_id=CLIENT_ID, 
    client_secret=CLIENT_SECRET,
    refresh_token=REFRESH_TOKEN)

auth.get_agency_client_token(
    client_id=CLIENT_ID, 
    client_secret=CLIENT_SECRET, 
    agency_client_name='{agency_client_name}'))

auth.oauth_url(
    client_id=CLIENT_ID, 
    scopes=auth.OAUTH_ADS_SCOPES) 

auth.get_authorization_token(
    code='{code}', 
    client_id=CLIENT_ID)

auth.delete_tokens(
    client_id=CLIENT_ID, 
    client_secret=CLIENT_SECRET)

Зависимости

Автор

Павел Максимов

Связаться со мной можно в Телеграм и в Facebook

Удачи тебе, друг! Поставь звездочку ;)

Другое

  • Как работает обертка Tapioca

Releases

No releases published

Packages

No packages published

Languages