示例#1
0
def track_click_and_get_url(project_id, pubsub_client, article_id, articles,
                            user_id):
    """Tracks a link click based on article ID and returns the article URL

    Args:
        project_id: GCP project ID
        pubsub_client: Pubsub publisher client
        article_id: article ID which can be mapped to article metadata
        articles: list of dictionaries with article metadata
        user_id: ID of the user
    """

    # find the dictionary for the article clicked in the list of article dictionaries
    article_dict = next(item for item in articles
                        if item['article_id'] == article_id)
    article_url = article_dict['url']

    # populate click tracker dictionary
    click_tracker = {}
    click_tracker['user_id'] = user_id
    click_tracker['click_timestamp'] = datetime.datetime.now().strftime(
        '%Y-%m-%d %H:%M:%S')

    columns_to_track = ['article_id', 'title', 'publishedAt', 'sort']
    article_click_tracking = {}
    for field in article_dict:
        if field in columns_to_track:
            article_click_tracking[field] = article_dict[field]

    click_tracker['article_clicked'] = article_click_tracking

    print("""
    *********************
    click tracker: {}
    *********************
    """.format(json.dumps(click_tracker)))
    logger.info("""
    *********************
    click tracker: {}
    *********************
    """.format(json.dumps(click_tracker)))

    # publish message to pubsub topic
    publisher = Publisher(pubsub_client)
    publisher_path = pubsub_client.topic_path(project_id, 'news_clicks')
    publisher.pubsub_publish(publisher_path, json.dumps(click_tracker))

    return article_url
示例#2
0
def track_impressions(project_id, pubsub_client, articles, user_id):
    """Tracks articles that were presented to a given user regardless of whether they were clicked

    Args:
        project_id: GCP project ID
        pubsub_client: Pubsub publisher client
        articles: list of dictionaries with article metadata
        user_id: ID of the user
    """
    impression_tracker = {}
    impression_tracker['user_id'] = user_id
    impression_tracker['impression_timestamp'] = datetime.datetime.now(
    ).strftime('%Y-%m-%d %H:%M:%S')
    impression_tracker['articles'] = []
    columns_to_track = ['article_id', 'title', 'publishedAt', 'sort']
    for item in articles:
        article_impression_tracking = {}
        for field in item:
            if field in columns_to_track:
                article_impression_tracking[field] = item[field]
        impression_tracker['articles'].append(article_impression_tracking)

    print("""
    *********************
    impression tracker: {}
    *********************
    """.format(json.dumps(impression_tracker)))
    logger.info("""
    *********************
    impression tracker: {}
    *********************
    """.format(json.dumps(impression_tracker)))

    # publish message to pubsub topic
    publisher = Publisher(pubsub_client)
    publisher_path = pubsub_client.topic_path(project_id, 'news_impressions')
    publisher.pubsub_publish(publisher_path, json.dumps(impression_tracker))

    return 204