Как отсортировать / отфильтровать проекты Google Code по звездочкам?

Я хотел бы знать, какие проекты, размещенные на Google Code, имеют больше всего звезд, особенно при поиске по ярлыку, например:

https://code.google.com/hosting/search?q=label%3aAndroid


person CodeMonkey    schedule 30.05.2013    source источник
comment
Это похоже на вопрос webapps.stackexchange.com, а не на SO.   -  person nemequ    schedule 19.09.2013


Ответы (2)


Сортировка по звездам на странице поиска проектов не поддерживается. Смог написать код для удаления страницы, чтобы получить необходимую информацию.

Надеюсь, поможет.

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;
}
person krishnakumarp    schedule 19.09.2013
comment
Хорошая идея, но я не могу ее здесь протестировать, потому что я нахожусь в среде прокси (поддержка прокси было бы неплохо) - person MRalwasser; 19.09.2013
comment
comment
Спасибо, проблема с прокси решена - однако результатов не хватает многим проектам. Например. если вы используете code.google.com/hosting/ в качестве urlpath отсутствует проект guava, у которого более 4300 звезд. - person MRalwasser; 19.09.2013
comment
интересный. я получил гуаву в определенных пробежках. не появлялся в некоторых других тиражах. Это работает, хотя code.google.com/hosting/ Возможно, некоторые граничные условия не кодируются для .... - person krishnakumarp; 19.09.2013
comment
Потрясающий! Работает как шарм = D - person CodeMonkey; 29.11.2013

Я бы сказал, используйте &sort=stars, как они это делают при поддержке кода Google, но это не работает. К сожалению, я не уверен, что это возможно ...

person Thomas Ayoub    schedule 17.09.2013