程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java批量收集豌豆莢網站Android運用圖標和包名

java批量收集豌豆莢網站Android運用圖標和包名

編輯:關於JAVA

java批量收集豌豆莢網站Android運用圖標和包名。本站提示廣大學習愛好者:(java批量收集豌豆莢網站Android運用圖標和包名)文章只能為提供參考,不一定能成為您想要的結果。以下是java批量收集豌豆莢網站Android運用圖標和包名正文


Android主題開辟者做的主題,假如想取代第三方運用圖標,就必需要曉得運用的包名。其實想曉得運用的包名很簡略,直接在閱讀器翻開Google Play或豌豆莢,翻開某運用的頁面,看網址你就會發明,網址最初“/”字符後接的就是運用的包名!

估量有人想把經常使用運用的圖標和包名都弄上去,所以用java寫了個小法式,批量抓取了豌豆莢上“全體軟件”按總下載量排名裡1到20頁的運用圖標與包名。

一切圖標都用包名來定名的,外面還有一個packageName.txt文件,包括了運用稱號對應的包名,便利查找。

java源碼

分享這個java小法式,留意,假如豌豆莢的網頁構造變了(估量很少轉變吧),這個小法式就須要修正一下了,假如看得懂的話,修正很簡略的咯。

以下代碼能夠已掉效,僅作參考!

package im.garth.AppIconDownloader;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map.Entry;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 * 獲得豌豆莢網頁上安卓軟件全體軟件
 * 留意:履行法式前,必定要在這個工程目次下創立icon文件夾
 * 一切圖標將下載到icon這個文件夾中
 * 運用稱號與包名寫到了icon下的packageName.txt文件裡
 *
 * 這個法式用到的jar包:
 * commons-logging-1.1.3.jar
 * httpclient-4.1.2.jar
 * httpcore-4.3.jar
 * jsoup-1.6.1.jar
 *
 *
 */
public class AppIconDownloader {

 /**
  * @param args
  */
 public static void main(String[] args) {

  String rootUrl = "http://www.wandoujia.com/tag/全體軟件/total?page=";
  //String rootUrl = "http://www.wandoujia.com/tag/全體游戲/total?page=";
  //下載1到20頁的運用圖標
  for(int i = 1; i < = 20; i++) {
   System.out.println("【下載進度】:預備下載第" + i + "頁");
   String currentUrl = rootUrl + i;
   HashMap<String, String> apps = new HashMap<string , String>();
   apps = getAppImageUrl(currentUrl);
   //遍歷HashMap逐一下載圖標
   for(Entry</string><string , String> entry : apps.entrySet()) {
    try{
     //下載圖標,存儲到以後工程目次下的icon目次(請事前創立icon目次)
     download(entry.getValue(), "icon/" + entry.getKey() + ".png");
    }catch(Exception e) {
     System.out.println("【下載失足】:" + entry.getKey());
     e.printStackTrace();
    }
   }
   System.out.println("【下載進度】:第" + i + "頁下載完成");
  }

 }

 /**
  * 獲得url網頁裡的一切運用的運用名及其圖標網址
  * @param appPackageName
  * @return
  */
 private static HashMap</string><string , String> getAppImageUrl(String url) {

  HashMap</string><string , String> apps = new HashMap</string><string , String>();
  String appPackageName = "";
  String appImageUrl = "";
  String appName = "";

  String html = getHtmlByUrl(url);
  Document doc = Jsoup.parse(html);
     Elements elements = doc.select("div.container.clearfix>section.main-col>div.app-blocks>div.app-block>ul.app-list.clearfix>li.app>a.icon-area"); 
     Elements nameElements = doc.select("div.container.clearfix>section.main-col>div.app-blocks>div.app-block>ul.app-list.clearfix>li.app>div.operate>a.name>span.txt"); 
     Elements imageEle;

     int i = 0;
     for(Element ele : elements) {
      //獲得包名
      appPackageName = ele.attr("data-pn");
      //獲得圖標網址
      imageEle = ele.select("img.icon");
      appImageUrl = imageEle.get(0).attr("src").replace("68_68", "256_256");
      //參加apps
      apps.put(appPackageName, appImageUrl);
      //獲得app稱號
      appName = nameElements.get(i).text();
      //把app稱號和包名輸入到文件
      write2file("【" + appName + "】" + appPackageName);
      i++;
     }
     System.out.println("【下載進度】:" + url + "下的圖標網址曾經獲得勝利");
  return apps;
 }

 /**
    * 下載文件到當地
    *
    * @param urlString
    *          被下載的文件地址
    * @param filename
    *          當地文件名
    * @throws Exception
    *           各類異常
    */
 private static void download(String urlString, String filename) throws Exception {
  System.out.println("【下載進度】:正鄙人載" + filename);
     // 結構URL
     URL url = new URL(urlString);
     // 翻開銜接
     URLConnection con = url.openConnection();
     // 輸出流
     InputStream is = con.getInputStream();
     // 1K的數據緩沖
     byte[] bs = new byte[1024];
     // 讀取到的數據長度
     int len;
     // 輸入的文件流
     OutputStream os = new FileOutputStream(filename);
     // 開端讀取
     while ((len = is.read(bs)) != -1) {
       os.write(bs, 0, len);
     }
     // 終了,封閉一切鏈接
     os.close();
     is.close();
     System.out.println("【下載進度】:" + filename + "下載勝利");
 }  

 /**
  * 依據URL取得一切的html信息
  * @param url
  * @return html
  */ 
 private static String getHtmlByUrl(String url){ 
     String html = null; 
     //創立httpClient對象
     HttpClient httpClient = new DefaultHttpClient(); 
     //以get方法要求該URL
     HttpGet httpget = new HttpGet(url); 
     try { 
         //獲得responce對象
         HttpResponse responce = httpClient.execute(httpget);
         //前往碼
         int resStatu = responce.getStatusLine().getStatusCode(); 
         //200正常  其他就纰謬 
         if (resStatu==HttpStatus.SC_OK) {
             //取得響應實體 
             HttpEntity entity = responce.getEntity(); 
             if (entity!=null) { 
                 //取得html源代碼
                 html = EntityUtils.toString(entity); 
             } 
         } 
     } catch (Exception e) { 
         System.out.println("拜訪【"+url+"】湧現異常!"); 
         e.printStackTrace(); 
     } finally { 
         httpClient.getConnectionManager().shutdown(); 
     } 
     return html; 
 }

 private static void write2file(String content) {

  File file = new File("icon/packageName.txt");
  BufferedWriter writer = null;
  try{
   if(!file.exists()) {
    file.createNewFile();
   }
   //參數true表現將輸入追加到文件內容的末尾而不籠罩本來的內容
   writer = new BufferedWriter(new FileWriter(file, true));
   //輸入內容
   writer.write(content);
   //換行
   writer.newLine();
  } catch(IOException e){
   System.out.println("輸入失足");
   e.printStackTrace();
  } finally {
   if( writer != null) {
    try {
     writer.close();
    } catch(IOException e) {
     e.printStackTrace();
    }
   }
  }
 }

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved