Как отобразить изображение пользователя в Microsoft Graph, используя python - PullRequest
0 голосов
/ 15 апреля 2020

Я пытался использовать GET https://graph.microsoft.com/v1.0/me/photo/$value, чтобы получить изображение / фотографию пользователя, но он возвращает только код состояния HTTP 200. Как я могу получить двоичные данные?

Я также пытался использовать content.property , как предложено в аналогичном посте , но получить .format не атрибут диктата.

@app.route("/photo")
def get_photo():
    token = _get_token_from_cache(app_config.SCOPE)
    if not token:
        return redirect(url_for("login"))
    photo = requests.get(app_config.PHOTO_ENDPOINT,  
            headers={'Authorization': 'Bearer ' + token['access_token']})
    print(photo.status_code)
    return photo

1 Ответ

0 голосов
/ 15 апреля 2020

Получает фотографию профиля и дополнительно сохраняет локальную копию. Возвращает кортеж необработанных данных фотографии, код состояния HTTP, тип содержимого и сохраненное имя файла. Обратитесь к этому образцу .

def profile_photo(session, *, user_id='me', save_as=None):
    """Get profile photo, and optionally save a local copy.
    session = requests.Session() instance with Graph access token
    user_id = Graph id value for the user, or 'me' (default) for current user
    save_as = optional filename to save the photo locally. Should not include an
              extension - the extension is determined by photo's content type.
    Returns a tuple of the photo (raw data), HTTP status code, content type, saved filename.
    """

    endpoint = 'me/photo/$value' if user_id == 'me' else f'users/{user_id}/$value'
    photo_response = session.get(api_endpoint(endpoint),
                                 stream=True)
    photo_status_code = photo_response.status_code
    if photo_response.ok:
        photo = photo_response.raw.read()
        # note we remove /$value from endpoint to get metadata endpoint
        metadata_response = session.get(api_endpoint(endpoint[:-7]))
        content_type = metadata_response.json().get('@odata.mediaContentType', '')
    else:
        photo = ''
        content_type = ''

    if photo and save_as:
        extension = content_type.split('/')[1]
        filename = save_as + '.' + extension
        with open(filename, 'wb') as fhandle:
            fhandle.write(photo)
    else:
        filename = ''

    return (photo, photo_status_code, content_type, filename)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...