نظرًا لأن واجهة برمجة تطبيقات ترجمة Google تحتاج إلى رسوم، فقد فكرت في طريقة لسرقتها.
1. استخدم HttpClient لإرسال طلب http://translate.google.com
2. ثم استخدم Jsoupparse html لاستخراج النص المترجم.
انسخ رمز الكود كما يلي:
/**
* حقوق الطبع والنشر (ج) لشركة blackbear, Inc. جميع الحقوق محفوظة.
*/
الحزمة org.bb.util.i18n;
استيراد java.io.InputStream؛
import java.net.URLEncoder;
import java.text.MessageFormat;
import org.apache.commons.io.IOUtils;
import org.bb.util.net.http.HttpClientUtil;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
/**
* ترجمة Util
*
* <pre>أداة الترجمة
*ملاحظة: من خلال ترجمة جوجل
* </ما قبل>
*
* @المؤلف حقود
* @الإصدار 1.0، تم إنشاؤه بتاريخ 2011/9/2
*/
الطبقة العامة TranslateUtil {
السلسلة النهائية الثابتة المحمية URL_TEMPLATE = "http://translate.google.com/?langpair={0}&text={1}";
السلسلة النهائية الثابتة المحمية ID_RESULTBOX = "result_box"؛
ترميز السلسلة النهائية الثابتة المحمية = "UTF-8"؛
protected static Final String AUTO = "auto"; // google يحدد النظام المصدر ذاتيًا
سلسلة نهائية ثابتة محمية TAIWAN = "zh-TW";
السلسلة النهائية الثابتة المحمية CHINA = "zh-CN";
سلسلة نهائية ثابتة محمية ENGLISH = "en";
سلسلة نهائية ثابتة محمية JAPAN = "ja";
/**
* <pre>ترجمة جوجل
*ملاحظة: اترك الأمر لـ Google لتحديد النظام المصدر
* </ما قبل>
*
* @نص المعلمة
* @param target_lang نظام الهدف
* @يعود
* @throwsException
*/
ترجمة السلسلة الثابتة العامة (نص السلسلة النهائية، السلسلة النهائية target_lang) يطرح استثناء {
إرجاع ترجمة (نص، AUTO، target_lang)؛
}
/**
* <pre>ترجمة جوجل</pre>
*
* @نص المعلمة
* @param src_lang نظام المصدر
* @param target_lang نظام الهدف
* @يعود
* @throwsException
*/
ترجمة السلسلة الثابتة العامة (نص السلسلة النهائية، السلسلة النهائية src_lang، السلسلة النهائية target_lang)
يلقي استثناء {
InputStream = فارغ؛
المستند doc = null;
عنصر العنصر = فارغ؛
يحاول {
// إنشاء سلسلة URL
سلسلة عنوان url = messageFormat.format(URL_TEMPLATE،
URLEncoder.encode(src_lang + "|" + target_lang, ENCODING)،
URLEncoder.encode(text, ENCODING));
// الاتصال والتنزيل html
is = HttpClientUtil.downloadAsStream(url);
// تحليل HTML بواسطة Jsoup
doc = Jsoup.parse(is, ENCODING, "");
ele = doc.getElementById(ID_RESULTBOX);
نتيجة السلسلة = ele.text();
نتيجة الإرجاع؛
} أخيراً {
IOUtils.CloseQuietly(is);
هو = فارغ؛
وثيقة = فارغة؛
ele = null;
}
}
/**
* <pre>ترجمة جوجل: الصينية-->الصينية التقليدية</pre>
*
* @نص المعلمة
* @يعود
* @throwsException
*/
سلسلة ثابتة عامة cn2tw (نص السلسلة النهائية) تطرح استثناءً {
إرجاع ترجمة (نص، الصين، تايوان)؛
}
/**
* <pre>ترجمة جوجل: الصينية التقليدية-->中文</pre>
*
* @نص المعلمة
* @يعود
* @throwsException
*/
سلسلة ثابتة عامة tw2cn (نص السلسلة النهائية) تطرح استثناءً {
إرجاع ترجمة (نص، تايوان، الصين)؛
}
/**
* <pre>ترجمة جوجل: الإنجليزية-->الصينية التقليدية</pre>
*
* @نص المعلمة
* @يعود
* @throwsException
*/
سلسلة ثابتة عامة en2tw (نص السلسلة النهائية) تطرح استثناءً {
إرجاع ترجمة (نص، الإنجليزية، تايوان)؛
}
/**
* <pre>ترجمة جوجل: الصينية التقليدية-->الإنجليزية</pre>
*
* @نص المعلمة
* @يعود
* @throwsException
*/
سلسلة ثابتة عامة tw2en (نص السلسلة النهائية) تطرح استثناءً {
إرجاع ترجمة (نص، تايوان، الإنجليزية)؛
}
/**
* <pre>ترجمة جوجل: اليابانية-->الصينية التقليدية</pre>
*
* @نص المعلمة
* @يعود
* @throwsException
*/
سلسلة ثابتة عامة jp2tw (نص السلسلة النهائية) تطرح استثناءً {
إرجاع ترجمة (نص، اليابان، تايوان)؛
}
/**
* <pre>ترجمة جوجل: الصينية التقليدية-->اليابانية</pre>
*
* @نص المعلمة
* @يعود
* @throwsException
*/
سلسلة ثابتة عامة tw2jp (نص السلسلة النهائية) تطرح استثناءً {
إرجاع ترجمة (نص، تايوان، اليابان)؛
}
}
HttpClientUtil.java
انسخ رمز الكود كما يلي:
/**
* حقوق الطبع والنشر (ج) لشركة Blackbear, Inc. جميع الحقوق محفوظة.
*/
الحزمة org.bb.util.net.http;
import java.io.BufferedInputStream;
استيراد java.io.File؛
import java.io.FileOutputStream;
استيراد java.io.InputStream؛
import java.util.Map;
import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.Apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.Apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
/**
* PostUtil.java
*
* @المؤلف حقود
* @الإصدار 1.0، تم إنشاؤه بتاريخ 2008/2/20
*/
الطبقة العامة HttpClientUtil {
سجل السجل الثابت المحمي = LogFactory.getLog(HttpClientUtil.class);
protected static HttpClient httpclient = null;
int static protected maxTotal = 200;
int static protected maxPerRoute = 20;
protected static String userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML، مثل Gecko) Chrome/16.0.912.77 Safari/535.7";
ثابت {
إذا (httpclient == فارغة) {
// ~~~~~~~~~~~~~~~~~~~~
// إنشاء httpclient
// ~~~~~~~~~~~~~~~~~~~~
SchemeRegistry reg = new SchemeRegistry();
reg.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));
reg.register(new Scheme("https", 443, SSLSocketFactory.getSocketFactory()));
ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(reg);
cm.setMaxTotal(maxTotal);
cm.setDefaultMaxPerRoute(maxPerRoute);
httpclient = new DefaultHttpClient(cm);
}
}
/**
* <pre>العودة إلى Inputstream في المرة القادمة</pre>
*
* @param URL
* @يعود
* @throwsException
*/
InputStream الثابت العام downloadAsStream(String url) يطرح استثناء {
InputStream is = (InputStream) download(url, null, null, false);
العودة هي؛
}
/**
* <pre>حفظ في ملف بعد التنزيل</pre>
*
* @param URL
* @param saveFile
* @throwsException
*/
تنزيل الفراغ الثابت العام (عنوان URL للسلسلة، ملف saveFile) يطرح الاستثناء {
تنزيل (url، saveFile، null، false)؛
}
/**
* <pre>下</pre>
*
* @param URL
* @param saveFile
* @param المعلمات
* @param isPost
* @return إذا عاد saveFile==null إلى تدفق الإدخال، وإلا فسيعود إلى saveFile
* @throwsException
*/
تنزيل كائن ثابت عام (عنوان url للسلسلة النهائية، ملف saveFile النهائي، Map<String, String> النهائية،
isPost المنطقي النهائي) يطرح استثناء {
boolean saveToFile = saveFile != null;
// تحقق من وجود الدير ؟؟
إذا (saveToFile && saveFile.getParentFile().exists() == false) {
saveFile.getParentFile().mkdirs();
}
خطأ الاستثناء = فارغ؛
HttpRequestBase request = null;
استجابة HttpResponse = فارغة؛
كيان HttpEntity = null;
FileOutputStream fos = null;
نتيجة الكائن = فارغة؛
يحاول {
//إنشاء الطلب
إذا (isPost) {
request = new HttpPost(url);
} آخر {
request = new HttpGet(url);
}
// إضافة رأس ومعلمات
addHeaderAndParams(request, params);
// يتصل
الاستجابة = httpclient.execute(request);
الكيان = Response.getEntity();
الكيان = new BufferedHttpEntity(entity);
// احصل على النتيجة
إذا (saveToFile) {// احفظه على القرص
fos = new FileOutputStream(saveFile);
IOUtils.copy(entity.getContent(), fos);
النتيجة = saveFile؛
} else { // انفتل إلى inpustream
النتيجة = جديد BufferedInputStream(entity.getContent());
}
} قبض (الاستثناء ه) {
يخطئ = ه؛
} أخيراً {
// يغلق
IOUtils.CloseQuietly(fos);
// واضح
طلب = فارغ؛
الاستجابة = فارغة؛
الكيان = فارغ؛
إذا (خطأ! = فارغ) {
رمي خطأ.
}
نتيجة الإرجاع؛
}
}
addHeaderAndParams (final HttpRequestBase request,final Map<String, String> params) {
// أضف رأسًا افتراضيًا
request.addHeader("User-Agent"، userAgent);
// إضافة المعلمات
إذا (المعلمات!= فارغة) {
// الخريطة -> HttpParams
BasicHttpParams myParams = new BasicHttpParams();
لـ (مفتاح السلسلة: params.keySet()) {
myParams.setParameter(key, params.get(key));
}
request.setParams(myParams);
}
}
عامة ثابتة HttpClient getHttpclient() {
إرجاع httpclient;
}
مجموعة الفراغ الثابت العامHttpclient(HttpClient httpclient) {
HttpClientUtil.httpclient = httpclient;
}
public static int getMaxTotal() {
إرجاع الحد الأقصى الإجمالي؛
}
مجموعة الفراغ الثابت العام MaxTotal(int maxTotal) {
HttpClientUtil.maxTotal = maxTotal;
}
عامة ثابتة int getMaxPerRoute() {
إرجاع maxPerRoute;
}
مجموعة الفراغ الثابت العامMaxPerRoute(int maxPerRoute) {
HttpClientUtil.maxPerRoute = maxPerRoute;
}
سلسلة ثابتة عامة getUserAgent() {
إرجاع وكيل المستخدم؛
}
مجموعة الفراغ الثابت العام (String userAgent) {
HttpClientUtil.userAgent = userAgent;
}
}