BaiduTranslateService.kt 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package com.twm.tools.local
  2. import com.google.gson.Gson
  3. import okhttp3.FormBody
  4. import okhttp3.OkHttpClient
  5. import okhttp3.Request
  6. import java.math.BigInteger
  7. import java.security.MessageDigest
  8. object BaiduTranslateService: TranslateApi {
  9. private const val TRANSLATE_URL = "https://fanyi-api.baidu.com/api/trans/vip/translate"
  10. private const val BAIDU_APPID = "20230809001774667"
  11. private const val BAIDU_SECRET = ""
  12. private val client = OkHttpClient.Builder().build()
  13. override fun translate(source: String, lang: String): String? {
  14. val salt = System.nanoTime().toString()
  15. val sign = (BAIDU_APPID + source + salt + BAIDU_SECRET).getMd5()
  16. val body = FormBody.Builder()
  17. .add("q", source)
  18. .add("from", "auto")
  19. .add("to", lang)
  20. .add("appid", BAIDU_APPID)
  21. .add("salt", salt)
  22. .add("sign", sign)
  23. .build()
  24. val request = Request.Builder()
  25. .post(body)
  26. .url(TRANSLATE_URL)
  27. .header("Content-Type", "application/x-www-form-urlencoded")
  28. .build()
  29. val response = runCatching {
  30. client.newCall(request).execute()
  31. }
  32. if (response.isFailure) {
  33. return null
  34. }
  35. val result = response.getOrThrow().body?.string() ?: return null
  36. val translate = Gson().fromJson(
  37. result, BaiduTranslateResponse::class.java
  38. )
  39. return translate.trans_result?.firstOrNull()?.dst
  40. }
  41. private fun String.getMd5(): String {
  42. val md = MessageDigest.getInstance("MD5")
  43. return BigInteger(1, md.digest(this.toByteArray())).toString(16).padStart(32, '0')
  44. }
  45. }