Написано на версии 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))
Ресурсы 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)
- requests
- pandas
- tapioca_wrapper
Павел Максимов
Связаться со мной можно в Телеграм и в Facebook
Удачи тебе, друг! Поставь звездочку ;)
- Как работает обертка Tapioca