0

我正在使用 python 脚本从https://graph.microsoft.com中提取数据。对于每个已解析的用户,传递的输出会重复 (10) 次。缺少什么步骤只捕获请求一次?

    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%3A%2F%2Fgraph.microsoft.com%2F.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=%27D30%27)"
    response = requests.get(graph_uri, data=auth_body, headers={'Content-Type': "application/json", 'Authorization': 'Bearer ' + token})
    
    print(response.text)
    
    temp_usr_list = [
    'User.One@domain.com',
    'User.Two@domain.com'
    ]
    
    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)

输出:

{'user_principle_name': 'User.One@domain.com', 'send_count': '0', 'recv_count': '0', 'read_count': '0', 'assigned_products': 'MICROSOFT'},.. .

{'user_principle_name':'User.Two@domain.com','send_count':'0','recv_count':'0','read_count':'0','assigned_products':'MICROSOFT'},.. .

4

1 回答 1

1

尝试以这种格式运行一次,如果你得到相同的输出,请告诉我。

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%3A%2F%2Fgraph.microsoft.com%2F.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=%27D30%27)'
response = requests.get(graph_uri, data=auth_body,
                        headers={'Content-Type': 'application/json',
                        'Authorization': 'Bearer ' + token})

print response.text

temp_usr_list = ['User.One@domain.com', 'User.Two@domain.com']

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
于 2021-11-08T20:44:20.610 回答