Solar Network Python SDK 提供了与 Solar Network API 交互的完整解决方案。本 SDK 包含认证、账户管理、内容操作等所有核心功能。
pip install solar-network-sdkfrom solar_network_sdk import SolarNetworkClient, WebAuthClient
# 创建客户端
client = SolarNetworkClient()
# 获取认证客户端
web_auth = client.get_web_auth_client()
# 获取认证 URL
auth_url = web_auth.get_authentication_url()
print(f"请在浏览器中打开: {auth_url}")
# 等待用户认证
auth_result = web_auth.wait_for_auth()
if auth_result.status == "challenge":
# 签名挑战
signed_challenge = sign_challenge(auth_result.challenge)
# 交换令牌
token_result = web_auth.exchange_token(signed_challenge)
if token_result.status == "success":
# 设置令牌
client.set_token(token_result.token)
# 现在可以进行认证请求
account = client.get_account()
print(f"你好, {account.name}!")主客户端类,提供所有 API 操作。
SolarNetworkClient(
server_url: str = "https://api.solian.app",
token: Optional[str] = None,
timeout: int = 30
)参数:
server_url: Solar Network API 服务器 URLtoken: 可选的认证令牌timeout: 请求超时时间(秒)
get_web_auth_client() -> WebAuthClient- 获取 Web 认证客户端实例
-
get_account() -> Account- 获取当前账户信息
-
update_account(**kwargs) -> Account- 更新账户信息
-
get_account_profile() -> AccountProfile- 获取账户配置文件
-
update_account_profile(**kwargs) -> AccountProfile- 更新账户配置文件
-
get_account_status() -> AccountStatus- 获取账户状态
-
set_account_status(attitude: int, type: int = 0, label: str = "", symbol: Optional[str] = None, meta: Optional[Dict[str, Any]] = None) -> AccountStatus- 设置账户状态
-
clear_account_status() -> None- 清除账户状态
-
check_in() -> CheckInResult- 执行每日签到
-
get_notable_days(start_date: Optional[datetime] = None, end_date: Optional[datetime] = None) -> List[NotableDay]- 获取显著日期
-
get_timeline_events(limit: int = 20, offset: int = 0, types: Optional[List[str]] = None) -> List[TimelineEvent]- 获取时间线事件
-
get_chat_rooms(limit: int = 20, offset: int = 0, types: Optional[List[int]] = None) -> List[ChatRoom]- 获取聊天室列表
-
get_chat_messages(room_id: str, limit: int = 50, before: Optional[str] = None, after: Optional[str] = None) -> List[ChatMessage]- 获取聊天室消息
-
send_chat_message(room_id: str, content: str, type: str = "text", nonce: Optional[str] = None, meta: Optional[Dict[str, Any]] = None) -> ChatMessage- 发送聊天消息
-
get_file_pools() -> List[FilePool]- 获取文件池列表
-
get_cloud_files(limit: int = 50, offset: int = 0, pool_id: Optional[str] = None) -> List[CloudFile]- 获取云文件列表
-
upload_file(file_path: str, pool_id: Optional[str] = None, name: Optional[str] = None, description: Optional[str] = None) -> DriveTask- 上传文件
-
create_post(content: str, title: Optional[str] = None, visibility: int = 0, type: int = 0, attachments: Optional[List[str]] = None, tags: Optional[List[str]] = None, categories: Optional[List[str]] = None) -> Post- 创建帖子
-
get_posts(limit: int = 20, offset: int = 0, types: Optional[List[int]] = None, visibility: Optional[List[int]] = None) -> List[Post]- 获取帖子列表
-
get_wallet() -> Wallet- 获取钱包信息
-
get_wallet_pockets() -> List[WalletPocket]- 获取钱包口袋
-
get_wallet_transactions(limit: int = 50, offset: int = 0, types: Optional[List[int]] = None) -> List[Transaction]- 获取钱包交易
-
set_token(token: str) -> None- 设置认证令牌
-
clear_token() -> None- 清除认证令牌
Web 认证客户端,用于与 Solar Network 桌面应用进行认证交互。
WebAuthClient(
base_url: str = "http://127.0.0.1",
default_port: int = 40000,
web_url: str = "https://app.solian.fr"
)参数:
base_url: 本地服务器基础 URLdefault_port: 默认连接端口web_url: Solar Network Web URL
port: int- 获取/设置当前端口
-
get_authentication_url() -> str- 获取认证 URL
-
get_protocol_challenge_url(app_slug: str, redirect_uri: str, state: Optional[str] = None) -> str- 获取协议挑战 URL
-
get_protocol_exchange_url(signed_challenge: str, redirect_uri: str, secret_id: Optional[str] = None, state: Optional[str] = None) -> str- 获取协议交换 URL
-
wait_for_auth(port: Optional[int] = None, app_name: str = "PythonApp") -> WebAuthResult- 等待用户认证响应
-
exchange_token(signed_challenge: str, port: Optional[int] = None, device_info: Optional[Dict[str, Any]] = None, secret_id: Optional[str] = None) -> WebAuthResult- 交换认证令牌
-
fetch_account_info(port: Optional[int] = None, token: str = "") -> Dict[str, Union[bool, Optional[Dict[str, Any]], Optional[str]]]- 获取账户信息
-
authenticate(app_name: str = "PythonApp", sign_challenge: Optional[callable] = None) -> WebAuthResult- 完整认证流程
账户信息模型。
字段:
id: str- 账户 IDname: str- 账户名称email: str- 邮箱地址status: int- 账户状态created_at: datetime- 创建时间
账户配置文件模型。
字段:
nick: str- 昵称birthday: Optional[datetime]- 生日gender: int- 性别bio: str- 个人简介
聊天室模型。
字段:
id: str- 聊天室 IDname: str- 聊天室名称type: int- 聊天室类型is_public: bool- 是否公开
云文件模型。
字段:
id: str- 文件 IDname: str- 文件名size: int- 文件大小mime_type: str- MIME 类型url: str- 文件 URL
帖子模型。
字段:
id: str- 帖子 IDtitle: str- 帖子标题content: str- 帖子内容visibility: int- 可见性created_at: datetime- 创建时间
钱包模型。
字段:
id: str- 钱包 IDpockets: List[WalletPocket]- 钱包口袋列表
钱包口袋模型。
字段:
currency: str- 货币类型amount: float- 金额
所有 API 方法都可能抛出异常。建议使用 try-catch 块进行错误处理:
try:
account = client.get_account()
print(f"账户信息: {account.name}")
except Exception as e:
print(f"获取账户信息失败: {e}")大多数列表方法都支持分页参数:
limit: 返回项目数量offset: 偏移量before/after: 时间戳分页
示例:
# 获取前 20 个项目
items = client.get_posts(limit=20, offset=0)
# 获取下一页
next_items = client.get_posts(limit=20, offset=20)分页控制器支持异步操作:
from solar_network_sdk.pagination import AsyncPaginationController
async def fetch_data():
controller = AsyncPaginationController(fetch_func)
await controller.refresh()
await controller.fetch_further()- 认证安全: 始终使用安全的方式存储和传输认证令牌
- 错误处理: 为所有 API 调用添加适当的错误处理
- 分页: 处理大量数据时使用分页
- 超时: 根据需要调整请求超时时间
- 类型检查: 利用类型注解提高代码质量
欢迎贡献代码!请阅读 CONTRIBUTING.md 了解详细信息。
MIT License - 详见 LICENSE 文件。