Подстановка дат в строку
Вместо дат хотелось бы вставить переменные с датами.
import requests
import pandas as pd
import numpy as np
from yaml import load
from functools import reduce
import xlsxwriter
from numpy import array
import matplotlib.pyplot as plt
startDate = "2020-06-10"
endDate = "2020-06-12"
API_URL = 'https://mycoinstats.com/admin_api/v1/campaigns'
API_URL = 'https://mycoinstats.com/admin_api/v1/report/build'
# #API_URL = 'https://mycoinstats.com/admin_api/v1/clicks/log'
#API_URL = 'https://mycoinstats.com/admin_api/v1/report/labels'
def get_data():
headers = {
'Api-Key': 'здесь ключ',
'Content-Type': 'application/json'}
params = {
# 'campaign_id':1,
# 'label_name':'News',
# 'ref_name' : '2bxwrb84hqnwbb8shsq9cgw2rs5kzwzj'}
#"range": '{"from" : "2020-06-10", "to" : "2020-06-12" , "timezone":"Europe/Madrid"}',
#"range": "{\n \"interval\": \"custom_date_range\",\n \"timezone\": \"Europe/Moscow\",\n \"from\": \"2020-06-11\",\n \"to\": \"2020-06-12\"\n },\n
#"limit": 50,
"offset": 0,
#'grouping' :['ts', 'landing'],
'metrics':['clicks', 'bot_share', 'cr']}
#'filters': [{'name' :4, 'operator':'EQUALS', 'expression' : 4],['name' :'stream_id', 'operator' :'EQUALS', 'expression':8]}]}
payload = "{\n \"range\": {\n \"interval\": \"custom_date_range\",\n \"timezone\": \"Europe/Moscow\",\n \"from\": \"2020-06-10\",\n \"to\": \"2020-06-12\"\n },\n \"columns\": [],\n \"metrics\": [\n \"clicks\",\n \"campaign_unique_clicks\"\n ],\n \"grouping\": [\n \"device_model\"\n ],\n \"filters\": [],\n \"sort\": [\n {\n \"name\": \"clicks\",\n \"order\": \"desc\"\n }\n ],\n \"summary\": false,\n \"limit\": 50,\n \"offset\": 0\n}"
#data = requests.get(API_URL, headers = headers, params = params).json()
data = requests.post(API_URL, headers = headers, data = payload).json()
return data
df = get_data()
df
Пробовала регулярное выражение: \"from\": %s или \"from\": {} - не работает
payload = "{\n \"range\": {\n \"interval\": \"custom_date_range\",\n \"timezone\": \"Europe/Moscow\",\n \"from\": \"2020-06-10\",\n \"to\": \"2020-06-12\"\n },\n \"columns\": [],\n \"metrics\": [\n \"clicks\",\n \"campaign_unique_clicks\"\n ],\n \"grouping\": [\n \"device_model\"\n ],\n \"filters\": [],\n \"sort\": [\n {\n \"name\": \"clicks\",\n \"order\": \"desc\"\n }\n ],\n \"summary\": false,\n \"limit\": 50,\n \"offset\": 0\n}"
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
payload у вас - это json строка. Удобнее изначально хранить эти данные как словарь, подставлять даты, потом преобразовывать в json, и потом уже отправлять.
# Просто вывел строку payload через print, и поменял false на False -
# получился обычный словарь
payload = {
"range": {
"interval": "custom_date_range",
"timezone": "Europe/Moscow",
"from": "2020-06-10",
"to": "2020-06-12"
},
"columns": [],
"metrics": [
"clicks",
"campaign_unique_clicks"
],
"grouping": [
"device_model"
],
"filters": [],
"sort": [
{
"name": "clicks",
"order": "desc"
}
],
"summary": False,
"limit": 50,
"offset": 0
}
# Даты можно подставить другие
payload['range']['from'] = "2020-06-01"
payload['range']['to'] = "2020-06-30"
# При передаче через параметр json функция post сама преобразует данные в json
data = requests.post(API_URL, headers=headers, json=payload).json()