Подстановка дат в строку

Вместо дат хотелось бы вставить переменные с датами.

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()
→ Ссылка