Optimización de soluciones de búsqueda en github

En el proceso de trabajar en un proyecto grande, tomar prestados módulos de otras personas y soluciones llave en mano ahorra una gran cantidad de tiempo de desarrollador y dinero de los inversores. Uno de los mayores depósitos de tales soluciones es, con mucho, Github.

Hay un pequeño truco debajo del gato que uso cuando busco y elijo soluciones github.

Imagine la tarea de desarrollar un gran sistema OSINT , digamos que necesitamos mirar todas las soluciones disponibles en github en esta dirección. Utilizamos la búsqueda estándar global de github para la palabra clave osint. Obtenemos 1124 repositorios, la capacidad de filtrar por la ubicación de la búsqueda de palabras clave (código, commits, issuse, etc.), por el lenguaje de ejecución. Y ordene por varios atributos (como mayoría / pocos inicios, horquillas, etc.).

La decisión se toma de acuerdo con varios criterios: funcionalidad, número de estrellas, soporte de proyectos, lenguaje de desarrollo.

imagen

Las decisiones que me interesaron se resumieron en una tabla donde se completaron los campos indicados anteriormente, se tomaron las notas apropiadas en función de los resultados de una prueba en particular.

La desventaja de esta vista, me parece, es la falta de la capacidad de ordenar y filtrar simultáneamente en múltiples campos.

Usando api_github y python3, describimos un script simple y simple que forma un documento csv para nosotros con los campos que nos interesan.

#!/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 ''') 

Ejecute el script

 python3 git_repo_search.py osint 

tenemos

imagen

Me parece que trabajar con información es más conveniente, después de ocultar columnas innecesarias.

Codigo aqui

Espero que alguien sea útil.

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


All Articles