translate.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import requests
  2. translate_url = 'http://www.r2d2translator.com/composeSongD2R2.php'
  3. file_url = 'http://www.r2d2translator.com/audio/%s.MP3'
  4. class ReqError(RuntimeError):
  5. pass
  6. def encode(msg):
  7. e = ''
  8. for i, c in enumerate(msg):
  9. if i:
  10. e += '!'
  11. if c == ' ':
  12. e += 'silence'
  13. else:
  14. e += str(1 + (ord(c) + 60) % 80)
  15. return e
  16. def get_audio_url(msg):
  17. enc = encode(msg)
  18. vol = '!'.join('1' * len(enc))
  19. req = requests.post(translate_url, data={'volumes': vol, 'sons': enc})
  20. if req.status_code != 200:
  21. raise ReqError()
  22. res = req.text
  23. if not res.startswith(' &cle='):
  24. raise ReqError()
  25. fileid = res[6:]
  26. return file_url % fileid
  27. def request_audio(msg):
  28. req = requests.get(get_audio_url(msg), stream=True)
  29. if req.status_code != 200:
  30. raise ReqError()
  31. return req
  32. def read_request(req):
  33. return req.raw.read(decode_content=False)
  34. def save_request(req, path):
  35. with file(path, 'wb') as f:
  36. for chunk in req.iter_content(1024):
  37. f.write(chunk)
  38. def get_audio(msg):
  39. return read_request(request_audio(msg))
  40. def save_audio(msg, path):
  41. save_request(request_audio(msg), path)