เนื่องจากต้องมีการเรียกเก็บเงินจาก Google แปล API ฉันจึงคิดหาวิธีที่จะขโมยมัน
1. ใช้ HttpClient เพื่อส่งคำขอ http://translate.google.com
2. จากนั้นใช้ Jsoupparse html เพื่อแยกข้อความที่แปล
คัดลอกรหัสรหัสดังต่อไปนี้:
-
* ลิขสิทธิ์ (c) blackbear, Inc สงวนลิขสิทธิ์
-
แพ็คเกจ org.bb.util.i18n;
นำเข้า java.io.InputStream;
นำเข้า java.net.URLEncoder;
นำเข้า java.text.MessageFormat;
นำเข้า org.apache.commons.io.IOUtils;
นำเข้า org.bb.util.net.http.HttpClientUtil;
นำเข้า org.jsoup.Jsoup;
นำเข้า org.jsoup.nodes.Document;
นำเข้า org.jsoup.nodes.Element;
-
* TranslateUtil
-
* <pre>เครื่องมือการแปล
*PS: ผ่าน Google แปล
* </pre>
-
* @ผู้เขียน ส่อเสียด
* @version 1.0 สร้างเมื่อ 2011/9/2011
-
TranslateUtil คลาสสาธารณะ {
ป้องกันสตริงสุดท้ายแบบคงที่ URL_TEMPLATE = "http://translate.google.com/?langpair={0}&text={1}";
ป้องกันสตริงสุดท้ายคงที่ ID_RESULTBOX = "result_box";
ป้องกันการเข้ารหัสสตริงสุดท้ายคงที่ = "UTF-8";
ป้องกันสตริงสุดท้ายแบบคงที่ AUTO = "auto"; // google กำหนดระบบต้นทางด้วยตนเอง
ป้องกันสตริงสุดท้ายแบบคงที่ TAIWAN = "zh-TW"; // ภาษาจีนตัวเต็ม
ป้องกันสตริงสุดท้ายแบบคงที่ CHINA = "zh-CN"; // สื่อ
ป้องกันสตริงสุดท้ายแบบคงที่ ENGLISH = "en"; // English
ป้องกันสตริงสุดท้ายคงที่ JAPAN = "ja"; // วัน
-
* <pre>Google แปลแล้ว
*PS: ปล่อยให้ Google เป็นผู้กำหนดระบบต้นทาง
* </pre>
-
* ข้อความ @param
* ระบบเป้าหมาย @param target_lang
* @กลับ
* @throwsException
-
การแปลสตริงคงที่สาธารณะ (ข้อความสตริงสุดท้าย, สตริงสุดท้าย target_lang) พ่นข้อยกเว้น {
กลับการแปล (ข้อความ, อัตโนมัติ, target_lang);
-
-
* <pre>แปลโดย Google</pre>
-
* ข้อความ @param
* ระบบต้นทาง @param src_lang
* ระบบเป้าหมาย @param target_lang
* @กลับ
* @throwsException
-
การแปลสตริงคงที่สาธารณะ (ข้อความสตริงสุดท้าย, สตริงสุดท้าย src_lang, สตริงสุดท้าย target_lang)
พ่นข้อยกเว้น {
InputStream คือ = null;
เอกสารเอกสาร = null;
องค์ประกอบองค์ประกอบ = โมฆะ;
พยายาม {
// สร้างสตริง URL
สตริง url = MessageFormat.format (URL_TEMPLATE,
URLEncoder.encode(src_lang + "|" + target_lang, การเข้ารหัส),
URLEncoder.encode(ข้อความ, การเข้ารหัส));
// เชื่อมต่อและดาวน์โหลด html
คือ = HttpClientUtil.downloadAsStream (url);
// แยกวิเคราะห์ html โดย Jsoup
doc = Jsoup.parse (คือการเข้ารหัส "");
เอเล = doc.getElementById(ID_RESULTBOX);
ผลลัพธ์สตริง = ele.text();
ส่งคืนผลลัพธ์;
} ในที่สุด {
IOUtils.closeQuietly (เป็น);
คือ = โมฆะ;
doc = โมฆะ;
เอเล = โมฆะ;
-
-
-
* <pre>การแปลโดย Google: จีน-->จีนดั้งเดิม</pre>
-
* ข้อความ @param
* @กลับ
* @throwsException
-
สตริงคงที่สาธารณะ cn2tw (ข้อความสตริงสุดท้าย) พ่นข้อยกเว้น {
กลับแปล (ข้อความ, จีน, ไต้หวัน);
-
-
* <pre>การแปลโดย Google: จีนตัวเต็ม-->中文</pre>
-
* ข้อความ @param
* @กลับ
* @throwsException
-
สตริงคงที่สาธารณะ tw2cn (ข้อความสตริงสุดท้าย) พ่นข้อยกเว้น {
กลับแปล (ข้อความ, ไต้หวัน, จีน);
-
-
* <pre>การแปลของ Google: อังกฤษ-->ภาษาจีนตัวเต็ม</pre>
-
* ข้อความ @param
* @กลับ
* @throwsException
-
สตริงคงที่สาธารณะ en2tw (ข้อความสตริงสุดท้าย) พ่นข้อยกเว้น {
กลับแปล (ข้อความ, อังกฤษ, ไต้หวัน);
-
-
* <pre>การแปลโดย Google: จีนตัวเต็ม-->อังกฤษ</pre>
-
* ข้อความ @param
* @กลับ
* @throwsException
-
สตริงคงที่สาธารณะ tw2en (ข้อความสตริงสุดท้าย) พ่นข้อยกเว้น {
กลับแปล (ข้อความ, ไต้หวัน, อังกฤษ);
-
-
* <pre>การแปลโดย Google: ญี่ปุ่น-->ภาษาจีนตัวเต็ม</pre>
-
* ข้อความ @param
* @กลับ
* @throwsException
-
สตริงคงที่สาธารณะ jp2tw (ข้อความสตริงสุดท้าย) พ่นข้อยกเว้น {
กลับแปล (ข้อความ, ญี่ปุ่น, ไต้หวัน);
-
-
* <pre>การแปลโดย Google: จีนตัวเต็ม-->ญี่ปุ่น</pre>
-
* ข้อความ @param
* @กลับ
* @throwsException
-
สตริงคงที่สาธารณะ tw2jp (ข้อความสตริงสุดท้าย) พ่นข้อยกเว้น {
กลับแปล (ข้อความ, ไต้หวัน, ญี่ปุ่น);
-
-
HttpClientUtil.java
คัดลอกรหัสรหัสดังต่อไปนี้:
-
* ลิขสิทธิ์ (c) Blackbear, Inc สงวนลิขสิทธิ์
-
แพ็คเกจ org.bb.util.net.http;
นำเข้า java.io.BufferedInputStream;
นำเข้า java.io.File;
นำเข้า java.io.FileOutputStream;
นำเข้า java.io.InputStream;
นำเข้า java.util.Map;
นำเข้า org.apache.commons.io.IOUtils;
นำเข้า org.apache.commons.logging.Log;
นำเข้า org.apache.commons.logging.LogFactory;
นำเข้า org.apache.http.HttpEntity;
นำเข้า org.apache.http.HttpResponse;
นำเข้า org.apache.http.client.HttpClient;
นำเข้า org.apache.http.client.methods.HttpGet;
นำเข้า org.apache.http.client.methods.HttpPost;
นำเข้า org.apache.http.client.methods.HttpRequestBase;
นำเข้า org.apache.http.conn.scheme.PlainSocketFactory;
นำเข้า org.apache.http.conn.scheme.Scheme;
นำเข้า org.apache.http.conn.scheme.SchemeRegistry;
นำเข้า org.apache.http.conn.ssl.SSLSocketFactory;
นำเข้า org.apache.http.entity.BufferedHttpEntity;
นำเข้า org.apache.http.impl.client.DefaultHttpClient;
นำเข้า org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
นำเข้า org.apache.http.params.BasicHttpParams;
-
*PostUtil.java
-
* @ผู้เขียน ส่อเสียด
* @version 1.0 สร้างเมื่อ 2/2/2551
-
HttpClientUtil คลาสสาธารณะ {
บันทึกบันทึกคงที่ที่ได้รับการป้องกัน = LogFactory.getLog (HttpClientUtil.class);
ป้องกัน HttpClient httpclient แบบคงที่ = null;
ป้องกันคงที่ int maxTotal = 200;
ป้องกันคงที่ int maxPerRoute = 20;
ป้องกันสตริงคงที่ userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML เช่น Gecko) Chrome/16.0.912.77 Safari/535.7";
คงที่ {
ถ้า (httpclient == null) {
-
// สร้าง httpclient
-
SchemeRegistry reg = SchemeRegistry ใหม่ ();
reg.register(รูปแบบใหม่("http", 80, PlainSocketFactory.getSocketFactory()));
reg.register(รูปแบบใหม่("https", 443, SSLSocketFactory.getSocketFactory()));
ThreadSafeClientConnManager cm = ThreadSafeClientConnManager ใหม่ (reg);
cm.setMaxTotal(สูงสุดรวม);
cm.setDefaultMaxPerRoute(maxPerRoute);
httpclient = DefaultHttpClient ใหม่ (ซม.);
-
-
-
* <pre>กลับสู่ Inputstream ครั้งถัดไป</pre>
-
* @param url
* @กลับ
* @throwsException
-
ดาวน์โหลด InputStream แบบคงที่สาธารณะ AsStream (URL สตริง) พ่นข้อยกเว้น {
InputStream คือ = (InputStream) ดาวน์โหลด (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, พารามิเตอร์แผนที่สุดท้าย <สตริง, สตริง>,
isPost บูลีนสุดท้าย) พ่นข้อยกเว้น {
บูลีน saveToFile = saveFile != null;
// ตรวจสอบว่ามี dir อยู่หรือไม่ ??
ถ้า (saveToFile && saveFile.getParentFile().exists() == false) {
saveFile.getParentFile().mkdirs();
-
ข้อผิดพลาดข้อยกเว้น = null;
คำขอ HttpRequestBase = null;
การตอบสนอง HttpResponse = null;
เอนทิตี HttpEntity = null;
FileOutputStream fos = null;
ผลลัพธ์ของวัตถุ = null;
พยายาม {
//สร้างคำขอ
ถ้า (isPost) {
คำขอ = HttpPost ใหม่ (url);
} อื่น {
คำขอ = HttpGet ใหม่ (url);
-
// เพิ่มส่วนหัวและพารามิเตอร์
addHeaderAndParams(คำขอ, พารามิเตอร์);
// เชื่อมต่อ
การตอบสนอง = httpclient.execute (คำขอ);
เอนทิตี = การตอบสนอง getEntity();
เอนทิตี = ใหม่ BufferedHttpEntity (เอนทิตี);
//รับผล
ถ้า (saveToFile) {// บันทึกลงดิสก์
fos = FileOutputStream ใหม่ (บันทึกไฟล์);
IOUtils.copy(entity.getContent(), fos);
ผลลัพธ์ = บันทึกไฟล์;
} else { // วาร์ปไปที่ inpustream
ผลลัพธ์ = ใหม่ BufferedInputStream(entity.getContent());
-
} จับ (ข้อยกเว้นจ) {
ผิดพลาด = อี;
} ในที่สุด {
// ปิด
IOUtils.closeQuietly(fos);
// ชัดเจน
คำขอ = โมฆะ;
การตอบสนอง = โมฆะ;
เอนทิตี = โมฆะ;
ถ้า (ผิดพลาด != null) {
โยนผิดพลาด;
-
ส่งคืนผลลัพธ์;
-
-
โมฆะคงที่ที่ได้รับการป้องกัน addHeaderAndParams (คำขอ HttpRequestBase สุดท้าย, พารามิเตอร์แผนที่ <String, String> สุดท้าย) {
// เพิ่มส่วนหัวเริ่มต้น
request.addHeader("ตัวแทนผู้ใช้", userAgent);
// เพิ่มพารามิเตอร์
ถ้า (พารามิเตอร์ != null) {
// แผนที่ --> HttpParams
BasicHttpParams myParams = BasicHttpParams ใหม่();
สำหรับ (คีย์สตริง: params.keySet()) {
myParams.setParameter(คีย์, params.get(คีย์));
-
request.setParams(myParams);
-
-
HttpClient สาธารณะ getHttpclient () {
ส่งคืน httpclient;
-
โมฆะคงที่สาธารณะ setHttpclient (HttpClient httpclient) {
HttpClientUtil.httpclient = httpclient;
-
int สาธารณะคงที่ getMaxTotal () {
ส่งคืนผลรวมสูงสุด;
-
โมฆะสาธารณะคงที่ setMaxTotal (int maxTotal) {
HttpClientUtil.maxTotal = maxTotal;
-
int สาธารณะคงที่ getMaxPerRoute () {
กลับ maxPerRoute;
-
โมฆะสาธารณะคงที่ setMaxPerRoute (int maxPerRoute) {
HttpClientUtil.maxPerRoute = maxPerRoute;
-
สตริงสาธารณะ getUserAgent() {
ส่งคืนตัวแทนผู้ใช้;
-
โมฆะสาธารณะคงที่ setUserAgent (สตริง userAgent) {
HttpClientUtil.userAgent = userAgent;
-
-