mitake


Namemitake JSON
Version 0.9.2 PyPI version JSON
download
home_pagehttps://github.com/tzangms/mitake
SummaryPython library for Mitake SMS API
upload_time2025-08-20 02:42:56
maintainerNone
docs_urlNone
authortzangms
requires_python>=3.8
licenseNone
keywords mitake sms api taiwan
VCS
bugtrack_url
requirements requests
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 三竹簡訊 Python 函式庫

三竹簡訊 API 的 Python 包裝函式庫,讓您可以透過台灣三竹簡訊服務發送簡訊。

## 特色

- ✅ **預設 UTF-8 編碼**:完美支援中文簡訊,不會出現亂碼
- ✅ **單筆與批次發送**:支援單筆與批次簡訊發送
- ✅ **預約發送**:支援預約時間發送簡訊
- ✅ **狀態查詢**:查詢簡訊發送狀態與帳戶餘額
- ✅ **錯誤處理**:完整的錯誤處理機制
- ✅ **易於使用**:簡潔的 API 設計

## 安裝

```bash
pip install -e .
```

## 快速開始

### 基本設定

```python
from mitake import MitakeClient

# 方法 1:直接輸入帳號密碼
client = MitakeClient(username="your_username", password="your_password")

# 方法 2:使用環境變數
# 設定 MITAKE_USERNAME 和 MITAKE_PASSWORD 環境變數
client = MitakeClient()
```

### 發送單筆簡訊

```python
# 發送中文簡訊(自動使用 UTF-8 編碼,不會有亂碼問題)
result = client.send_sms(
    to="0912345678",  # 台灣手機號碼
    message="你好,我是小海!這是測試訊息 🎉"
)
print(result)
```

### 發送批次簡訊

```python
messages = [
    {"to": "0912345678", "message": "嗨!這是第一則訊息"},
    {"to": "0987654321", "message": "嗨!這是第二則訊息", "message_id": "custom_id_1"},
    {
        "to": "0966666666", 
        "message": "這是完整參數的訊息",
        "message_id": "full_example",
        "send_time": "20241231235900",  # YYYYMMDDHHMMSS 格式
        "dest_name": "收訊人姓名"
    }
]

result = client.send_batch_sms(messages)
print(result)
```

### 預約發送

```python
# 預約指定時間發送簡訊
result = client.send_sms(
    to="0912345678",
    message="這是預約發送的簡訊!",
    send_time="2024-12-31 23:59:00"  # YYYY-MM-DD HH:MM:SS 格式
)
```

### 查詢帳戶餘額

```python
balance = client.query_account_balance()
print(f"帳戶餘額:{balance}")
```

### 查詢簡訊狀態

```python
# 查詢已發送簡訊的狀態
status = client.query_message_status(["message_id_1", "message_id_2"])
print(status)
```

## 環境變數設定

您可以使用環境變數來設定認證資訊:

```bash
export MITAKE_USERNAME="你的帳號"
export MITAKE_PASSWORD="你的密碼"
```

## 錯誤處理

```python
from mitake import MitakeClient, MitakeError, AuthenticationError, APIError

try:
    client = MitakeClient()
    result = client.send_sms("0912345678", "測試訊息")
except AuthenticationError as e:
    print(f"認證失敗:{e}")
except APIError as e:
    print(f"API 錯誤:{e}")
    print(f"狀態碼:{e.status_code}")
    print(f"回應內容:{e.response_data}")
except MitakeError as e:
    print(f"三竹簡訊錯誤:{e}")
```

## API 方法

### send_sms(to, message, message_id=None, send_time=None)
發送單筆簡訊

**參數:**
- `to` (str): 收訊人手機號碼(台灣格式:09xxxxxxxx)
- `message` (str): 簡訊內容
- `message_id` (str, 可選): 自訂訊息 ID
- `send_time` (str, 可選): 預約發送時間(YYYY-MM-DD HH:MM:SS 格式)

### send_batch_sms(messages)
發送批次簡訊

