Написано на версии 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().dataMytargetAuth - Операции с токенами
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