2013-05-30 31 views

Trả lời

7

Sắp xếp theo sao không được hỗ trợ trên trang tìm kiếm của dự án. Đã có thể viết một số trang scrapping mã để có được các thông tin cần thiết.

Hy vọng điều đó sẽ hữu ích.

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.List; 


public class ReadGoogleProjectSortByStars { 

    public static void main(String[] args) throws IOException { 
     String urlPath = "https://code.google.com/hosting/search?q=label%3AAndroid&filter=0&mode=&start="; 
     // urlPath = "https://code.google.com/hosting/search?q=label%3AAndroid+stackoverflow&projectsearch=Search+projects&filter=0&mode=&start="; 
     int start = 0; 
     List<Project> projects = new ArrayList<Project>(); 
     boolean done = false; 
     while(!done) { 
      String urlStr = urlPath + start; 
      URL url = new URL(urlStr); 
      BufferedReader in = new BufferedReader(
      new InputStreamReader(url.openStream())); 

      String inputLine; 
      String projectUrl = null, stars = null; 
      while ((inputLine = in.readLine()) != null) { 
       int urlIndex = -1, starIndex = -1; 
       if(inputLine.contains(" style=\"font-size:medium\">") && (urlIndex = inputLine.indexOf(" href=\"/p/")) != -1) { 
        if(projectUrl != null) { 
         Project project = new Project(); 
         project.url = projectUrl; 
         project.stars = "0"; 
         projects.add(project); 
        } 
        String projectTempUrl = inputLine.substring(urlIndex + " href=\"/p/".length()); 
        projectUrl = "https://code.google.com/p/" + projectTempUrl.substring(0, projectTempUrl.indexOf("\"")); 
       } 
       if((starIndex = inputLine.indexOf("id=\"star_count-")) != -1) { 
        stars = inputLine.substring(inputLine.indexOf(">") + 1, inputLine.indexOf("</span>")); 
        Project project = new Project(); 
        project.url = projectUrl; 
        project.stars = stars; 
        projects.add(project); 
        projectUrl = stars = null; 
       } 
       if(inputLine.contains(" - did not generate any results.")) { 
        done = true; 
        break; 
       } 
      } 
      in.close(); 
      start +=10; 
      if(projectUrl != null) { 
       Project project = new Project(); 
       project.url = projectUrl; 
       project.stars = "0"; 
       projects.add(project); 
      } 
     } 
     Collections.sort(projects, new Comparator<Project>() { 

      @Override 
      public int compare(Project project1, Project project2) { 
       Integer stars1 = Integer.parseInt(project1.stars); 
       Integer stars2 = Integer.parseInt(project2.stars); 
       return -stars1.compareTo(stars2); 
      } 

     }); 
     System.out.println("Total projects:" +projects.size()); 
     for (Project project : projects) { 
      System.out.println(project.url + ":" + project.stars); 
     } 
    } 
} 

class Project { 
    String url; 
    String stars; 
} 
+0

Ý tưởng hay, nhưng không thể kiểm tra ở đây vì tôi đang ở trong môi trường proxy (hỗ trợ proxy sẽ tốt đẹp) – MRalwasser

+0

Xem http://www.java.com/en/download/help/proxy_setup.xml và http: // stackoverflow.com/a/120802/276263 – krishnakumarp

+0

Cảm ơn, vấn đề proxy đã được giải quyết - tuy nhiên kết quả thiếu nhiều dự án. Ví dụ. nếu bạn sử dụng http://code.google.com/hosting/search?q=label%3AJava&filter=0&mode=&start= làm urlpath, nó thiếu dự án ổi, trong đó có hơn 4300 sao – MRalwasser

0

tôi sẽ có tiếng nói sử dụng &sort=stars như họ làm trong sự hỗ trợ của mã google nhưng nó không hoạt động tốt. Tôi không chắc chắn nó có thể không may ...

Các vấn đề liên quan