Suchlösungsoptimierung auf Github

Während der Arbeit an einem großen Projekt spart die Ausleihe von Modulen und schlüsselfertigen Lösungen anderer Entwickler eine enorme Menge an Zeit und Geld für Investoren. Eines der größten Repositories für solche Lösungen ist mit Abstand Github.

Es gibt einen kleinen Trick unter der Katze, den ich bei der Suche und Auswahl von Github-Lösungen verwende.

Stellen Sie sich die Aufgabe vor, ein großes OSINT- System zu entwickeln. Nehmen wir an, wir müssen uns alle verfügbaren Lösungen auf github in diese Richtung ansehen. Wir verwenden die standardmäßige globale Github-Suche für das Schlüsselwort osint. Wir haben 1124 Repositories, die nach dem Ort der Schlüsselwortsuche (Code, Commits, Issuse usw.) und der Ausführungssprache filtern können. Und sortieren Sie nach verschiedenen Attributen (wie den meisten / wenigsten Starts, Gabeln usw.).

Die Entscheidung wird nach mehreren Kriterien getroffen: Funktionalität, Anzahl der Sterne, Projektunterstützung, Entwicklungssprache.

Bild

Die Entscheidungen, die mich interessierten, wurden in einer Tabelle zusammengefasst, in der die oben angegebenen Felder ausgefüllt wurden. Auf der Grundlage der Ergebnisse eines bestimmten Tests wurden entsprechende Notizen gemacht.

Der Nachteil dieser Ansicht scheint mir das Fehlen der Fähigkeit zu sein, gleichzeitig über mehrere Felder zu sortieren und zu filtern.

Mit api_github und python3 skizzieren wir ein einfaches Skript, das ein CSV-Dokument mit für uns interessanten Feldern bildet.

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

Führen Sie das Skript aus

 python3 git_repo_search.py osint 

wir bekommen

Bild

Es scheint mir, dass das Arbeiten mit Informationen bequemer ist, nachdem unnötige Spalten ausgeblendet wurden.

Code hier

Ich hoffe, dass jemand nützlich ist.

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


All Articles