[英]How can I refactor this code to be more concise?
我正在使用Python從Google Analytics Core Reporting API中提取一些數據。 我已經設法使用函數來對API進行不同的調用(下面只是兩個例子)但是我想知道如何重構它以使其更短? 還有很多重復的代碼。
def get_pvs(service, profile_id, start_date, end_date, type, data):
if type == "url":
return service.data().ga().get(
ids = 'ga:' + profile_id,
start_date = start_date,
end_date = end_date,
metrics = 'ga:pageviews',
dimensions = 'ga:pagePath',
filters = 'ga:pageviews!=0',
sort = '-ga:pageviews',
max_results = '10000').execute()
elif type == "author":
return service.data().ga().get(
ids = 'ga:' + profile_id,
start_date = start_date,
end_date = end_date,
metrics = 'ga:pageviews',
# Post Author
dimensions = 'ga:dimension2',
sort = '-ga:pageviews',
max_results = '100').execute()
使用特定於類型的參數創建一個字典,然后將其應用於**kw
:
def get_pvs(service, profile_id, start_date, end_date, type, data):
if type == 'url':
kwargs = {
'dimensions': 'ga:pagePath',
'filters': 'ga:pageviews!=0',
'maxresults': 100
}
elif type == 'author':
kwargs = {
'dimensions': 'ga:dimension2',
'max_results': '100'
}
return service.data().ga().get(
ids = 'ga:' + profile_id,
start_date = start_date,
end_date = end_date,
metrics = 'ga:pageviews',
sort = '-ga:pageviews',
**kwargs).execute()
我把共同的論點留在了原地。 如果type
可以有更多值,那么你可能需要添加else: return None
。
另一種方法:
TYPE_SETTINGS = {
'url': {
'dimensions': 'ga:pagePath',
'filters': 'ga:pageviews!=0',
'max_results': '10000',
},
'author': {
'dimensions': 'ga:dimension2',
'max_results': '100',
},
}
def get_pvs(service, profile_id, start_date, end_date, type, data):
if type in TYPE_SETTINGS:
return service.data().ga().get(
ids = 'ga:' + profile_id,
start_date = start_date,
end_date = end_date,
metrics = 'ga:pageviews',
sort = '-ga:pageviews',
**TYPE_SETTINGS[type]).execute()
如果您需要在將來定義更多type
而不是url
和author
,則可以輕松修改TYPE_SETTINGS
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.