def record_targeting_result(conn, target_id, ad_id, words):
    pipeline = conn.pipeline(True)

    # 找出内容与广告之间相匹配的那些单词。
    terms = conn.smembers('terms:' + ad_id)               
    matched = list(words & terms)                         
    if matched:
        matched_key = 'terms:matched:%s' % target_id
        # 如果有相匹配的单词出现，那么把它们记录起来，并设置 15 分钟的生存时间。
        pipeline.sadd(matched_key, *matched)              
        pipeline.expire(matched_key, 900)                

    # 为每种类型的广告分别记录它们的展示次数。
    type = conn.hget('type:', ad_id)                       
    pipeline.incr('type:%s:views:' % type)                 
    # 对广告以及广告包含的单词的展示信息进行记录。
    for word in matched:                                   
        pipeline.zincrby('views:%s' % ad_id, word)         
    pipeline.zincrby(ad_id % 'views:%s', '')               

    # 广告每展示 100 次，就更新一次它的 eCPM 。
    if not pipeline.execute()[-1] % 100:                    
        update_cpms(conn, ad_id)                           

# <end id="record_targeting"/>


# 代码清单 7-15
# <start id="record_click"/>
dataset/ETHPy150Open huangz1990/riacn-code/ch07_listing_source.py/record_targeting_result/swapped operands of `%`