หากคุณต้องการแทนที่ไอคอนแอปพลิเคชันบุคคลที่สามด้วยธีมที่สร้างโดยผู้พัฒนาธีม Android คุณต้องทราบชื่อแพ็คเกจของแอปพลิเคชัน จริงๆ แล้ว การทราบชื่อแพ็คเกจของแอปพลิเคชันนั้นง่ายมาก เพียงเปิด Google Play หรือ Wandoujia ในเบราว์เซอร์ เปิดหน้าของแอปพลิเคชัน แล้วดูที่ URL คุณจะพบว่ามีอักขระ "/" ตัวสุดท้ายอยู่ URL ตามด้วยชื่อแพ็คเกจของแอปพลิเคชัน!
ฉันเดาว่ามีคนต้องการได้รับไอคอนและชื่อแพ็คเกจของแอปพลิเคชันที่ใช้กันทั่วไป ดังนั้นฉันจึงเขียนโปรแกรมขนาดเล็กใน Java เพื่อรวบรวมไอคอนและแพ็คเกจของแอปพลิเคชันตั้งแต่หน้าที่ 1 ถึง 20 ของ "ซอฟต์แวร์ทั้งหมด" บน Wandoujia โดยจัดอันดับตามชื่อการดาวน์โหลดทั้งหมด .
ไอคอนทั้งหมดตั้งชื่อด้วยชื่อแพ็คเกจ และยังมีไฟล์ packageName.txt อยู่ข้างใน ซึ่งมีชื่อแพ็คเกจที่สอดคล้องกับชื่อแอปพลิเคชัน เพื่อให้ค้นหาได้ง่าย
ซอร์สโค้ดจาวา
แบ่งปันแอปเพล็ต Java นี้ โปรดทราบว่าหากโครงสร้างหน้าเว็บของ Wandoujia เปลี่ยนแปลง (อาจไม่ค่อยมีการเปลี่ยนแปลง) แอปเพล็ตนี้จะต้องได้รับการแก้ไข หากคุณเข้าใจ การปรับเปลี่ยนนั้นง่ายมาก
รหัสต่อไปนี้อาจใช้ไม่ได้อีกต่อไปและใช้สำหรับการอ้างอิงเท่านั้น!
คัดลอกรหัสรหัสดังต่อไปนี้:
แพ็คเกจ im.garth.AppIconDownloader;
นำเข้า java.io.BufferedWriter;
นำเข้า java.io.File;
นำเข้า java.io.FileOutputStream;
นำเข้า java.io.FileWriter;
นำเข้า java.io.IOException;
นำเข้า java.io.InputStream;
นำเข้า java.io.OutputStream;
นำเข้า java.net.URL;
นำเข้า java.net.URLConnection;
นำเข้า java.util.HashMap;
นำเข้า java.util.Map.Entry;
นำเข้า org.apache.http.HttpEntity;
นำเข้า org.apache.http.HttpResponse;
นำเข้า org.apache.http.HttpStatus;
นำเข้า org.apache.http.client.HttpClient;
นำเข้า org.apache.http.client.methods.HttpGet;
นำเข้า org.apache.http.impl.client.DefaultHttpClient;
นำเข้า org.apache.http.util.EntityUtils;
นำเข้า org.jsoup.Jsoup;
นำเข้า org.jsoup.nodes.Document;
นำเข้า org.jsoup.nodes.Element;
นำเข้า org.jsoup.select.Elements;
-
* รับซอฟต์แวร์ Android ทั้งหมดบนเว็บไซต์ Wandoujia
* หมายเหตุ: ก่อนที่จะรันโปรแกรม ต้องแน่ใจว่าได้สร้างโฟลเดอร์ไอคอนในไดเร็กทอรีโปรเจ็กต์นี้
* ไอคอนทั้งหมดจะถูกดาวน์โหลดไปยังโฟลเดอร์ไอคอน
* ชื่อแอปพลิเคชันและชื่อแพ็คเกจเขียนอยู่ในไฟล์ packageName.txt ใต้ไอคอน
-
* แพ็คเกจ Jar ที่ใช้ในโปรแกรมนี้:
* commons-logging-1.1.3.jar
* httpclient-4.1.2.jar
* httpcore-4.3.jar
* jsoup-1.6.1.jar
-
-
-
AppIconDownloader คลาสสาธารณะ {
-
* @param args
-
โมฆะคงที่สาธารณะ main (String [] args) {
สตริง rootUrl = "http://www.wandoujia.com/tag/all software/total?page=";
//String rootUrl = "http://www.wandoujia.com/tag/allgames/total?page=";
//ดาวน์โหลดไอคอนแอปพลิเคชันตั้งแต่หน้าที่ 1 ถึง 20
สำหรับ(int i = 1; i < = 20; i++) {
System.out.println("[ความคืบหน้าการดาวน์โหลด]: เตรียมดาวน์โหลดหน้า " + i + "");
สตริง currentUrl = rootUrl + i;
แอป HashMap<String, String> = HashMap ใหม่<string, String>();
แอพ = getAppImageUrl (URL ปัจจุบัน);
//สำรวจ HashMap เพื่อดาวน์โหลดไอคอนทีละไอคอน
สำหรับ(รายการ</string><string , String> รายการ : apps.entrySet()) {
พยายาม{
//ดาวน์โหลดไอคอนและเก็บไว้ในไดเร็กทอรีไอคอนใต้ไดเร็กทอรีโปรเจ็กต์ปัจจุบัน (โปรดสร้างไดเร็กทอรีไอคอนไว้ล่วงหน้า)
ดาวน์โหลด(entry.getValue(), "icon/" + entry.getKey() + ".png");
} จับ (ข้อยกเว้นจ) {
System.out.println("[ข้อผิดพลาดในการดาวน์โหลด]: " + entry.getKey());
e.printStackTrace();
-
-
System.out.println("[ความคืบหน้าการดาวน์โหลด]: หน้า " + i + " ดาวน์โหลดเสร็จสิ้น");
-
-
-
* รับชื่อแอปพลิเคชันและ URL ไอคอนของแอปพลิเคชันทั้งหมดในหน้าเว็บ URL
* @param appPackageName
* @กลับ
-
HashMap แบบคงที่ส่วนตัว </string><string, String> getAppImageUrl (URL สตริง) {
HashMap</string><string, String> apps = HashMap ใหม่</string><string, String>();
สตริง appPackageName = "";
สตริง appImageUrl = "";
สตริงชื่อแอป = "";
สตริง html = getHtmlByUrl(url);
เอกสาร doc = Jsoup.parse(html);
องค์ประกอบองค์ประกอบ = doc.select("div.container.clearfix>section.main-col>div.app-blocks>div.app-block>ul.app-list.clearfix>li.app>a.icon-area" );
องค์ประกอบ nameElements = doc.select("div.container.clearfix>section.main-col>div.app-blocks>div.app-block>ul.app-list.clearfix>li.app>div.operate>a ชื่อ>span.txt");
องค์ประกอบภาพEle;
int i = 0;
สำหรับ (องค์ประกอบองค์ประกอบ: องค์ประกอบ) {
// รับชื่อแพ็คเกจ
appPackageName = ele.attr("data-pn");
//รับ URL ของไอคอน
imageEle = ele.select("img.icon");
appImageUrl = imageEle.get(0).attr("src").replace("68_68", "256_256");
//เพิ่มแอป
apps.put(appPackageName, appImageUrl);
//รับชื่อแอป
appName = nameElements.get(i).text();
//ส่งออกชื่อแอปและชื่อแพ็คเกจไปยังไฟล์
write2file("【" + ชื่อแอป + "】" + ชื่อแพ็คเกจแอป);
ฉัน++;
-
System.out.println("[ความคืบหน้าการดาวน์โหลด]:" + url + "URL ไอคอนใต้ "ได้รับเรียบร้อยแล้ว");
คืนแอป;
-
-
* ดาวน์โหลดไฟล์ไปยังท้องถิ่น
-
* @param urlString
* ที่อยู่ไฟล์ที่ดาวน์โหลด
* ชื่อไฟล์ @param
* ชื่อไฟล์ในเครื่อง
* @throwsException
* ความผิดปกติต่างๆ
-
การดาวน์โหลดโมฆะแบบคงที่ส่วนตัว (String urlString, ชื่อไฟล์ String) พ่นข้อยกเว้น {
System.out.println("[ความคืบหน้าการดาวน์โหลด]: กำลังดาวน์โหลด" + ชื่อไฟล์);
// สร้าง URL
URL url = URL ใหม่ (urlString);
//เปิดการเชื่อมต่อ
URLConnection con = url.openConnection();
// สตรีมอินพุต
InputStream คือ = con.getInputStream();
// บัฟเฟอร์ข้อมูล 1K
ไบต์ [] bs = ไบต์ใหม่ [1024];
//ความยาวของข้อมูลที่อ่าน
อินท์เลน;
//สตรีมไฟล์เอาท์พุต
OutputStream os = FileOutputStream ใหม่ (ชื่อไฟล์);
//เริ่มอ่าน.
ในขณะที่ ((len = is.read(bs)) != -1) {
os.write(bs, 0, len);
-
// เสร็จแล้วปิดลิงค์ทั้งหมด
os.ปิด();
คือ.ปิด();
System.out.println("[ความคืบหน้าการดาวน์โหลด]:" + ชื่อไฟล์ + "ดาวน์โหลดสำเร็จ");
-
-
* รับข้อมูล html ทั้งหมดตาม URL
* @param url
* @return html
-
สตริงคงที่ส่วนตัว getHtmlByUrl (URL สตริง) {
สตริง html = null;
//สร้างวัตถุ httpClient
HttpClient httpClient = DefaultHttpClient ใหม่ ();
//ขอ URL ในโหมดรับ
HttpGet httpget = HttpGet ใหม่ (url);
พยายาม {
//รับวัตถุตอบสนอง
การตอบสนอง HttpResponse = httpClient.execute (httpget);
// รหัสส่งคืน
int resStatu = response.getStatusLine().getStatusCode();
//200 เป็นเรื่องปกติ ส่วนอื่นๆ ไม่ถูกต้อง
ถ้า (resStatu==HttpStatus.SC_OK) {
//รับเอนทิตีที่เกี่ยวข้อง
เอนทิตี HttpEntity = response.getEntity();
ถ้า (เอนทิตี! = null) {
// รับซอร์สโค้ด html
html = EntityUtils.toString(เอนทิตี);
-
-
} จับ (ข้อยกเว้นจ) {
System.out.println("เกิดข้อยกเว้นขณะเข้าถึง ["+url+"]!");
e.printStackTrace();
} ในที่สุด {
httpClient.getConnectionManager().ปิดเครื่อง();
-
ส่งคืน HTML;
-
โมฆะคงที่ส่วนตัว write2file (เนื้อหาสตริง) {
ไฟล์ file = ไฟล์ใหม่ ("icon/packageName.txt");
ผู้เขียน BufferedWriter = null;
พยายาม{
ถ้า(!file.exists()) {
ไฟล์. createNewFile();
-
//พารามิเตอร์ จริง หมายถึงการต่อท้ายเอาต์พุตที่ส่วนท้ายของเนื้อหาไฟล์โดยไม่ต้องเขียนทับเนื้อหาต้นฉบับ
นักเขียน = ใหม่ BufferedWriter (FileWriter ใหม่ (ไฟล์, จริง));
//ส่งออกเนื้อหา
นักเขียน. เขียน (เนื้อหา);
//ขึ้นบรรทัดใหม่
นักเขียน.newLine();
} จับ (IOException e) {
System.out.println("ข้อผิดพลาดเอาต์พุต");
e.printStackTrace();
} ในที่สุด {
ถ้า (ผู้เขียน != null) {
พยายาม {
นักเขียน.ปิด();
} จับ (IOException จ) {
e.printStackTrace();
-
-
-
-
-