Files
K-hermes edf4dfcd52 初始提交: 通用数据同步服务
- 基于OpenResty的RESTful API服务
- 支持Cookie/Token等数据类型的存储和管理
- 登录认证保护
- Web管理界面
- 数据过期管理
2026-08-14 09:53:32 +08:00

224 lines
5.8 KiB
Python

"""
通用数据同步服务 - Python 客户端示例
演示如何在 Python 脚本中使用同步服务
"""
import sys
sys.path.append('/home/hermes/projects/data-sync-service/scripts')
from utils import (
upload_data,
get_data,
delete_data,
list_all_tags,
load_cookies_from_sync,
load_token_from_sync
)
def example_upload_cookies():
"""示例:上传 Cookie 数据"""
# 模拟 Cookie 数据
cookies_data = {
"cookies": [
{
"name": "session_id",
"value": "abc123xyz789",
"domain": ".example.com",
"path": "/"
},
{
"name": "auth_token",
"value": "token_value_here",
"domain": ".example.com",
"path": "/"
}
],
"raw_cookie": "session_id=abc123xyz789; auth_token=token_value_here",
"user_agent": "Mozilla/5.0 ...",
"url": "https://example.com"
}
success = upload_data(
tag="example:user@example.com",
data_type="cookie",
data=cookies_data,
expires_in=604800, # 7天
note="示例账号",
login_url="https://example.com/login"
)
if success:
print("✅ Cookie 上传成功")
else:
print("❌ Cookie 上传失败")
def example_upload_token():
"""示例:上传 Token 数据"""
token_data = {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"api_endpoint": "https://api.example.com/v1"
}
success = upload_data(
tag="api:service_account",
data_type="token",
data=token_data,
expires_in=2592000, # 30天
note="API 服务账号",
login_url="https://console.example.com"
)
if success:
print("✅ Token 上传成功")
else:
print("❌ Token 上传失败")
def example_get_data():
"""示例:获取数据"""
data = get_data("example:user@example.com")
if data:
print("✅ 数据获取成功:")
print(f" Tag: {data.get('tag')}")
print(f" Type: {data.get('type')}")
print(f" Created: {data.get('metadata', {}).get('created_at')}")
print(f" Expires: {data.get('metadata', {}).get('expires_at')}")
else:
print("❌ 数据不存在或获取失败")
def example_load_cookies():
"""示例:加载 Cookie 数据(便捷方法)"""
cookies = load_cookies_from_sync("tingwu:ykaayk@qq.com")
if cookies:
print("✅ Cookie 加载成功:")
for cookie in cookies:
print(f" - {cookie['name']}: {cookie['value'][:20]}...")
else:
print("❌ Cookie 加载失败")
def example_list_all():
"""示例:列出所有 tag"""
tags = list_all_tags()
print(f"📋 共有 {len(tags)} 个数据:")
for item in tags:
status_icon = {
"valid": "✅",
"expiring_soon": "⚠️",
"expired": "❌",
"no_expiry": "♾️"
}.get(item.get("status", "unknown"), "❓")
print(f" {status_icon} {item['tag']} ({item['type']})")
def example_delete():
"""示例:删除数据"""
success = delete_data("example:user@example.com")
if success:
print("✅ 数据删除成功")
else:
print("❌ 数据删除失败")
def example_tingwu_script():
"""
示例:在通义听悟脚本中使用同步服务
替代原有的本地文件读取方式
"""
# 尝试从同步服务加载 Cookie
cookies = load_cookies_from_sync("tingwu:ykaayk@qq.com")
if cookies:
print("✅ 从同步服务加载 Cookie 成功")
# 转换为 requests 可用的格式
cookie_dict = {c['name']: c['value'] for c in cookies}
# 使用 Cookie 发起请求
import requests
try:
response = requests.get(
"https://tingwu.aliyun.com/api/some-endpoint",
cookies=cookie_dict,
timeout=10
)
print(f" API 调用成功: {response.status_code}")
except Exception as e:
print(f" API 调用失败: {e}")
else:
print("❌ Cookie 加载失败,请检查同步服务")
def example_with_fallback():
"""
示例:带降级方案的使用方式
优先从同步服务加载,失败时使用本地文件
"""
# 尝试从同步服务加载
data = get_data("tingwu:ykaayk@qq.com")
if data:
print("✅ 从同步服务加载成功")
cookies = data.get("data", {}).get("cookies", [])
else:
print("⚠️ 同步服务不可用,使用本地文件")
# 降级到本地文件
import json
try:
with open("/path/to/local/cookies.json", 'r') as f:
local_data = json.load(f)
cookies = local_data.get("cookies", [])
except:
print("❌ 本地文件也加载失败")
cookies = []
return cookies
if __name__ == "__main__":
print("=" * 50)
print("通用数据同步服务 - Python 客户端示例")
print("=" * 50)
# 运行示例
print("\n1️⃣ 上传 Cookie 数据")
example_upload_cookies()
print("\n2️⃣ 上传 Token 数据")
example_upload_token()
print("\n3️⃣ 获取数据")
example_get_data()
print("\n4️⃣ 列出所有 tag")
example_list_all()
print("\n5️⃣ 加载 Cookie(便捷方法)")
example_load_cookies()
print("\n6️⃣ 通义听悟脚本示例")
example_tingwu_script()
# 删除示例数据(取消注释以执行)
# print("\n7️⃣ 删除数据")
# example_delete()
print("\n" + "=" * 50)