2017-10-07 5 views
0

を受けたすべての電子メールの日付にアクセス:http://beneathdata.com/how-to/email-behavior-analysis/GmailのAPI - すぐに私は私の25K +ここポストに似た電子メールを分析してみてくださいよ、これまで送ら/

言及したスクリプトは、IMAPを使用している間、私が実装しようとしていますGmail APIを使用してセキュリティを強化しています私はPython(とデータ分析のためのPandas)を使用していますが、Gmail APIの使用には一般的に問題があります。

ドキュメントから、私が使用して電子メールを読むことができるよ:

for msg in msgs['messages']: 
    m_id = msg['id'] # get id of individual message 
    message = service.users().messages().get(userId='me', id=m_id).execute() 
    payload = message['payload'] 
    header = payload['headers'] 

    for item in header: 
     if item['name'] == 'Date': 
      date = item['value'] 
      ** DATA STORAGE FUNCTIONS ETC ** 

が、これは明らかに非常に遅いです:

msgs = service.users().messages().list(userId='me', maxResults=500).execute() 

をして、ループを使用してデータにアクセスします。すべてのメッセージをループするだけでなく、list()APIコールを何度も呼び出す必要があります。

パフォーマンス向上の方法はありますか?例えばすべての不要なメッセージ情報ではなく、データを返すようにAPIに依頼します。

ありがとうございました。

参考:バッチにhttps://developers.google.com/resources/api-libraries/documentation/gmail/v1/python/latest/gmail_v1.users.messages.html

答えて

1

することができますバッチあなたのmessages.get()操作を、以下を参照してください。https://developers.google.com/gmail/api/guides/batch

あなたがバッチに100件のリクエストまで置くことができます。

「1回のリクエストではなく、n回のリクエストとしてまとめてn回のバッチ処理を行うことにより、1回のリクエストでn個のリクエストがカウントされます。リクエストレートの上限を下回るためには、ペースを調整する必要があります。ここで

は、IDSあなたの助けのためのid_list

msgs = [] 
def fetch(rid, response, exception): 
    if exception is not None: 
     print exception 
    else: 
     msgs.append(response) 

# Make a batch request 
batch = gmail.new_batch_http_request() 
for message_id in id_list: 
    t = gmail.users().messages().get(userId='me', id=message_id, format=fmt) 
    batch.add(t, callback=fetch) 

batch.execute(http=http) 
+0

感謝のリストによって与えられたメッセージを取得しますラフPythonの例です!バッチは私が探しているもののように聞こえる。しかし、これは依然としてメッセージ全体を取得し、すべてのメッセージをループしてデータを抽出します。特定のデータのみを返す方法を知っていますか?これをより効率的に行いますか?また、私はまだメッセージIDを取得するためにバッチコールの前にlist/list_nextを使う必要があると思いますか?乾杯。 – SLater01

+0

「特定のデータ」とは何ですか? (そして、はい、list()を使用してメサージIDのリストを取得し、次にget()を使用して詳細を取得します)。 – payne

+1

format = 'minimal'を設定していただきありがとうございます。これにより、メッセージ本体などが無視され、無駄なデータ転送が回避されます。 – SLater01

関連する問題