2015-06-23 2 views
1

У меня есть папка, Archive, где я бы хотел сохранить все мои письма до указанной даты.Переместить все темы, старше X с помощью gmail api

В пользовательском интерфейсе Gmail вы можете выполнить это, выполнив поиск, например «in: inbox before: 2012/01/01», выберите все, а затем «переместите» из раскрывающегося списка.

Я хотел бы сделать это с помощью gmail api. Как я могу это сделать? Нужно ли мне делать запрос, а затем перебирать каждый поток, чтобы переместить его? Или есть лучший способ?

Бонусные баллы за фрагмент кода/пример или ссылку на соответствующий раздел api docs.

ответ

2

Вы правы на деньги. Вам нужно получить каждый threadId и перемещать их по одному (может быть достигнуто пакетным запросом, но в любом случае они будут считать индивидуальные запросы к вашей квоте). Возможно, это еще одно решение с другим API, о котором я не знаю.

Но с помощью API Gmail вы должны сделать следующее.

Получить все threadIds из вашего почтового ящика, которое было получено до указанной даты.

GET https://www.googleapis.com/gmail/v1/users/me/threads?fields=nextPageToken%2Cthreads%2Fid&q=n%3Ainbox+before%3A2012%2F01%2F01&key={YOUR_API_KEY} 

Который даст вам следующие данные:

{ 
"threads": [ 
    { 
    "id": "12345" 
    }, 
    { 
    "id": "123456" 
    }, 
    { 
    . 
    . 
    . 
    } 
], 
"nextPageToken": "112233" 
} 

Используйте nextPageToken в следующем запросе, чтобы получить больше threadIds.

GET https://www.googleapis.com/gmail/v1/users/me/threads?pageToken=112233&fields=nextPageToken%2Cthreads%2Fid&q=n%3Ainbox+before%3A2012%2F01%2F01&key={YOUR_API_KEY} 

Повторите предыдущий шаг до тех пор, пока не nextPageToken в ответе.

Теперь у вас есть все темы, которые были активны до указанной даты (2012/01/01).

Изменяйте их один за другим. Удалите INBOX-метку и добавить архивно-метку

POST https://www.googleapis.com/gmail/v1/users/me/threads/12345/modify?key={YOUR_API_KEY} 

{ 
"addLabelIds": [ 
    "Archive" 
], 
"removeLabelIds": [ 
    "INBOX" 
] 
} 

Опять же, это может быть сделано в batch request, но все равно будет считать, как много отдельных.

В зависимости от того, сколько потоков у вас есть, вы можете делать больше запросов в секунду, чем позволяет Google. Если вы получите сообщение об ошибке, подождите некоторое время в своем коде и продолжайте.

Смежные вопросы