Metadata-Version: 2.4
Name: mercari_dpop
Version: 0.0.4
Summary: mercari dpop 加密参数
Author-email: adam <2638116094@qq.com>
License-Expression: MIT
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.33.1
Requires-Dist: cryptography>=47.0.0
Dynamic: license-file

# mercari_dpop

Mercari DPOP 加密参数生成与店铺信息查询工具库。

## 安装

```bash
pip install mercari_dpop
```

## 功能介绍

### 1. 生成 DPOP JWT — `generate_dpop_jwt`

根据 [RFC 9449](https://datatracker.ietf.org/doc/html/rfc9449) 标准，使用 **ES256 (P-256)** 签名算法生成 DPOP Proof JWT。

#### 函数签名

```python
from mercari_dpop import generate_dpop_jwt

generate_dpop_jwt(user_uuid, http_method, url) -> str
```

| 参数 | 类型 | 说明 |
|------|------|------|
| `user_uuid` | `str` | 用户唯一标识，通常为 `str(uuid.uuid4())` |
| `http_method` | `str` | HTTP 请求方法，如 `'GET'`, `'POST'` 等 |
| `url` | `str` | 请求的目标 URL |

#### 返回值

返回一个 DPOP JWT 字符串（`header.payload.signature` 格式），可直接放入请求头的 `dpop` 字段。

#### 示例

```python
import uuid
from mercari_dpop import generate_dpop_jwt

url = "https://api.mercari.jp/users/get_profile"
dpop_token = generate_dpop_jwt(str(uuid.uuid4()), 'GET', url)
print(dpop_token)

# 使用时放入请求头
import requests
headers = {
    "dpop": dpop_token,
    # ... 其他 headers
}
requests.get(url, headers=headers)
```

---

### 2. 查看账号信息 — `get_shop_info`

通过 Mercari API 查询指定店铺/用户的公开资料信息，自动处理 DPOP 签名。

#### 函数签名

```python
from mercari_dpop import get_shop_info

get_shop_info(shop_id) -> dict
```

| 参数 | 类型 | 说明 |
|------|------|------|
| `shop_id` | `str` / `int` | Mercari 店铺或用户 ID |

#### 返回值

| 场景 | 返回结构 |
|------|----------|
| 正常获取 | `{'code': None, 'msg': None, ... 店铺详细信息}` 或直接返回 `data` 字典内容 |
| 账号被限制 | `{'code': 2, 'msg': '账号被限制'}` |
| 请求失败 | `{'code': 1, 'msg': 错误信息}` |

#### 示例

```python
from mercari_dpop import get_shop_info

result = get_shop_info("914211704")
print(result)
```

## 完整示例

```python
from mercari_dpop import generate_dpop_jwt, get_shop_info
import uuid

# 方式一：单独生成 DPOP Token
dpop = generate_dpop_jwt(str(uuid.uuid4()), 'GET', 'https://api.mercari.jp/users/get_profile')
print(f"DPOP JWT: {dpop}")

# 方式二：直接查询店铺信息
info = get_shop_info("914211704")
print(f"店铺信息: {info}")
```

## 依赖

- Python >= 3.9
- requests >= 2.33.1
- cryptography >= 47.0.0

## License

MIT