**參數:**
- `messages` (List[Dict]): 訊息列表,每個訊息包含:
  - `to` (str): 收訊人手機號碼(必填)
  - `message` (str): 簡訊內容(必填)
  - `message_id` (str, 可選): 自訂訊息 ID
  - `send_time` (str, 可選): 預約發送時間(YYYYMMDDHHMMSS 格式)
  - `valid_time` (str, 可選): 訊息有效時間(YYYYMMDDHHMMSS 格式)
  - `dest_name` (str, 可選): 收訊人姓名
  - `callback_url` (str, 可選): 狀態回報網址

### query_account_balance()
查詢帳戶餘額

### query_message_status(message_ids)
查詢簡訊發送狀態

**參數:**
- `message_ids` (List[str]): 要查詢的訊息 ID 列表

## UTF-8 編碼支援

本函式庫預設使用 UTF-8 編碼,完美支援中文簡訊:

```python
# ✅ 正確:支援中文、表情符號等
client.send_sms("0912345678", "你好!今天天氣真好 ☀️")

# ✅ 正確:支援各種特殊字元
client.send_sms("0912345678", "測試特殊符號:{} [] | ^ ~ 等等")
```

## 系統需求

- Python 3.7+
- requests 函式庫

## 授權條款

MIT License

## 開發者

使用前請確保您已向三竹資訊申請 API 發送權限,並提供程式發送主機的 IP 位址進行鎖定。

更多 API 詳細資訊請參考:[三竹簡訊 API 文件](HTTP_MitakeAPI_v2.14.pdf)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/tzangms/mitake",
    "name": "mitake",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "mitake sms api taiwan",
    "author": "tzangms",
    "author_email": "tzangms@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/96/c0/89704d66586066b6af8ea7011aaccf324d462ff26476a7f11d3c6c54d996/mitake-0.9.2.tar.gz",
    "platform": null,
    "description": "# \u4e09\u7af9\u7c21\u8a0a Python \u51fd\u5f0f\u5eab\n\n\u4e09\u7af9\u7c21\u8a0a API \u7684 Python \u5305\u88dd\u51fd\u5f0f\u5eab\uff0c\u8b93\u60a8\u53ef\u4ee5\u900f\u904e\u53f0\u7063\u4e09\u7af9\u7c21\u8a0a\u670d\u52d9\u767c\u9001\u7c21\u8a0a\u3002\n\n## \u7279\u8272\n\n- \u2705 **\u9810\u8a2d UTF-8 \u7de8\u78bc**\uff1a\u5b8c\u7f8e\u652f\u63f4\u4e2d\u6587\u7c21\u8a0a\uff0c\u4e0d\u6703\u51fa\u73fe\u4e82\u78bc\n- \u2705 **\u55ae\u7b46\u8207\u6279\u6b21\u767c\u9001**\uff1a\u652f\u63f4\u55ae\u7b46\u8207\u6279\u6b21\u7c21\u8a0a\u767c\u9001\n- \u2705 **\u9810\u7d04\u767c\u9001**\uff1a\u652f\u63f4\u9810\u7d04\u6642\u9593\u767c\u9001\u7c21\u8a0a\n- \u2705 **\u72c0\u614b\u67e5\u8a62**\uff1a\u67e5\u8a62\u7c21\u8a0a\u767c\u9001\u72c0\u614b\u8207\u5e33\u6236\u9918\u984d\n- \u2705 **\u932f\u8aa4\u8655\u7406**\uff1a\u5b8c\u6574\u7684\u932f\u8aa4\u8655\u7406\u6a5f\u5236\n- \u2705 **\u6613\u65bc\u4f7f\u7528**\uff1a\u7c21\u6f54\u7684 API \u8a2d\u8a08\n\n## \u5b89\u88dd\n\n```bash\npip install -e .\n```\n\n## \u5feb\u901f\u958b\u59cb\n\n### \u57fa\u672c\u8a2d\u5b9a\n\n```python\nfrom mitake import MitakeClient\n\n# \u65b9\u6cd5 1\uff1a\u76f4\u63a5\u8f38\u5165\u5e33\u865f\u5bc6\u78bc\nclient = MitakeClient(username=\"your_username\", password=\"your_password\")\n\n# \u65b9\u6cd5 2\uff1a\u4f7f\u7528\u74b0\u5883\u8b8a\u6578\n# \u8a2d\u5b9a MITAKE_USERNAME \u548c MITAKE_PASSWORD \u74b0\u5883\u8b8a\u6578\nclient = MitakeClient()\n```\n\n### \u767c\u9001\u55ae\u7b46\u7c21\u8a0a\n\n```python\n# \u767c\u9001\u4e2d\u6587\u7c21\u8a0a\uff08\u81ea\u52d5\u4f7f\u7528 UTF-8 \u7de8\u78bc\uff0c\u4e0d\u6703\u6709\u4e82\u78bc\u554f\u984c\uff09\nresult = client.send_sms(\n    to=\"0912345678\",  # \u53f0\u7063\u624b\u6a5f\u865f\u78bc\n    message=\"\u4f60\u597d\uff0c\u6211\u662f\u5c0f\u6d77\uff01\u9019\u662f\u6e2c\u8a66\u8a0a\u606f \ud83c\udf89\"\n)\nprint(result)\n```\n\n### \u767c\u9001\u6279\u6b21\u7c21\u8a0a\n\n```python\nmessages = [\n    {\"to\": \"0912345678\", \"message\": \"\u55e8\uff01\u9019\u662f\u7b2c\u4e00\u5247\u8a0a\u606f\"},\n    {\"to\": \"0987654321\", \"message\": \"\u55e8\uff01\u9019\u662f\u7b2c\u4e8c\u5247\u8a0a\u606f\", \"message_id\": \"custom_id_1\"},\n    {\n        \"to\": \"0966666666\", \n        \"message\": \"\u9019\u662f\u5b8c\u6574\u53c3\u6578\u7684\u8a0a\u606f\",\n        \"message_id\": \"full_example\",\n        \"send_time\": \"20241231235900\",  # YYYYMMDDHHMMSS \u683c\u5f0f\n        \"dest_name\": \"\u6536\u8a0a\u4eba\u59d3\u540d\"\n    }\n]\n\nresult = client.send_batch_sms(messages)\nprint(result)\n```\n\n### \u9810\u7d04\u767c\u9001\n\n```python\n# \u9810\u7d04\u6307\u5b9a\u6642\u9593\u767c\u9001\u7c21\u8a0a\nresult = client.send_sms(\n    to=\"0912345678\",\n    message=\"\u9019\u662f\u9810\u7d04\u767c\u9001\u7684\u7c21\u8a0a\uff01\",\n    send_time=\"2024-12-31 23:59:00\"  # YYYY-MM-DD HH:MM:SS \u683c\u5f0f\n)\n```\n\n### \u67e5\u8a62\u5e33\u6236\u9918\u984d\n\n```python\nbalance = client.query_account_balance()\nprint(f\"\u5e33\u6236\u9918\u984d\uff1a{balance}\")\n```\n\n### \u67e5\u8a62\u7c21\u8a0a\u72c0\u614b\n\n```python\n# \u67e5\u8a62\u5df2\u767c\u9001\u7c21\u8a0a\u7684\u72c0\u614b\nstatus = client.query_message_status([\"message_id_1\", \"message_id_2\"])\nprint(status)\n```\n\n## \u74b0\u5883\u8b8a\u6578\u8a2d\u5b9a\n\n\u60a8\u53ef\u4ee5\u4f7f\u7528\u74b0\u5883\u8b8a\u6578\u4f86\u8a2d\u5b9a\u8a8d\u8b49\u8cc7\u8a0a\uff1a\n\n```bash\nexport MITAKE_USERNAME=\"\u4f60\u7684\u5e33\u865f\"\nexport MITAKE_PASSWORD=\"\u4f60\u7684\u5bc6\u78bc\"\n```\n\n## \u932f\u8aa4\u8655\u7406\n\n```python\nfrom mitake import MitakeClient, MitakeError, AuthenticationError, APIError\n\ntry:\n    client = MitakeClient()\n    result = client.send_sms(\"0912345678\", \"\u6e2c\u8a66\u8a0a\u606f\")\nexcept AuthenticationError as e:\n    print(f\"\u8a8d\u8b49\u5931\u6557\uff1a{e}\")\nexcept APIError as e:\n    print(f\"API \u932f\u8aa4\uff1a{e}\")\n    print(f\"\u72c0\u614b\u78bc\uff1a{e.status_code}\")\n    print(f\"\u56de\u61c9\u5167\u5bb9\uff1a{e.response_data}\")\nexcept MitakeError as e:\n    print(f\"\u4e09\u7af9\u7c21\u8a0a\u932f\u8aa4\uff1a{e}\")\n```\n\n## API \u65b9\u6cd5\n\n### send_sms(to, message, message_id=None, send_time=None)\n\u767c\u9001\u55ae\u7b46\u7c21\u8a0a\n\n**\u53c3\u6578\uff1a**\n- `to` (str): \u6536\u8a0a\u4eba\u624b\u6a5f\u865f\u78bc\uff08\u53f0\u7063\u683c\u5f0f\uff1a09xxxxxxxx\uff09\n- `message` (str): \u7c21\u8a0a\u5167\u5bb9\n- `message_id` (str, \u53ef\u9078): \u81ea\u8a02\u8a0a\u606f ID\n- `send_time` (str, \u53ef\u9078): \u9810\u7d04\u767c\u9001\u6642\u9593\uff08YYYY-MM-DD HH:MM:SS \u683c\u5f0f\uff09\n\n### send_batch_sms(messages)\n\u767c\u9001\u6279\u6b21\u7c21\u8a0a\n\n**\u53c3\u6578\uff1a**\n- `messages` (List[Dict]): \u8a0a\u606f\u5217\u8868\uff0c\u6bcf\u500b\u8a0a\u606f\u5305\u542b\uff1a\n  - `to` (str): \u6536\u8a0a\u4eba\u624b\u6a5f\u865f\u78bc\uff08\u5fc5\u586b\uff09\n  - `message` (str): \u7c21\u8a0a\u5167\u5bb9\uff08\u5fc5\u586b\uff09\n  - `message_id` (str, \u53ef\u9078): \u81ea\u8a02\u8a0a\u606f ID\n  - `send_time` (str, \u53ef\u9078): \u9810\u7d04\u767c\u9001\u6642\u9593\uff08YYYYMMDDHHMMSS \u683c\u5f0f\uff09\n  - `valid_time` (str, \u53ef\u9078): \u8a0a\u606f\u6709\u6548\u6642\u9593\uff08YYYYMMDDHHMMSS \u683c\u5f0f\uff09\n  - `dest_name` (str, \u53ef\u9078): \u6536\u8a0a\u4eba\u59d3\u540d\n  - `callback_url` (str, \u53ef\u9078): \u72c0\u614b\u56de\u5831\u7db2\u5740\n\n### query_account_balance()\n\u67e5\u8a62\u5e33\u6236\u9918\u984d\n\n### query_message_status(message_ids)\n\u67e5\u8a62\u7c21\u8a0a\u767c\u9001\u72c0\u614b\n\n**\u53c3\u6578\uff1a**\n- `message_ids` (List[str]): \u8981\u67e5\u8a62\u7684\u8a0a\u606f ID \u5217\u8868\n\n## UTF-8 \u7de8\u78bc\u652f\u63f4\n\n\u672c\u51fd\u5f0f\u5eab\u9810\u8a2d\u4f7f\u7528 UTF-8 \u7de8\u78bc\uff0c\u5b8c\u7f8e\u652f\u63f4\u4e2d\u6587\u7c21\u8a0a\uff1a\n\n```python\n# \u2705 \u6b63\u78ba\uff1a\u652f\u63f4\u4e2d\u6587\u3001\u8868\u60c5\u7b26\u865f\u7b49\nclient.send_sms(\"0912345678\", \"\u4f60\u597d\uff01\u4eca\u5929\u5929\u6c23\u771f\u597d \u2600\ufe0f\")\n\n# \u2705 \u6b63\u78ba\uff1a\u652f\u63f4\u5404\u7a2e\u7279\u6b8a\u5b57\u5143\nclient.send_sms(\"0912345678\", \"\u6e2c\u8a66\u7279\u6b8a\u7b26\u865f\uff1a{} [] | ^ ~ \u7b49\u7b49\")\n```\n\n## \u7cfb\u7d71\u9700\u6c42\n\n- Python 3.7+\n- requests \u51fd\u5f0f\u5eab\n\n## \u6388\u6b0a\u689d\u6b3e\n\nMIT License\n\n## \u958b\u767c\u8005\n\n\u4f7f\u7528\u524d\u8acb\u78ba\u4fdd\u60a8\u5df2\u5411\u4e09\u7af9\u8cc7\u8a0a\u7533\u8acb API \u767c\u9001\u6b0a\u9650\uff0c\u4e26\u63d0\u4f9b\u7a0b\u5f0f\u767c\u9001\u4e3b\u6a5f\u7684 IP \u4f4d\u5740\u9032\u884c\u9396\u5b9a\u3002\n\n\u66f4\u591a API \u8a73\u7d30\u8cc7\u8a0a\u8acb\u53c3\u8003\uff1a[\u4e09\u7af9\u7c21\u8a0a API \u6587\u4ef6](HTTP_MitakeAPI_v2.14.pdf)\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Python library for Mitake SMS API",
    "version": "0.9.2",
    "project_urls": {
        "Bug Reports": "https://github.com/tzangms/mitake/issues",
        "Homepage": "https://github.com/tzangms/mitake",
        "Source": "https://github.com/tzangms/mitake"
    },
    "split_keywords": [
        "mitake",
        "sms",
        "api",
        "taiwan"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "cd3343d80db8e098364376c44258f61807e74901e1a58114f14af9b5e1ff418b",
                "md5": "96e4617e47b4a40fb7a3e880e1b8d163",
                "sha256": "f0db6cfd0cfcf5bc3ed3a63124a316696b9ad986dc0a63fae50979088b69d04c"
            },
            "downloads": -1,
            "filename": "mitake-0.9.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "96e4617e47b4a40fb7a3e880e1b8d163",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 15160,
            "upload_time": "2025-08-20T02:42:54",
            "upload_time_iso_8601": "2025-08-20T02:42:54.331356Z",
            "url": "https://files.pythonhosted.org/packages/cd/33/43d80db8e098364376c44258f61807e74901e1a58114f14af9b5e1ff418b/mitake-0.9.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "96c089704d66586066b6af8ea7011aaccf324d462ff26476a7f11d3c6c54d996",
                "md5": "9bbc5408bbbde93e04fa36022b661a84",
                "sha256": "a4058810eb6a8b68aa520a893ac8912e31a76415a5993de66f325d29a58703cf"
            },
            "downloads": -1,
            "filename": "mitake-0.9.2.tar.gz",
            "has_sig": false,
            "md5_digest": "9bbc5408bbbde93e04fa36022b661a84",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 11401,
            "upload_time": "2025-08-20T02:42:56",
            "upload_time_iso_8601": "2025-08-20T02:42:56.607335Z",
            "url": "https://files.pythonhosted.org/packages/96/c0/89704d66586066b6af8ea7011aaccf324d462ff26476a7f11d3c6c54d996/mitake-0.9.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-20 02:42:56",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "tzangms",
    "github_project": "mitake",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "requests",
            "specs": [
                [
                    ">=",
                    "2.25.0"
                ]
            ]
        }
    ],
    "lcname": "mitake"
}
        
Elapsed time: 0.57606s