123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- # This is a sample Python script.
- # Press ⌃R to execute it or replace it with your code.
- # Press Double ⇧ to search everywhere for classes, files, tool windows, actions, and settings.
- import hashlib
- import json
- import os
- import subprocess
- import time
- import traceback
- import urllib
- import datetime
- import requests
- import pymysql
- from contextlib import contextmanager
- from sqlalchemy import create_engine, Numeric, Float
- from sqlalchemy.orm import sessionmaker
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy import Column, Integer, String, DateTime, Text
- import ssl
- ssl._create_default_https_context = ssl._create_unverified_context
- HOST = 'rm-bp1nx318263k95yo3318.mysql.rds.aliyuncs.com'
- PORT = '3306'
- DATABASE = 'uservideo_bi'
- USERNAME = 'majin'
- PASSWORD = 'E5d2c960fdf3f5f0be5a27eea2f906ef'
- DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=USERNAME,
- password=PASSWORD,
- host=HOST, port=PORT,
- db=DATABASE)
- # HOST = 'rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com'
- # PORT = '3306'
- # DATABASE = 'mpad'
- # USERNAME = 'majin'
- # PASSWORD = 'e5d2c960fdf3f5f0be5a27eea2f906ef'
- # DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=USERNAME,
- # password=PASSWORD,
- # host=HOST, port=PORT,
- # db=DATABASE)
- Base = declarative_base()
- class WECHAT_AD_PUBLISHER_ADUNIT_GENERAL(Base):
- __tablename__ = 'wechat_ad_publisher_adunit_general'
- id = Column(Integer, primary_key=True)
- ad_unit_id = Column(String(1000))
- ad_unit_name = Column(String(1000))
- ad_slot = Column(String(1000))
- click_count = Column(Integer, default=0)
- click_rate = Column(Float, default=0.0)
- date = Column(String(1000))
- ecpm = Column(String(1000))
- exposure_count = Column(Integer, default=0)
- exposure_rate = Column(Float, default=0.0)
- income = Column(Integer, default=0)
- req_succ_count = Column(Integer, default=0)
- app_type = Column(Integer, default=0)
- slot_str = Column(String(1000))
- date_str = Column(String(1000))
- def __init__(self):
- print(f"AUNIT_GENERAL.init app_type = {self.app_type}, ad_unit_id = {self.ad_unit_id}")
- def __repr__(self):
- return '<WECHAT_AD_PUBLISHER_ADUNIT_GENERAL %r>' % self.ad_unit_id
- class WECHAT_AD_PUBLISHER_ADPOS_GENERAL(Base):
- __tablename__ = 'wechat_ad_publisher_adpos_general'
- id = Column(Integer, primary_key=True)
- ad_slot = Column(String(1000))
- click_count = Column(Integer, default=0)
- click_rate = Column(Float, default=0.0)
- date = Column(String(1000))
- ecpm = Column(String(1000))
- exposure_count = Column(Integer, default=0)
- exposure_rate = Column(Float, default=0.0)
- income = Column(Integer, default=0)
- req_succ_count = Column(Integer, default=0)
- app_type = Column(Integer, default=0)
- slot_str = Column(String(1000))
- date_str = Column(String(1000))
- def __init__(self):
- print(f"ADPOS_GENERAL.init app_type = {self.app_type}, ad_slot = {self.ad_slot}")
- def __repr__(self):
- return '<wechat_ad_publisher_adpos_general %r>' % self.ad_slot
- @contextmanager
- def session_maker(session=None, session_factory=None):
- try:
- if session_factory is None:
- engine = create_engine(DB_URI)
- session_factory = sessionmaker(bind=engine)
- if session is None:
- session = session_factory()
- yield session
- except:
- session.rollback()
- raise
- else:
- session.commit()
- # logger.debug('session.commit(){}'.format(session))
- finally:
- session.close()
- # logger.debug('session.close(){}'.format(session))
- def add_ad_data(data, app_type):
- # Use a breakpoint in the code line below to debug your script.
- print(f'Hi, add_ad_data.app_type = {app_type}, data = {data}') # Press ⌘F8 to toggle the breakpoint.
- stat_item = data['stat_item']
- try:
- with session_maker() as session:
- wechat_ad_publisher_adunit_general = WECHAT_AD_PUBLISHER_ADUNIT_GENERAL()
- wechat_ad_publisher_adunit_general.ad_unit_id = data['ad_unit_id']
- wechat_ad_publisher_adunit_general.ad_unit_name = data['ad_unit_name']
- wechat_ad_publisher_adunit_general.ad_slot = stat_item['ad_slot']
- wechat_ad_publisher_adunit_general.click_count = stat_item['click_count']
- wechat_ad_publisher_adunit_general.click_rate = stat_item['click_rate']
- wechat_ad_publisher_adunit_general.date = stat_item['date']
- wechat_ad_publisher_adunit_general.ecpm = stat_item['ecpm']
- wechat_ad_publisher_adunit_general.exposure_count = stat_item['exposure_count']
- wechat_ad_publisher_adunit_general.exposure_rate = stat_item['exposure_rate']
- wechat_ad_publisher_adunit_general.income = stat_item['income']
- wechat_ad_publisher_adunit_general.req_succ_count = stat_item['req_succ_count']
- wechat_ad_publisher_adunit_general.slot_str = stat_item['slot_str']
- wechat_ad_publisher_adunit_general.date_str = stat_item['date'].replace('-','')
- wechat_ad_publisher_adunit_general.app_type = app_type
- session.add(wechat_ad_publisher_adunit_general)
- print(f'add_ad_data is OK!; app_type = {app_type}')
- except Exception as e:
- traceback.print_exc()
- print(f"add_ad_data error: app_type = {app_type}; traceback.format_exc = {traceback.format_exc()}")
- def add_ad_adpos_data(stat_item, app_type):
- # Use a breakpoint in the code line below to debug your script.
- print(f'Hi, add_ad_adpos_data.app_type = {app_type}, stat_time = {stat_item}') # Press ⌘F8 to toggle the breakpoint.
- try:
- with session_maker() as session:
- wechat_ad_publisher_adpos_general = WECHAT_AD_PUBLISHER_ADPOS_GENERAL()
- wechat_ad_publisher_adpos_general.ad_slot = stat_item['ad_slot']
- wechat_ad_publisher_adpos_general.click_count = stat_item['click_count']
- wechat_ad_publisher_adpos_general.click_rate = stat_item['click_rate']
- wechat_ad_publisher_adpos_general.date = stat_item['date']
- wechat_ad_publisher_adpos_general.ecpm = stat_item['ecpm']
- wechat_ad_publisher_adpos_general.exposure_count = stat_item['exposure_count']
- wechat_ad_publisher_adpos_general.exposure_rate = stat_item['exposure_rate']
- wechat_ad_publisher_adpos_general.income = stat_item['income']
- wechat_ad_publisher_adpos_general.req_succ_count = stat_item['req_succ_count']
- wechat_ad_publisher_adpos_general.slot_str = stat_item['slot_str']
- wechat_ad_publisher_adpos_general.date_str = stat_item['date'].replace('-','')
- wechat_ad_publisher_adpos_general.app_type = app_type
- session.add(wechat_ad_publisher_adpos_general)
- print(f'add_ad_adpos_data is OK; app_type = {app_type}')
- except Exception as e:
- traceback.print_exc()
- print(f"add_ad_adpos_data error: app_type = {app_type}; traceback.format_exc = {traceback.format_exc()}")
- def post_inform(url, content_text):
- url = url
- data = json.dumps(content_text)
- data = bytes(data, 'utf8')
- print(f"post_inform data = {data}")
- headers = {"Content-Type": 'application/json'}
- req = urllib.request.Request(url=url, headers=headers, data=data)
- try:
- resp = urllib.request.urlopen(req, timeout=10).read()
- print(f"post_inform resp = {resp.decode('utf-8')}")
- return resp.decode('utf-8')
- except Exception as e:
- print(e)
- def get_inform(url):
- url = url
- headers = {"Content-Type": 'application/json'}
- print(f"get_inform url = {url}")
- req = urllib.request.Request(url=url, headers=headers)
- try:
- resp = urllib.request.urlopen(req, timeout=10).read()
- print(f"get_inform resp = {resp.decode('utf-8')}")
- return resp.decode('utf-8')
- except Exception as e:
- print(e)
- def get_mp_info(app_type):
- datestr = datetime.datetime.strftime(datetime.datetime.now() - datetime.timedelta(days=+1), '%Y-%m-%d')
- print(f"get_mp_info: app_type = {app_type} date = {datestr}")
- time_str = time.strftime("%Y:%m:%d %H")
- print(f"get_mp_info: app_type= {app_type} time = {time_str}")
- md5 = hashlib.md5('{}'.format(time_str).encode(encoding='UTF-8')).hexdigest()
- print(f"get_mp_info: app_type = {app_type} md5 = {md5}")
- getliveaccesstoken_url = "https://longvideoapi.piaoquantv.com/longvideoapi/weixin/getWxAccessToken/{}".format(app_type)
- print(f"get_mp_info getliveaccesstoken_url = {getliveaccesstoken_url}")
- ret = get_inform(getliveaccesstoken_url)
- data = json.loads(ret).get('data',{})
- print(f"get_mp_info app_type = {app_type} getWxAccessToken date = {data}")
- with session_maker() as session:
- task = session.query(WECHAT_AD_PUBLISHER_ADUNIT_GENERAL).filter_by(date=datestr,app_type=app_type).first()
- if task is None:
- getweanalysisappiddailyvisittrend_url = 'https://api.weixin.qq.com/publisher/stat?action=publisher_adunit_general&access_token={}&page=1&page_size=100&start_date={}&end_date={}'.format(
- data, datestr, datestr)
- print(f"get_mp_info app_type = {app_type} publisher/stat adunit = {getweanalysisappiddailyvisittrend_url}")
- ret = get_inform(getweanalysisappiddailyvisittrend_url)
- print(f"get_mp_info app_type = {app_type} publisher/stat adunit result = {ret}")
- list = json.loads(ret).get('list',[])
- for item in list:
- add_ad_data(item, app_type)
- task = session.query(WECHAT_AD_PUBLISHER_ADPOS_GENERAL).filter_by(date=datestr, app_type=app_type).first()
- if task is None:
- getweanalysisappiddailyvisittrend_url = 'https://api.weixin.qq.com/publisher/stat?action=publisher_adpos_general&access_token={}&page=1&page_size=100&start_date={}&end_date={}'.format(
- data, datestr, datestr)
- print(f"get_mp_info app_type = {app_type} publisher/stat adops = {getweanalysisappiddailyvisittrend_url}")
- ret = get_inform(getweanalysisappiddailyvisittrend_url)
- print(f"get_mp_info app_type = {app_type} publisher/stat adops result = {ret}")
- list = json.loads(ret).get('list',[])
- for item in list:
- add_ad_adpos_data(item, app_type)
- summary = json.loads(ret)['summary']
- summary['ad_slot'] = 'SLOT_ID_WEAPP_ALL'
- summary['date'] = datestr
- summary['slot_str'] = 'summary'
- add_ad_adpos_data(summary, app_type)
- # Press the green button in the gutter to run the script.
- if __name__ == '__main__':
- app_type_list = [0,2,3,4,5,6,17,18,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36]
- # app_type_list = [2,23,24,25]
- for app_type in app_type_list:
- print(f"start app_type = {app_type}")
- try:
- get_mp_info(app_type)
- except Exception as e:
- print(f"app_type {app_type} get data error: {traceback.format_exc()}")
- print(f"end app_type = {app_type}")
- print("")
- # See PyCharm help at https://www.jetbrains.com/help/pycharm/
|