python - Python结合了多个相似的功能
问题描述
我正在使用一个 API 来使用 python 拉回数据。我的功能工作正常,但我觉得我一遍又一遍地重复自己,我可能应该做一些事情来提高效率。
每个人所做的是获取结果的数量,然后返回 api 以返回确切的记录数量。
第一个功能:
def get_categories():
headers = {"Authorization": "Bearer " + access_token} # auth plus token
response = requests.get("https://api.destination.com/categories", headers=headers) # response
data = json.loads(response.text) # load the json data
records = str(data['totalResults']) # get number of results for next call
response = requests.get("https://api.destination.com/categories?$skip=0&$top="+records, headers=headers)
all_data = json.loads(response.text) # load the json data
list_of_dict = all_data['resources'] # get rid of all but lists of dictionaries
df = pd.DataFrame.from_records(list_of_dict) # create dataframe
df['links'] = df['links'].str[0].str['href'] # just grab the links(key) items
return df # return the final dataframe
第二个功能:
def get_groups():
headers = {"Authorization": "Bearer " + access_token} # auth plus token
response = requests.get("https://api.destination.com/groups", headers=headers) # response
data = json.loads(response.text) # load the json data
records = str(data['totalResults']) # get number of results
response = requests.get("https://api.destination.com/groups?$skip=0&$top="+records, headers=headers)
all_data = json.loads(response.text) # load the json data
list_of_dict = all_data['resources'] # get rid of all but lists of dictionaries
df = pd.DataFrame.from_records(list_of_dict) # create dataframe
df['links'] = df['links'].str[0].str['href'] # just grab the links(key) items
return df # return the final dataframe
还有3个类似的功能users
做同样的事情。如您所见,它们之间的唯一区别是get
like https://api.destination.com/categories
vshttps://api.destination.com/groups
并且number of records
每个返回的结果都会不同。有没有办法将这些结合起来并以某种方式称呼它?
解决方案
看起来您已经知道如何制作函数,只需将其进一步扩展以抽象出函数中常见的所有内容。
BASE_URL = "https://api.destination.com/{}"
def make_headers():
headers = {"Authorization": "Bearer " + access_token}
return headers
def make_params(recs):
params = {'$skip': 0, '$top': recs}
return params
def make_df(data):
list_of_dict = data['resources']
df = pd.DataFrame.from_records(list_of_dict)
df['links'] = df['links'].str[0].str['href']
return df
def process(process):
headers = make_headers()
url = BASE_URL.format(process)
resp = requests.get(url, headers=headers)
data = resp.json()
records = data['totalResults']
params = make_params(records)
resp = requests.get(url, headers=headers, params=params)
all_data = resp.json()
return make_df(all_data)
然后你可以像下面这样调用它:
process('groups')
process('categories')
你可以进一步分解它,但你明白了。
推荐阅读
- reactjs - Firebase 错误:用户无权访问
- java - Swagger UI 不会执行带有 Authorization 标头的请求
- python-3.x - 如何自动将外部库导入python
- python - NotFittedError:使用管道拟合和转换数据仍然出现未拟合错误
- macos - 如何在不丢失数据和时间机器备份的情况下重置为所有终端设置/或删除 mac 中的所有终端应用程序?
- google-chrome - 是否可以制作透明的 Google-Chrome 窗口?
- javascript - Three.js:无法显示使用纹理数组创建的网格
- reactjs - reactjs中PayUMoney支付成功后报错
- arrays - 在 C 中的堆栈和/或堆上实现用户定义的数组
- mysql - 在 Eloquent Laravel 8 中具有内部联接查询的 Ajax 调用不起作用