Оптимизация Поиска Решений На Github

При работе над большим проектом заимствование чужих модулей и готовых решений экономит огромное количество времени разработчиков и денег инвесторов.

Одним из крупнейших репозиториев таких решений, безусловно, является github. Ниже приведена небольшая хитрость, которую я использую при поиске и выборе решений на github. Представим себе задачу разработки большого ОСИНТ системы, скажем, нам нужно просмотреть все доступные решения на github в этой области.

Мы используем стандартный глобальный поиск на GitHub по ключевому слову osint. Мы получаем 1124 репозитория, возможность фильтрации по местоположению поиска по ключевым словам (код, коммиты, проблема и т. д.) и по языку исполнения.

И сортируйте по различным критериям (например, наибольшее/наименьшее количество запусков, развилки и т. д.).

Выбор решения осуществляется по нескольким критериям: функциональность, количество звезд, поддержка проекта, язык разработки.



Оптимизация поиска решений на github

Заинтересовавшие меня решения были сведены в таблицу, где были заполнены указанные выше поля и сделаны соответствующие записи по результатам того или иного теста.

Недостатком такого представления, как мне кажется, является невозможность одновременно сортировать и фильтровать по нескольким полям.

Через api_github и python3 мы набросаем простой скрипт, который генерирует для нас документ csv с интересующими нас полями.

  
   

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

Запустите сценарий

python3 git_repo_search.py osint

мы получаем

Оптимизация поиска решений на github

Мне кажется, так удобнее работать с информацией, предварительно скрыв ненужные столбцы.

Код здесь Надеюсь, это кому-то пригодится.

Теги: #github #github API

Вместе с данным постом часто просматривают: