Optimisation de la solution de recherche sur github

Dans le processus de travail sur un grand projet, l'emprunt de modules et de solutions clé en main d'autres personnes permet d'économiser énormément de temps de développeur et d'argent pour les investisseurs. L'un des plus grands référentiels de ces solutions est de loin github.

Il y a une petite astuce sous le chat que j'utilise lors de la recherche et du choix des solutions github.

Imaginez la tâche de développer un grand système OSINT , disons que nous devons examiner toutes les solutions disponibles sur github dans cette direction. nous utilisons la recherche github globale standard pour le mot clé osint. Nous obtenons 1124 référentiels, la possibilité de filtrer par l'emplacement de la recherche par mot-clé (code, commits, issuse, etc.), par le langage d'exécution. Et trier par divers attributs (comme le plus / le moins de démarrages, de fourches, etc.).

La décision est prise selon plusieurs critères: fonctionnalité, nombre d'étoiles, support de projet, langage de développement.

image

Les décisions qui m'intéressaient étaient résumées dans un tableau où les champs indiqués ci-dessus étaient remplis, des notes appropriées étaient prises en fonction des résultats d'un test particulier.

L'inconvénient de cette vue, il me semble, est le manque de capacité de trier et de filtrer simultanément sur plusieurs champs.

En utilisant api_github et python3, nous décrivons un simple script simple qui forme pour nous un document csv avec les champs qui nous intéressent.

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

Exécutez le script

 python3 git_repo_search.py osint 

nous obtenons

image

Il me semble que travailler avec des informations est plus pratique, après avoir caché des colonnes inutiles.

Code ici

J'espère que quelqu'un vous sera utile.

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


All Articles