Files
chunyu_project/api/views/BaiduFanyiView.md
T
2026-08-05 23:59:15 +08:00

369 lines
9.0 KiB
Markdown

# BaiduFanyiView Documentation
## 📄 **File Location**
`api/views/BaiduFanyiView.py`
### **Overview**
Provides comprehensive translation and language recognition services using Baidu Translate API. All views have been converted to asynchronous operations for optimal performance with Daphne ASGI server.
### **Class Details**
```python
@permission_classes([AllowAny])
class BaiduFanyiView(APIView):
async def post(self, request): # Text translation
@permission_classes([AllowAny])
class RecognizeLangTypeViews(APIView):
async def post(self, request): # Language recognition
@permission_classes([AllowAny])
class PictureRecognizeViews(APIView):
parser_classes = [MultiPartParser, FormParser]
async def post(self, request): # Picture translation
@permission_classes([AllowAny])
class SpeechRecognitionView(APIView):
parser_classes = [MultiPartParser, FormParser]
async def post(self, request): # Speech recognition
```
#### **Permissions**
- **Access Level**: Public (no authentication required)
- **Authentication**: None (`@permission_classes([AllowAny])`)
### **Method Details**
---
### **1. BaiduFanyiView (Text Translation)**
#### **Endpoint**: `POST /api/translate/`
##### **Description**
Translates text content between supported languages using Baidu Translate API.
##### **Parameters**
```json
{
"q": "text to translate", // Required: Text content (max 3000 characters)
"from_lang": "en", // Required: Source language code
"to_lang": "zh" // Required: Target language code
}
```
##### **Supported Languages**
Languages are loaded from `info.baidu_lang_info`:
- Check `languages` for supported language pairs
- Use `"auto"` for automatic source language detection
##### **Response Format**
```json
{
"message": "Success",
"code": "10000",
"data": {
"trans_result": [
{
"src": "Hello world",
"dst": "你好世界"
}
],
"from": "en",
"to": "zh"
}
}
```
##### **Error Responses**
| Code | Status | Description |
|------|--------|-------------|
| 400 | Bad Request | Invalid language codes or missing parameters |
| 400 | Bad Request | Text length exceeds 3000 characters |
| 503 | Service Unavailable | Baidu API temporarily unavailable |
---
### **2. RecognizeLangTypeViews (Language Recognition)**
#### **Endpoint**: `POST /api/recognize-language/`
##### **Description**
Automatically detects the language of provided text content.
##### **Parameters**
```json
{
"q": "text to recognize" // Required: Text content (max 3000 characters)
}
```
##### **Response Format**
```json
{
"message": "Success",
"code": "10000",
"data": {
"lang": "en",
"confidence": 0.98
}
}
```
##### **Error Responses**
| Code | Status | Description |
|------|--------|-------------|
| 400 | Bad Request | Text length exceeds 3000 characters |
| 400 | Bad Request | Language not in supported range |
| 503 | Service Unavailable | Baidu API temporarily unavailable |
---
### **3. PictureRecognizeViews (Picture Translation)**
#### **Endpoint**: `POST /api/picture-translate/`
##### **Description**
Translates text within images using Baidu's OCR and translation capabilities.
##### **Request Format**
Multipart form data with file upload and query parameters.
##### **Parameters**
**Form Data:**
- `file`: Image file (required)
**Query Parameters:**
- `from_lang`: Source language code (required)
- `to_lang`: Target language code (required)
- `picture`: Image format type (required, e.g., "jpg", "png")
##### **Request Example**
```bash
curl -X POST http://your-api.com/api/picture-translate/
-H "Content-Type: multipart/form-data"
-F "file=@image.jpg"
-G --data-urlencode "from_lang=en"
--data-urlencode "to_lang=zh"
--data-urlencode "picture=jpg"
```
##### **Response Format**
```json
{
"message": "Success",
"code": "10000",
"data": {
"words_result_num": 2,
"words_result": [
{
"words": "Hello World"
},
{
"words": "Welcome"
}
]
}
}
```
##### **Error Responses**
| Code | Status | Description |
|------|--------|-------------|
| 400 | Bad Request | Invalid language codes |
| 400 | Bad Request | Unsupported image format |
| 503 | Service Unavailable | Baidu API temporarily unavailable |
---
### **4. SpeechRecognitionView (Speech Recognition)**
#### **Endpoint**: `POST /api/speech-recognition/`
##### **Description**
Recognizes and translates speech/audio content.
##### **Request Format**
Multipart form data with voice file upload and query parameters.
##### **Parameters**
**Form Data:**
- `voice`: Audio file (required)
**Query Parameters:**
- `speech_type`: Audio format (required, e.g., "pcm")
- `from_lang`: Source language code (required)
- `to_lang`: Target language code (required)
##### **Request Example**
```bash
curl -X POST http://your-api.com/api/speech-recognition/
-H "Content-Type: multipart/form-data"
-F "voice=@audio.wav"
-G --data-urlencode "speech_type=pcm"
--data-urlencode "from_lang=en"
--data-urlencode "to_lang=zh"
```
##### **Response Format**
```json
{
"message": "Success",
"code": "10000",
"data": {
"result": "你好世界",
"corpus_no": "123456789",
"status": 0
}
}
```
##### **Error Responses**
| Code | Status | Description |
|------|--------|-------------|
| 400 | Bad Request | Unsupported speech type |
| 400 | Bad Request | Invalid language codes |
| 503 | Service Unavailable | Baidu API temporarily unavailable |
---
### **Implementation Details**
#### **Async Operations**
All views use `aiohttp` for non-blocking HTTP requests:
```python
async with aiohttp.ClientSession() as session:
async with session.post(url, params=payload, headers=headers) as response:
result = await response.json()
```
#### **Fallback Mechanism**
If `aiohttp` is not available, views fall back to synchronous `requests`:
```python
if aiohttp:
# Use async aiohttp
else:
# Fallback to sync requests
```
#### **Configuration**
Baidu API configuration loaded from:
- `info.baidu_fanyi_appid.py`: appid, appkey, endpoint
- `info.baidu_lang_info.py`: languages, auto_lang, cuid, mac
---
### **Security & Performance**
#### **Rate Limiting**
- Respects Baidu API rate limits
- No additional rate limiting implemented
- Consider implementing client-side rate limiting
#### **Input Validation**
- Text length limit: 3000 characters
- Language code validation
- File format validation for media endpoints
#### **Error Handling**
- Comprehensive try-catch blocks
- Meaningful error messages
- Graceful degradation when service unavailable
---
### **Usage Examples**
#### **Python Client**
```python
import aiohttp
import asyncio
async def translate_text():
async with aiohttp.ClientSession() as session:
payload = {'q': 'Hello', 'from_lang': 'en', 'to_lang': 'zh'}
async with session.post('http://api/translate/', json=payload) as resp:
return await resp.json()
# Run async operation
result = asyncio.run(translate_text())
```
#### **JavaScript Frontend**
```javascript
// Text translation
const translate = async (text, fromLang, toLang) => {
const response = await fetch('/api/translate/', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({q: text, from_lang: fromLang, to_lang: toLang})
});
return await response.json();
};
```
#### **Testing Endpoints**
```bash
# Test text translation
curl -X POST http://localhost:8000/api/translate/
-H "Content-Type: application/json"
-d '{"q":"Hello world","from_lang":"en","to_lang":"zh"}'
# Test language recognition
curl -X POST http://localhost:8000/api/recognize-language/
-H "Content-Type: application/json"
-d '{"q":"Hello world"}'
```
---
### **Monitoring & Debugging**
#### **Logging**
- Request data logged via `print(request.data)`
- API responses logged via `print(sign)` in speech recognition
- Consider adding structured logging for production
#### **Performance Metrics**
- Async operations reduce blocking time
- Concurrent requests handled efficiently
- Memory usage optimized with streaming where possible
#### **Health Checks**
- Service availability can be checked via API status
- Consider implementing health check endpoints
---
### **Integration Notes**
#### **Django Integration**
```python
# urls.py
from django.urls import path
from api.views import BaiduFanyiView, RecognizeLangTypeViews, PictureRecognizeViews, SpeechRecognitionView
urlpatterns = [
path('translate/', BaiduFanyiView.as_view(), name='translate'),
path('recognize-language/', RecognizeLangTypeViews.as_view(), name='recognize-language'),
path('picture-translate/', PictureRecognizeViews.as_view(), name='picture-translate'),
path('speech-recognition/', SpeechRecognitionView.as_view(), name='speech-recognition'),
]
```
#### **Running with Daphne**
```bash
pip install aiohttp
daphne chunyu_project.asgi:application --port 8000
```
---
**Last Updated**: Current Session
**Version**: 1.0