Как программно вставить другой элемент в тело? - PullRequest
1 голос
/ 05 ноября 2019

Я пытаюсь создать запрос на занятие тела в API Календаря Google через Python 3.8. Однако, когда я пытаюсь вставить новый элемент в запрос тела, я получаю неверный запрос и не могу его использовать.

Этот код работает:

SUBJECTA = '3131313636@resource.calendar.google.com'

SUBJECTB =  '34343334@resource.calendar.google.com'


    body = {
  "timeMin": now,
  "timeMax": nownext,
  "timeZone": 'America/New_York',
  "items": [{'id': SUBJECTA},{"id": SUBJECTB} ]
}

Хорошее телорезультат:

{'timeMin': '2019-11-05T11:42:21.354803Z', 
'timeMax': '2019-11-05T12:42:21.354823Z', 
'timeZone': 'America/New_York', 
'items': [{'id': '131313636@resource.calendar.google.com'}, 
{'id': '343334@resource.calendar.google.com'}]}

Тем не менее, при использовании этого кода:

items = "{'ID': '1313636@resource.calendar.google.com'},{'ID': '3383137@resource.calendar.google.com'},{'ID': '383733@resource.calendar.google.com'}"

  body = { 
  "timeMin": now,
  "timeMax": nownext,
  "timeZone": 'America/New_York',
  "items":  items 
}

Результаты Body содержат дополнительные кавычки в начальной и конечной позиции, не выполняя запрос:

{'timeMin': '2019-11-05T12:04:41.189784Z', 
'timeMax': '2019-11-05T13:04:41.189804Z', 
'timeZone': 'America/New_York', 
'items': ["{'ID': 13131313636@resource.calendar.google.com},{'ID': 
53333383137@resource.calendar.google.com},{'ID': 
831383733@resource.calendar.google.com},{'ID': 
33339373237@resource.calendar.google.com},{'ID': 
393935323035@resource.calendar.google.com}"]} 

Как правильно обращаться с ней и отправлять список предметов точным способом?

1 Ответ

2 голосов
/ 06 ноября 2019
  • В вашей ситуации значение items задается строкой "{'ID': '1313636@resource.calendar.google.com'},{'ID': '3383137@resource.calendar.google.com'},{'ID': '383733@resource.calendar.google.com'}".
  • Вы хотите использовать в качестве объекта, анализируя строковое значение с помощью python.
    • Ожидаемое значение результата: [{'ID': '1313636@resource.calendar.google.com'}, {'ID': '3383137@resource.calendar.google.com'}, {'ID': '383733@resource.calendar.google.com'}].
  • Вы уже можете использовать Calender API.

Если я понимаюправильно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Пример сценария:

import json  # Added

items = "{'ID': '1313636@resource.calendar.google.com'},{'ID': '3383137@resource.calendar.google.com'},{'ID': '383733@resource.calendar.google.com'}"

items = json.loads(("[" + items + "]").replace("\'", "\""))  # Added

body = { 
  "timeMin": now,
  "timeMax": nownext,
  "timeZone": 'America/New_York',
  "items": items
}

print(body)

Результат:

Если now и nownext являются значениями "now" и "nownext", соответственно, результат выглядит следующим образом.

{
  "timeMin": "now",
  "timeMax": "nownext",
  "timeZone": "America/New_York",
  "items": [
    {
      "ID": "1313636@resource.calendar.google.com"
    },
    {
      "ID": "3383137@resource.calendar.google.com"
    },
    {
      "ID": "383733@resource.calendar.google.com"
    }
  ]
}

Примечание:

  • Если вы можете получить идентификаторы как строковое значение, Iпорекомендуйте следующий метод в качестве примера сценария.

    ids = ['1313636@resource.calendar.google.com', '3383137@resource.calendar.google.com', '383733@resource.calendar.google.com']
    items = [{'ID': id} for id in ids]
    

Если я неправильно понял ваш вопрос и это не тот результат, который вам нужен, я приношу свои извинения.

...