2013-05-30 26 views

Odpowiedz

7

Sortowanie według gwiazdek nie jest obsługiwane na stronie wyszukiwania projektu. Był w stanie napisać kod strony do złomowania, aby uzyskać wymagane informacje.

Mam nadzieję, że to pomaga.

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

Przyjemny pomysł, ale nie można go przetestować tutaj, ponieważ jestem w środowisku proxy (wsparcie dla proxy byłoby miłe) – MRalwasser

+0

Zobacz http://www.java.com/en/download/help/proxy_setup.xml i http: // stackoverflow.com/a/120802/276263 – krishnakumarp

+0

Dzięki, problem proxy został rozwiązany - jednak w wynikach brakuje wielu projektów. Na przykład. jeśli używasz http://code.google.com/hosting/search?q=label%3AJava&filter=0&mode=&start= jako urlpath, brakuje w nim projektu guava, który ma ponad 4300 gwiazd interesujących – MRalwasser

0

bym powiedzmy użyć &sort=stars jak robią to we wspieraniu kod Google, ale nie działa dobrze. Nie jestem pewien, czy jest to niestety możliwe ...

Powiązane problemy