البحث الأمثل الحل على جيثب

في عملية العمل على مشروع كبير ، يوفر استعارة الوحدات الأخرى وحلول تسليم المفتاح كمية هائلة من وقت المطور وأموال المستثمر. واحدة من أكبر مستودعات مثل هذه الحلول هي إلى حد بعيد جيثب.

هناك خدعة صغيرة أسفل القطة التي أستخدمها عند البحث عن حلول جيثب واختيارها.

تخيل مهمة تطوير نظام OSINT كبير ، دعنا نقول أننا بحاجة إلى النظر في جميع الحلول المتاحة على جيثب في هذا الاتجاه. نستخدم github العالمية القياسية للبحث عن الكلمة الأساسية osint. نحصل على 1124 مستودعًا ، والقدرة على التصفية حسب موقع البحث عن الكلمات الرئيسية (الكود ، التعهدات ، الإصدار ، إلخ) ، من خلال لغة التنفيذ. وفرزها حسب السمات المختلفة (مثل معظم / أقل عدد يبدأ ، شوك ، إلخ).

يتم اتخاذ القرار وفقًا لعدة معايير: الوظيفة ، عدد النجوم ، دعم المشروع ، لغة التطوير.

صورة

تم تلخيص القرارات التي تهمني في جدول تم فيه ملء الحقول المشار إليها أعلاه ، وتم تقديم الملاحظات المناسبة بناءً على نتائج اختبار معين.

عيب هذا الرأي ، كما يبدو لي ، هو عدم القدرة على الفرز والتصفية في وقت واحد عبر حقول متعددة.

باستخدام 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 

نحن نحصل عليها

صورة

يبدو لي أن العمل بالمعلومات أكثر ملاءمة ، بعد إخفاء الأعمدة غير الضرورية.

كود هنا

آمل أن يأتي شخص في متناول اليدين.

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


All Articles