9.0 KiB
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
@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
{
"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
languagesfor supported language pairs - Use
"auto"for automatic source language detection
Response Format
{
"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
{
"q": "text to recognize" // Required: Text content (max 3000 characters)
}
Response Format
{
"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
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
{
"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
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
{
"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:
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:
if aiohttp:
# Use async aiohttp
else:
# Fallback to sync requests
Configuration
Baidu API configuration loaded from:
info.baidu_fanyi_appid.py: appid, appkey, endpointinfo.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
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
// 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
# 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
# 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
pip install aiohttp
daphne chunyu_project.asgi:application --port 8000
Last Updated: Current Session Version: 1.0