Otimização da solução de pesquisa no github

No processo de trabalhar em um grande projeto, emprestar módulos de outras pessoas e soluções prontas para uso economiza uma quantidade enorme de tempo do desenvolvedor e do investidor. Um dos maiores repositórios dessas soluções é de longe o github.

Existe um pequeno truque sob o gato que eu uso ao pesquisar e escolher as soluções do github.

Imagine a tarefa de desenvolver um grande sistema OSINT , digamos que precisamos examinar todas as soluções disponíveis no github nessa direção. usamos a pesquisa global padrão do github para a palavra-chave osint. Temos 1124 repositórios, a capacidade de filtrar pelo local da pesquisa por palavra-chave (código, confirmações, emissão, etc.), pelo idioma de execução. E classifique por vários atributos (como a maioria / menos partidas, forquilhas, etc.).

A decisão é tomada de acordo com vários critérios: funcionalidade, número de estrelas, suporte ao projeto, linguagem de desenvolvimento.

imagem

As decisões que me interessaram foram resumidas em uma tabela em que os campos indicados acima foram preenchidos, anotações apropriadas foram feitas com base nos resultados de um teste específico.

A desvantagem dessa visão, parece-me, é a falta de capacidade de classificar e filtrar simultaneamente vários campos.

Usando api_github e python3, descrevemos um script simples e simples que forma um documento csv para nós com os campos de interesse para nós.

#!/usr/bin/env python3 from requests import get from sys import argv def print_to_csv(out_file,massive): open(out_file,'a').writelines('id;name;full_name;language;description;created_at;updated_at;html_url;homepage;fork' ';pushed_at;stargazers_count;has_wiki;has_pages;archived;license;score;stargazers_count\n') for i in massive: open(out_file,'a').writelines(i+'\n') def string_to_csv_string(my_dict): csv_string='' keys=['id', 'name', 'full_name','language', 'description','created_at', 'updated_at', 'html_url', 'homepage','fork', 'pushed_at', 'stargazers_count','has_wiki', 'has_pages', 'archived', 'license', 'score','stargazers_count'] for i in keys: csv_string+=(str(my_dict[i])+';') return csv_string def dicts_to_dictsString(dicts): strings=set() for dict in dicts: string=string_to_csv_string(dict) strings.add(string) return strings def search_to_git(keyword): item_all=set() req=get('https://api.github.com/search/repositories?q={}&per_page=100&sort=stars'.format(keyword)) item_all=item_all|dicts_to_dictsString(req.json()['items']) page_all=req.json()['total_count']/100 if page_all>=10: page_all=10 for i in range(2,int(page_all)+1): req = get('https://api.github.com/search/repositories?q={}&per_page=100&sort=stars&page={}'.format(keyword,i)) try: item_all=item_all|dicts_to_dictsString(req.json()['items']) except KeyError: return item_all return item_all if __name__ == '__main__': try: strings=list(search_to_git(argv[1])) print_to_csv(argv[1]+'.csv',strings) except IndexError: print('''exemple: ./git_search_info keyword_for_search out_file ''') 

Execute o script

 python3 git_repo_search.py osint 

nós temos

imagem

Parece-me que trabalhar com informações é mais conveniente, depois de ocultar colunas desnecessárias.

Código aqui

Espero que alguém venha a calhar.

Source: https://habr.com/ru/post/pt477268/


All Articles