Python если объект имеет атрибут - PullRequest
0 голосов
/ 21 февраля 2020

Я просмотрел некоторые ответы, но не смог найти именно то, что искал. Если есть ответ, который я мог бы пропустить, я с удовольствием посмотрю на него.

Я получаю объект analytics (аналитика - это имя объекта). Он построен на основе данных Google Analytics. Идея состоит в том, что я могу извлечь из этого объекта определенный отчет get_UserData (используя user_id) и использовать эти данные для завершения sh моей программы.

Проблема, с которой я столкнулся, заключается в том, что я должен пройти по 1200 пользователям и проверить, есть ли у каждого данные (другими словами, у меня есть длинный список возможных пользователей, но только некоторые люди были активными и только те, которые активны у людей есть данные в объекте)

Это может занять до 15 минут до завершения sh этого процесса, я хочу избежать необходимости тянуть get_UserData, потому что это занимает больше времени. Мой план состоит в том, чтобы обойти get_UserData, если у пользователя нет данных в analytics, чтобы сэкономить время

Я надеюсь, что это имеет смысл (По сути: я хочу сэкономить время, и является новым для объекта- ориентированное программирование)

КОД У меня есть:

def initialise_analytics_reporting():
    """Initializes the analytics reporting service object.

  Returns:
    an authorized analytics reporting service object.
  """

    # Parse command-line arguments.
    parser = argparse.ArgumentParser(
        formatter_class=argparse.RawDescriptionHelpFormatter,
        parents=[tools.argparser])
    flags = parser.parse_args([])

    # Set up a Flow object to be used if we need to authenticate.
    flow = client.flow_from_clientsecrets(
        "ga-credentials/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.com.json",
        scope='https://www.googleapis.com/auth/analytics.readonly',
        message=tools.message_if_missing(client_secrets_path))

    # Prepare credentials, and authorize HTTP object with them.
    # If the credentials don't exist or are invalid run through the native client
    # flow. The Storage object will ensure that if successful the good
    # credentials will get written back to a file.
    storage = file.Storage('ga-credentials/analyticsreporting.dat')
    credentials = storage.get()
    if credentials is None or credentials.invalid:
        credentials = tools.run_flow(flow, storage, flags)
    http = credentials.authorize(http=httplib2.Http())

    # Build the service object.
    analytics = build('analyticsreporting', 'v4', http=http)
    return analytics


def get_user_Activity(analytics, VIEW_ID, user_id, time):
    """
    :type user_id: str
    """

    # Use the Analytics Service Object to query the Analytics Reporting API V4.
    try:
        if hasattr(analytics.userActivity(), user_id): <<<<----- THIS IS WHAT I HAVE DONE
            x = analytics.userActivity().search(
                body={
                    "viewId": VIEW_ID,
                    "user": {
                        "type": "USER_ID",
                        "userId": user_id
                    },
                    "dateRange": {
                        "startDate": time,
                        "endDate": "yesterday"
                    },
                    "activityTypes": [
                        "PAGEVIEW", "EVENT"
                    ]
                }
            ).execute()
    except:
        pass
    return x

Но при запуске этого я не получаю никаких данных от пользователя, который активен ??

Пожалуйста, помогите.

1 Ответ

1 голос
/ 21 февраля 2020

hasattr функция предполагает, что вторым аргументом является имя атрибута, которое вы проверяете, а не значение атрибута. Например, если user_id='id', тест пройдёт успешно, только если userActivity имеет идентификатор атрибута (userActivity.id).

...