122 lines
4.1 KiB
Python
122 lines
4.1 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
|
||
"""
|
||
LeonApp API示例 - 展示如何以编程方式调用API
|
||
"""
|
||
|
||
import json
|
||
import requests
|
||
|
||
class LeonAppAPI:
|
||
def __init__(self, api_base_url="http://localhost/APP Store/api.php"):
|
||
"""初始化API客户端"""
|
||
self.api_base_url = api_base_url
|
||
|
||
def make_request(self, endpoint_type, params=None):
|
||
"""基础API请求函数"""
|
||
if params is None:
|
||
params = {}
|
||
|
||
# 添加API类型参数
|
||
params['t'] = endpoint_type
|
||
|
||
try:
|
||
response = requests.get(self.api_base_url, params=params, timeout=30)
|
||
response.raise_for_status() # 抛出HTTP错误
|
||
|
||
data = response.json()
|
||
|
||
if data.get('status') == 'error':
|
||
print(f"API错误: {data.get('message', '未知错误')}")
|
||
return None
|
||
|
||
return data.get('data')
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"请求异常: {str(e)}")
|
||
return None
|
||
except json.JSONDecodeError:
|
||
print("无法解析响应")
|
||
return None
|
||
|
||
def get_all_apps(self, page=1, limit=20):
|
||
"""获取所有应用列表"""
|
||
return self.make_request('getallapps', {'page': page, 'limit': limit})
|
||
|
||
def get_app_info(self, app_id):
|
||
"""获取应用详情"""
|
||
return self.make_request('getappinfo', {'id': app_id})
|
||
|
||
def get_all_tags(self):
|
||
"""获取所有标签"""
|
||
return self.make_request('getalltags')
|
||
|
||
def get_tag_apps(self, tag_id, page=1, limit=20):
|
||
"""获取标签下的应用"""
|
||
return self.make_request('gettagapp', {'id': tag_id, 'page': page, 'limit': limit})
|
||
|
||
def get_developer_apps(self, developer_id, page=1, limit=20):
|
||
"""获取开发者的应用"""
|
||
return self.make_request('getdeveloperapp', {'id': developer_id, 'page': page, 'limit': limit})
|
||
|
||
def get_developer_info(self, developer_id):
|
||
"""获取开发者信息"""
|
||
return self.make_request('getdeveloperinfo', {'id': developer_id})
|
||
|
||
def get_all_announcements(self, page=1, limit=20):
|
||
"""获取所有公告"""
|
||
return self.make_request('getacc', {'page': page, 'limit': limit})
|
||
|
||
def get_count_info(self):
|
||
"""获取统计信息"""
|
||
return self.make_request('getcount')
|
||
|
||
# 示例用法
|
||
if __name__ == "__main__":
|
||
# 创建API客户端实例
|
||
api = LeonAppAPI()
|
||
|
||
print("LeonApp API示例\n")
|
||
|
||
# 1. 获取统计信息示例
|
||
print("=== 获取统计信息 ===")
|
||
count_info = api.get_count_info()
|
||
if count_info:
|
||
print(f"应用总数: {count_info['total_apps']}")
|
||
print(f"开发者总数: {count_info['total_developers']}")
|
||
print(f"标签总数: {count_info['total_tags']}")
|
||
print(f"公告总数: {count_info['total_announcements']}")
|
||
print(f"总下载量: {count_info['total_downloads']}")
|
||
print()
|
||
|
||
# 2. 获取前5个应用示例
|
||
print("=== 获取前5个应用 ===")
|
||
apps = api.get_all_apps(page=1, limit=5)
|
||
if apps and 'apps' in apps:
|
||
for app in apps['apps']:
|
||
print(f"ID: {app['id']}, 名称: {app['name']}")
|
||
print()
|
||
|
||
# 3. 获取第一个标签的应用示例
|
||
print("=== 获取第一个标签的应用 ===")
|
||
tags = api.get_all_tags()
|
||
if tags and len(tags) > 0:
|
||
first_tag = tags[0]
|
||
print(f"标签: {first_tag['name']} (ID: {first_tag['id']})")
|
||
|
||
tag_apps = api.get_tag_apps(first_tag['id'], limit=3)
|
||
if tag_apps and 'apps' in tag_apps:
|
||
for app in tag_apps['apps']:
|
||
print(f"- {app['name']}")
|
||
else:
|
||
print("该标签下暂无应用")
|
||
else:
|
||
print("暂无标签数据")
|
||
print()
|
||
|
||
# 4. 使用提示
|
||
print("=== 使用提示 ===")
|
||
print("1. 你可以在自己的脚本中导入此类并使用相应的方法")
|
||
print("2. 根据实际需要处理API返回的数据")
|
||
print("3. 记得添加错误处理和异常捕获")
|
||
print("4. 如果API地址不同,初始化时可以指定:api = LeonAppAPI('http://your-api-url/api.php')") |