Я работаю над этим около трех дней, и я настолько потерян, насколько могу.Я создал скрипт, который загружает одно сообщение из Gmail с помощью API Google.Мне нужно извлечь адреса To, CC и BCC из этого сообщения и сохранить их в списке.В конечном итоге мне потребуется обработать большое количество сообщений, но я даже не могу извлечь эти значения из одного сообщения.JSON-объект Gmail представляет собой смесь объектов dict и list:
msg (dict-8)
--historyID (str-1)
--id (str-1)
--internalDate (str-1)
--labelIds (list-1)
--payload (dict-2)
-- --headers (list-1)
-- -- --unnamed index 0 (dict-2)
-- -- -- --name:To (str-1)
-- -- -- --value:gself@gmail.com (str-1)
-- --mimeType (str-1)
--sizeEstimate (int-1)
--snippet (str-1)
--threadId (str-1)
Для моего проекта мне нужно значение адреса «Кому» (мне также в конечном итоге понадобятся данные CC и BCC, но я могуприменить все, что работает для «To», чтобы найти эти значения).Первоначальной попыткой было просто извлечь это значение, перейдя к нему, используя что-то вроде «msg ['payload'] ['headers'] [0] ['value']".Это прекрасно работает для этого одного сообщения, но структура JSON не выглядит непротиворечивой, и индекс для «Кому» в списке заголовков непредсказуем.Поэтому мне нужно найти способ поиска всех ключей name: To и извлечь элемент значения из этого элемента списка.Я немного над этим разбираюсь.
Я безуспешно пробовал несколько разных функций JSON в разных пакетах.Я посмотрел на Панд и думаю, что там может быть какая-то надежда, но ничего, что я мог бы понять.Я пробовал простой поиск по REGEX, но не могу найти объект dict.Я пытался сгладить диктовку, но это, похоже, не сильно помогло мне (даже когда плоские строки «Кому» содержат номер индекса, поэтому ключ несколько непредсказуем).Я пробовал разные циклы for, но мне было сложно переходить вниз по уровням.Я пробовал несколько разных итераторов, которые нашел в Интернете, но они, похоже, не работали для меня, хотя я подозреваю, что просто не знал, что делаю.продиктовать переменную, используя json.dumps, а затем выполнить регулярное выражение для поиска адресов электронной почты в этой переменной.Хотя я думаю, что это должно сработать, мне кажется, что должно быть более прямое решение, чем создание переменной и поиск в этой переменной.
Существует ли пакет, который поможет мне извлечь скрытый элемент (адреса электронной почты)из списка в объекте Gmail JSON?Может быть, я мог бы искать адреса электронной почты, которые появляются в любом из значений, но я не уверен, как искать на трех уровнях в структуре.Может быть, кто-то разработал функцию, которая может искать через объект JSON.Может быть, есть другое решение, и у меня просто нет достаточного опыта для самостоятельного создания.Я глубоко благодарен за любую помощь, которую я могу получить в этом.
Решение
Я думаю, что нашел решение и должен принести сообществу извинения за [гора] = [кротовина] .Оказывается, что единственная часть объекта JSON, которая изменяется, - это длина списка «Заголовки», и я легко могу пройти по этому списку и сохранить все адреса электронной почты с помощью этого:
for getAddr in msg['payload']['headers']:
msgAddr += (getAddr['value'])
Aдвухстрочное решение трехдневной задачи.Теперь я вернусь в свою пещеру ...