Particle Prescouter (Now With Python 3 Support!)

Hi everyone,

I was helping out my home team (1257) with coming up with prescouting for some of our events, and to alleviate the tedium of doing so manually, I wrote this python script.

By default, it returns the best and worst four matches a team has played in the season so far, outputting only the match code via the command-line. The best / worst are calculated with total points, subtracted from fouls. This way, a team’s “best and worst” are based purely on field performance and not fouls / cards.

Dependencies
python3 (3.5 preferred)
requests
sqlite3

Code

How To Run

  • To run on a specific set of teams, you can comment out the method at line 100 and uncomment the one at line 15, following the syntax specified.
  • To run on all teams registered for an event thus far, simply change the TBA eventcode at line 100 from “2017cmpmo” to whatever code you want.
  • To change the number of good / bad matches, simply change the number at line 5, my team tended to use 2 instead.

**
Example Run (bestWorst = 2)(2017 St. Louis Championship Teams):**


20	2017nytr_qf1m2	2017nytr_qf1m1	2017nytr_qm27	2017nysu_qm70		
27	2017miwat_f1m1	2017miwat_qf4m1	2017mndu2_qm69	2017miwat_qm39		
45	2017inpmh_qm58	2017inpmh_qm15	2017inwla_qm21	2017inwla_qm43		
48	2017ohsp_qf4m2	2017ohsp_f1m2	2017ohsp_qm55	2017tnkn_qm8		
51	2017migay_qm25	2017migay_qm60	2017migay_qm15	2017migay_qm72		
67	2017miwat_qm71	2017miwat_qf1m1	2017misou_qm2	2017misou_qm23		
93	2017wimi_qm75	2017wimi_qm29	2017mndu_qm78	2017mndu_qm7		
103	2017paphi_sf2m2	2017paphi_f1m2	2017pahat_qm11	2017pahat_qm14		
111	2017ilpe_qm48	2017ilpe_qm43	2017ilpe_qf1m1	2017ilpe_qm40		
126	2017ripro_qm66	2017ripro_qf2m2	2017mawor_qm2	2017mawor_qm17		
156	2017paca_qf2m3	2017paca_qm43	2017paca_qm1	2017paca_qm61		
190	2017ripro_qf2m2	2017ripro_qm17	2017week0_qm8	2017week0_qm4		
191	2017nyro_qf3m2	2017nyro_f1m2	2017nyro_qm12	2017nyro_qm8		
222	2017njfla_qm56	2017njfla_qm73	2017njfla_qm10	2017njfla_sf1m2		
236	2017ctwat_sf2m2	2017ctwat_f1m2	2017ctwat_qm31	2017ctwat_qm60		
250	2017nytr_qf4m1	2017nysu_qm43	2017nytr_qm62	2017nytr_qm34		
254	2017casf_sf1m1	2017casf_qf1m2	2017casf_qm18	2017casf_qm40		
271	2017nyro_qf1m1	2017nyro_f1m2	2017nyro_qm5	2017nyro_qm12		
333	2017nytr_f1m2	2017nytr_qf2m2	2017nytr_qm60	2017nytr_qm10		
340	2017nyro_qm59	2017nyro_qf1m1	2017nyro_qm74	2017nyro_qm1		
341	2017paphi_qm44	2017paphi_qm61	2017pahat_qm12	2017pahat_qm31		
354	No matches played yet, check back later.	
359	2017paca_qf1m2	2017paca_f1m1	2017scmb_qm1	2017paca_qm34		
537	2017mosl_qf1m1	2017mosl_sf1m2	2017mosl_qm10	2017mosl_qm81		
597	2017calb_qf1m2	2017calb_qf1m1	2017calb_qm36	2017calb_qm29		
677	No matches played yet, check back later.	
694	2017flwp_qm56	2017flwp_qm41	2017flwp_qm36	2017flwp_qm2		
876	2017iacf_qf1m2	2017mndu2_sf1m1	2017mndu2_qm31	2017mndu2_qm58		
935	2017mokc_qf3m2	2017mokc_qf3m1	2017mokc_sf2m3	2017txlu_qm45		
1086	2017vagle_qm55	2017vabla_f1m3	2017vabla_qm22	2017vabla_qm28		
1114	2017onwat_f1m3	2017onwat_qf1m1	2017onto1_qm3	2017onto1_qm22		
1288	2017mosl_qf3m2	2017mosl_qf3m1	2017mosl_f1m2	2017mosl_qm1		
1511	2017nyro_qf2m2	2017nyro_sf1m2	2017nyro_qm30	2017nyro_qm21		
1676	2017njbri_qm39	2017njbri_qm61	2017vabla_qm2	2017vabla_qm60		
1706	2017mosl_qf1m1	2017mosl_sf1m2	2017alhu_qm57	2017mosl_qm6		
1710	2017mokc_qf3m2	2017mokc_qf3m1	2017mokc_sf2m3	2017mokc_qm34		
1714	2017wimi_qf4m1	2017wimi_qm83	2017mndu_qm53	2017wimi_qm47		
1730	2017mokc_qm26	2017lake_qf3m1	2017lake_qm33	2017lake_qm27		
1732	2017wimi_qf2m1	2017mosl_qf1m1	2017mosl_qm1	2017mosl_qm30		
1810	2017mokc_qm26	2017mokc_qm36	2017mokc_qm14	2017mokc_qm43		
1816	2017mndu_qm83	2017mndu_qm57	2017mndu_qm19	2017mndu_qm70		
1880	2017nysu_qf3m1	2017nysu_qm68	2017nysu_qm3	2017nysu_qm43		
1939	2017mosl_qf3m2	2017mosl_qm75	2017mosl_qm50	2017mosl_f1m2		
1987	2017mokc_f1m2	2017iacf_sf2m5	2017mokc_qm28	2017iacf_qm32		
2039	2017ilpe_qm66	2017ilpe_qm2	2017ilpe_qm45	2017ilpe_qm40		
2052	2017mndu_qf1m3	2017mndu_f1m3	2017mndu_qm36	2017mndu_f1m2		
2056	2017onwat_f1m3	2017onwat_qf1m1	2017onwat_qm18	2017onwat_qm7		
2068	2017mdedg_qm73	2017mdedg_qm11	2017mdedg_qm22	2017vahay_qm12		
2164	2017mokc_qf4m2	2017mokc_qf4m3	2017txlu_qm4	2017txlu_qm31		
2169	2017ilpe_qf3m3	2017ilpe_qm36	2017ilpe_f1m1	2017ilpe_qm18		
2220	2017ilpe_qf1m2	2017ilpe_sf1m1	2017ilpe_qm13	2017ilpe_qm3		
2252	2017paca_qf1m2	2017paca_f1m1	2017ohsp_qm23	2017ohsp_qm42		
2451	2017ohsp_qf4m2	2017ohsp_f1m2	2017ohsp_qm3	2017ohsp_qm33		
2481	2017ilpe_qf1m2	2017ilpe_sf1m1	2017txlu_qm36	2017txlu_sf1m1		
2502	2017mndu2_qf2m2	2017mndu2_qf2m1	2017mndu2_qm35	2017mndu2_qm3		
2509	2017mndu2_sf2m1	2017mndu2_sf2m2	2017mndu2_qm25	2017mndu2_qm41		
2512	2017iacf_qf1m2	2017mndu2_sf1m1	2017mndu2_qm30	2017iacf_qm23		
2607	2017njtab_qm3	2017njtab_qf1m2	2017pahat_qm2	2017njtab_qm49		
2614	2017scmb_qf4m3	2017scmb_qf4m4	2017scmb_qm18	2017scmb_qm11		
2781	No matches played yet, check back later.	
2791	2017nytr_f1m2	2017nytr_qf2m2	2017nytr_qm24	2017nytr_qm18		
2977	2017mndu_qm53	2017mndu_qm64	2017mndu_qm19	2017mndu_qm82		
3015	2017nyro_qf3m2	2017nyro_f1m2	2017nyro_qm41	2017nyro_qm53		
3044	2017nysu_qm30	2017nytr_qm40	2017nysu_qm80	2017nytr_qm43		
3090	No matches played yet, check back later.	
3130	2017wimi_qf1m2	2017wimi_qf1m1	2017mndu2_qm2	2017mndu2_qm12		
3201	2017ohsp_f1m1	2017ohsp_qm70	2017ohsp_qm29	2017ohsp_qm79		
3260	2017paca_qm56	2017paca_qm70	2017paca_qf2m3	2017ohsp_qm22		
3293	2017mndu_sf2m1	2017mndu_qf3m1	2017mndu_f1m3	2017mndu_qm59		
3324	2017ohsp_qm24	2017ohsp_qf3m1	2017ohsp_qm3	2017ohsp_qm68		
3359	2017vapor_qf2m2	2017vapor_qf2m3	2017vabla_qm22	2017vabla_qm19		
3492	2017paca_sf2m2	2017paca_sf2m1	2017paca_qm45	2017paca_qm10		
3494	2017inpmh_qf2m3	2017inpmh_sf1m2	2017vabla_qm5	2017vabla_qm8		
3504	2017paca_qf3m2	2017paca_qf3m1	2017paca_qf3m3	2017paca_qm49		
3525	2017ripro_qm32	2017ripro_qm43	2017ctwat_qm25	2017ctwat_qm32		
3755	2017mndu_sf2m1	2017mndu_qf3m1	2017mndu_qm52	2017mndu_qm82		
3799	2017nyro_qf3m2	2017nyro_f1m2	2017nyro_qm30	2017nyro_qm2		
3926	No matches played yet, check back later.	
3954	2017paca_qf1m2	2017paca_f1m1	2017paca_qm51	2017paca_qm1		
3990	2017qcmo_qf3m2	2017nytr_qf3m2	2017qcmo_sf2m1	2017qcmo_qm30		
4028	2017paca_sf2m2	2017paca_sf2m1	2017paca_qm47	2017paca_qm34		
4085	2017ohsp_qf4m2	2017ohsp_f1m2	2017ohsp_qm35	2017ohsp_qm67		
4143	2017ilpe_qf1m2	2017ilpe_sf1m1	2017mosl_qm26	2017ilpe_qm50		
4241	2017ilpe_qf3m3	2017ilpe_f1m2	2017ilpe_qm4	2017ilpe_qm27		
4253	2017ausc_qm39	2017ausp_sf2m4	2017ausc_qm45	2017ausp_qm44		
4481	2017flor_f1m1	2017flor_f1m2	2017flwp_qm7	2017flwp_qm34		
4485	2017inpmh_qm36	2017inmis_qf1m1	2017inpmh_qm45	2017inpmh_qm6		
4508	2017nytr_qf3m1	2017nytr_qm53	2017nytr_qm8	2017nytr_qm23		
4522	2017okok_qf3m1	2017okok_qf3m2	2017arli_qm43	2017mokc_qm11		
4539	2017wimi_qm90	2017mndu_qf1m3	2017mndu_qm70	2017wimi_qm5		
4859	2017mndu2_qf2m2	2017mndu2_qm65	2017mndu2_qm3	2017mndu2_qm26		
4926	2017inpmh_qf1m1	2017inpmh_qm1	2017inwla_qm21	2017inwla_qm4		
4959	2017mokc_qm86	2017mokc_qf3m2	2017mokc_sf2m3	2017mokc_qm70		
4961	2017miwat_qm65	2017miwat_qm9	2017miwat_qm22	2017miwat_qm5		
4991	2017paca_sf2m2	2017paca_qm51	2017paca_qm10	2017paca_qm35		
5123	2017nytr_qm7	2017nysu_qm33	2017nytr_qm3	2017nysu_qm2		
5243	2017mdedg_qm71	2017mdedg_qm45	2017flwp_qm30	2017mdbet_qm70		
5675	2017miwmi_qm20	2017miwmi_qf4m3	2017migul_qm47	2017migul_qm42		
5801	2017mokc_f1m2	2017mokc_sf1m1	2017mokc_qm7	2017mokc_qm78		
5847	2017ilpe_qf3m3	2017ilpe_qm6	2017ilpe_f1m1	2017ilpe_qm49		
6318	2017mndu_qf2m1	2017mndu_sf1m2	2017mndu_qm29	2017mndu_qm73		
6391	2017mosl_qm67	2017mosl_qm38	2017mosl_qm71	2017mosl_qm29		
6419	2017mokc_qm42	2017mokc_qm84	2017mokc_qm31	2017mokc_qm15		
6490	2017nyro_qf4m1	2017nyro_qm73	2017nyro_qm25	2017nyro_qm5		
6613	2017mndu2_sf2m1	2017mndu2_sf2m2	2017mndu2_qm31	2017mndu2_qm41		
6758	2017mndu2_qf1m2	2017mndu2_qf1m1	2017mndu2_qm30	2017mndu2_qm18			

Please note that each match, each team, and each event are separate calls to The Blue Alliance, and as such, this tool should be used semi-sparingly. Otherwise, you may inadvertently make hundreds of API calls.

Good luck, and happy scouting!