Home > Mobile >  Using python to parse the getEmailActivityUserDetail report
Using python to parse the getEmailActivityUserDetail report

Time:11-17

I'm using a python script, to pull data from https://graph.microsoft.com. The output that is delivered duplicates itself (10) times for each parsed user. What step is missing to only capture the requested once?

    import requests
    import urllib
    import json
    import csv
    import os
    
    client_id = urllib.parse.quote_plus("#######################")
    client_secret = urllib.parse.quote_plus("######################")
    tenant = urllib.parse.quote_plus("#########################")
    
    auth_uri = "https://login.microsoftonline.com/"   tenant   "/oauth2/v2.0/token"
    auth_body = "grant_type=client_credentials&client_id="   client_id   "&client_secret="   client_secret   "&scope=https://graph.microsoft.com/.default"
    
    authorization = requests.post(auth_uri, data=auth_body, headers={"Content-Type": "application/x-www-form-urlencoded"})
    token = json.loads(authorization.content)['access_token']
    
    graph_uri = "https://graph.microsoft.com/v1.0/reports/getEmailActivityUserDetail(period='D30')"
    response = requests.get(graph_uri, data=auth_body, headers={'Content-Type': "application/json", 'Authorization': 'Bearer '   token})
    
    print(response.text)
    
    temp_usr_list = [
    '[email protected]',
    '[email protected]'
    ]
    
    report_user_list = []
    
    for line in response.iter_lines():
    
        line_fields = line.decode("utf-8").split(',')
    
        for entry in line_fields:
            if len(entry) < 1:
                continue
    
            if line_fields[1] in temp_usr_list:
                d = dict(
                    user_principle_name = line_fields[1],
                    send_count = line_fields[6],
                    recv_count = line_fields[7],
                    read_count = line_fields[8],
                    assigned_products = line_fields[9]
                )
    
                report_user_list.append(d)
    
    print(report_user_list)

OUTPUT:

{'user_principle_name': '[email protected]', 'send_count': '0', 'recv_count': '0', 'read_count': '0', 'assigned_products': 'MICROSOFT'},...

{'user_principle_name': '[email protected]', 'send_count': '0', 'recv_count': '0', 'read_count': '0', 'assigned_products': 'MICROSOFT'},...

CodePudding user response:

Try running it once in this format and let me know if you get the same output.

import requests
import urllib
import json
import csv
import os

# Parms

client_id = urllib.parse.quote_plus('#######################')
client_secret = urllib.parse.quote_plus('######################')
tenant = urllib.parse.quote_plus('#########################')

auth_uri = 'https://login.microsoftonline.com/'   tenant \
      '/oauth2/v2.0/token'
auth_body = 'grant_type=client_credentials&client_id='   client_id \
      '&client_secret='   client_secret \
      '&scope=https://graph.microsoft.com/.default'

authorization = requests.post(auth_uri, data=auth_body,
                              headers={'Content-Type': 'application/x-www-form-urlencoded'
                              })
token = json.loads(authorization.content)['access_token']

graph_uri = \
    'https://graph.microsoft.com/v1.0/reports/getEmailActivityUserDetail(period='D30')'
response = requests.get(graph_uri, data=auth_body,
                        headers={'Content-Type': 'application/json',
                        'Authorization': 'Bearer '   token})

print response.text

temp_usr_list = ['[email protected]', '[email protected]']

report_user_list = []

for line in response.iter_lines():

    line_fields = line.decode('utf-8').split(',')

    for entry in line_fields:
        if len(entry) < 1:
            continue

    if line_fields[1] in temp_usr_list:
        d = dict(user_principle_name=line_fields[1],
                 send_count=line_fields[6],
                 recv_count=line_fields[7],
                 read_count=line_fields[8],
                 assigned_products=line_fields[9])

        report_user_list.append(d)

print report_user_list

CodePudding user response:

@That1Guy Using the following code block, with the removed indent for 2nd 'if' check, this is the OUTPUT:

The User.One data is duplicated ten times:
{'user_principle_name': '[email protected]', 'send_count': '0', 'recv_count': '0', 'read_count': '0', 'assigned_products': 'OFFICE'}

The User.Two data is duplicated ten times:
{'user_principle_name': '[email protected]', 'send_count': '0', 'recv_count': '0', 'read_count': '0', 'assigned_products': 'OFFICE'}

print (response.text)

temp_usr_list = ['[email protected]','[email protected]']

report_user_list = []

for line in response.iter_lines():

    line_fields = line.decode('utf-8').split(',')

    for entry in line_fields:
        if len(entry) < 1:
            continue

    if line_fields[1] in temp_usr_list:
        d = dict(
            user_principle_name=line_fields[1],
            send_count=line_fields[6],
            recv_count=line_fields[7],
            read_count=line_fields[8],
            assigned_products=line_fields[9]
        )

    report_user_list.append(d)

print (report_user_list)
  • Related