From 3eda7647e92844c1cc5c2d7ea22b7c55e8079ee1 Mon Sep 17 00:00:00 2001 From: canin carlos Date: Thu, 19 Feb 2026 22:49:47 -0500 Subject: [PATCH] DoD Contracts, Maps and Austria --- WarContracts/contract_list.json | 1 + WarContracts/final_results.json | 1 + WarContracts/get_contracts.py | 281 ++++++++++++++++++ Working/govt/mn.legislature.py | 13 +- Working/govt/mn.stp.citycouncil.py | 1 - ...au.vi.arenawien.py => au.vie.arenawien.py} | 0 Working/venues/getMaps.py | 72 +++++ Working/venues/il.chi.subterranean.py | 2 +- Working/venues/manual/eventario.py | 51 ++-- Working/venues/mn.mpls.HookNLadder.py | 2 +- Working/venues/mn.mpls.ParkwayTheater.py | 2 - Working/venues/mn.mpls.UptownVFW.py | 13 +- Working/workshop/smedia/bluetweet.py | 68 +++++ 13 files changed, 469 insertions(+), 38 deletions(-) create mode 100644 WarContracts/contract_list.json create mode 100644 WarContracts/final_results.json create mode 100644 WarContracts/get_contracts.py rename Working/venues/{au.vi.arenawien.py => au.vie.arenawien.py} (100%) create mode 100644 Working/venues/getMaps.py create mode 100644 Working/workshop/smedia/bluetweet.py diff --git a/WarContracts/contract_list.json b/WarContracts/contract_list.json new file mode 100644 index 0000000..2e608ba --- /dev/null +++ b/WarContracts/contract_list.json @@ -0,0 +1 @@ +[{"para": 111, "contract": "W519TC26D0003", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 111, "contract": "W519TC26D0004", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 111, "contract": "W519TC26D0005", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 112, "contract": "W900KK26FA025", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 113, "contract": "W31P4Q26C0009", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 114, "contract": "W15QKN26D0004", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 115, "contract": "W9127N26CA011", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 116, "contract": "W912DY26CA002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 117, "contract": "W9124J20D0012", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 118, "contract": "W911XK26CA005", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 119, "contract": "W9128F26CA012", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 120, "contract": "W911WN26CA001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 121, "contract": "W31P4Q26F0039", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 122, "contract": "W56HZV21C0072", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 123, "contract": "W900KK26CA008", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 124, "contract": "W912HP26CA003", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 125, "contract": "W912HY26CA010", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 126, "contract": "FA821026DB001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 127, "contract": "FA881126CB001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 128, "contract": "FA701425F0145", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 129, "contract": "FA238426CB028", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 130, "contract": "N0016426DWM41", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 131, "contract": "N0042122C0013", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 132, "contract": "N6945026D0001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 133, "contract": "N6945026D0011", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 134, "contract": "N0001923C0021", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 135, "contract": "N6833526F0005", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 135, "contract": "N6833524G0056", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 136, "contract": "N3220526C1207", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 136, "contract": "N3220526C1207", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 137, "contract": "N3220526C1206", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 137, "contract": "N3220526C1206", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 138, "contract": "M6785425D5002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 138, "contract": "M6785426F5308", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 139, "contract": "SPE30026DP449", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 139, "contract": "SPE30026DS786", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 139, "contract": "SPE30024R0015", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 141, "contract": "SPE1C126D0023", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 142, "contract": "SPE2DP26D0004", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 143, "contract": "HT001124C0015", "website": "https://www.war.gov/News/Contracts/Contract/Article/4397759/contracts-for-feb-2-2026-through-feb-4-2026/"}, {"para": 148, "contract": "FA863426CB002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 150, "contract": "FA239826DB001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 151, "contract": "FA872626FB005", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 152, "contract": "FA882320C0004", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 153, "contract": "FA701426D0001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 154, "contract": "FA221726FB001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 156, "contract": "FA283424CB002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 157, "contract": "FA873021C0022", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 158, "contract": "HQ003426DE003", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 158, "contract": "HQ003426DE004", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 158, "contract": "HQ003426DE005", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 158, "contract": "HQ003426DE006", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 158, "contract": "HQ003426DE007", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 158, "contract": "HQ003426DE008", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 158, "contract": "HQ003426DE009", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 159, "contract": "N0003026C1005", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 160, "contract": "N3220526C0006", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 160, "contract": "N3220526C006", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 161, "contract": "M0026426D0003", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 162, "contract": "N0002422C5501", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 163, "contract": "N0018921DZ024", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 164, "contract": "N3220526C1222", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 164, "contract": "N3220526C122", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 165, "contract": "N0001922F2016", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 165, "contract": "N0001921G0006", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 166, "contract": "N0002423C6106", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 167, "contract": "N3220526C1220", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 168, "contract": "N6600123C4037", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 169, "contract": "SPE1C122D1516", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 170, "contract": "HS002126CE004", "website": "https://www.war.gov/News/Contracts/Contract/Article/4394525/contracts-for-jan-30-2026/"}, {"para": 175, "contract": "W31P4Q24C0024", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 176, "contract": "W519TC26D0001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 177, "contract": "W912CH26DA018", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 177, "contract": "W912CH26DA019", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 177, "contract": "W912CH26DA020", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 177, "contract": "W912CH26DA021", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 177, "contract": "W912CH26DA022", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 177, "contract": "W912CH26DA023", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 177, "contract": "W912CH26DA024", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 177, "contract": "W912CH26DA025", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 177, "contract": "W912CH26DA026", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 177, "contract": "W912CH26DA027", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 177, "contract": "W912CH26DA028", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 177, "contract": "W912CH26DA029", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 177, "contract": "W912CH26DA030", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 177, "contract": "W912CH26DA031", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 178, "contract": "W912CH26DA032", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 178, "contract": "W912CH26DA033", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 178, "contract": "W912CH26DA034", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 178, "contract": "W912CH26DA035", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 178, "contract": "W912CH26DA036", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 178, "contract": "W912CH26DA037", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 178, "contract": "W912CH26DA038", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 178, "contract": "W912CH26DA039", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 178, "contract": "W912CH26DA040", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 178, "contract": "W912CH26DA041", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 178, "contract": "W912CH26DA042", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 178, "contract": "W912CH26DA043", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 178, "contract": "W912CH26DA044", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 178, "contract": "W912CH26DA045", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 179, "contract": "W9127826DA022", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 179, "contract": "W9127826DA028", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 179, "contract": "W9127826DA020", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 179, "contract": "W9127826DA026", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 179, "contract": "W9127826DA027", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 179, "contract": "W9127826DA024", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 179, "contract": "W9127826DA025", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 179, "contract": "W9127826DA023", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 179, "contract": "W9127826DA021", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA046", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA047", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA048", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA049", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA050", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA051", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA052", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA053", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA054", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA055", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA056", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA057", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA058", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA059", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA060", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA061", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA062", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA063", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 180, "contract": "W912CH26DA064", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 181, "contract": "W912BU26DA002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 182, "contract": "W912P926DA027", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 182, "contract": "W912P926DA028", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 182, "contract": "W912P926DA029", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 182, "contract": "W912P926DA030", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 183, "contract": "W81K0426DA002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 184, "contract": "N6274226D1206", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 185, "contract": "N4425523D1600", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 185, "contract": "N4425523D1601", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 185, "contract": "N4425523D1602", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 185, "contract": "N4425523D1603", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 185, "contract": "N4425523D1604", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 185, "contract": "N4425523D1605", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 185, "contract": "N4425523D1606", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 185, "contract": "N4425523D1607", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 185, "contract": "N4425523D1608", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 185, "contract": "N4425523D1609", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 186, "contract": "N6247026D0003", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 187, "contract": "N6134026D0001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 188, "contract": "N0010426FBF01", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 188, "contract": "N0010426DBF01", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 189, "contract": "N0001924F1883", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 189, "contract": "N0001923G0002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 190, "contract": "N3220526C1221", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 190, "contract": "N3220526C1221", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 191, "contract": "FA823226CB005", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 194, "contract": "FA862123C0023", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 195, "contract": "FA860126D0002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 196, "contract": "FA812126D0001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 197, "contract": "FA945326CX010", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 198, "contract": "SP470626D0002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 199, "contract": "HR001124C0307", "website": "https://www.war.gov/News/Contracts/Contract/Article/4393248/contracts-for-jan-29-2026/"}, {"para": 203, "contract": "W15QKN26DA032", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 203, "contract": "W15QKN26DA033", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 203, "contract": "W15QKN26DA034", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 203, "contract": "W15QKN26DA035", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 203, "contract": "W15QKN26DA036", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 203, "contract": "W15QKN26DA037", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 203, "contract": "W15QKN26DA038", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 203, "contract": "W15QKN26DA039", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 203, "contract": "W15QKN26DA040", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 203, "contract": "W15QKN26DA041", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 204, "contract": "W31P4Q20A0010", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 204, "contract": "W31P4Q25F0279", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 205, "contract": "N6247026D0004", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 206, "contract": "N0002426F6227", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 206, "contract": "N0002426D6214", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 207, "contract": "N0016426DJN17", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 208, "contract": "N0016426D1025", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 209, "contract": "N0001926F1020", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 209, "contract": "N0001923G0002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 210, "contract": "N0002425F6260", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 210, "contract": "N0002425D6211", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 211, "contract": "FA882320C0004", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 213, "contract": "FA489019FA022", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 214, "contract": "SPE30026D3010", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 215, "contract": "SPE1C126D0022", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 216, "contract": "HT001126FE007", "website": "https://www.war.gov/News/Contracts/Contract/Article/4392289/contracts-for-jan-28-2026/"}, {"para": 221, "contract": "FA700026C0001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4391076/contracts-for-jan-27-2026/"}, {"para": 223, "contract": "FA862126CB001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4391076/contracts-for-jan-27-2026/"}, {"para": 224, "contract": "FA821726DB001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4391076/contracts-for-jan-27-2026/"}, {"para": 225, "contract": "FA882025CB001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4391076/contracts-for-jan-27-2026/"}, {"para": 225, "contract": "FA882025CB001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4391076/contracts-for-jan-27-2026/"}, {"para": 226, "contract": "W31P4Q23C0026", "website": "https://www.war.gov/News/Contracts/Contract/Article/4391076/contracts-for-jan-27-2026/"}, {"para": 227, "contract": "W911KB24C0005", "website": "https://www.war.gov/News/Contracts/Contract/Article/4391076/contracts-for-jan-27-2026/"}, {"para": 228, "contract": "W56HZV22C0072", "website": "https://www.war.gov/News/Contracts/Contract/Article/4391076/contracts-for-jan-27-2026/"}, {"para": 229, "contract": "N0018926DZ004", "website": "https://www.war.gov/News/Contracts/Contract/Article/4391076/contracts-for-jan-27-2026/"}, {"para": 230, "contract": "M6785425C2023", "website": "https://www.war.gov/News/Contracts/Contract/Article/4391076/contracts-for-jan-27-2026/"}, {"para": 230, "contract": "M6785425C0023", "website": "https://www.war.gov/News/Contracts/Contract/Article/4391076/contracts-for-jan-27-2026/"}, {"para": 231, "contract": "N6247024D0018", "website": "https://www.war.gov/News/Contracts/Contract/Article/4391076/contracts-for-jan-27-2026/"}, {"para": 232, "contract": "HR001124C0399", "website": "https://www.war.gov/News/Contracts/Contract/Article/4391076/contracts-for-jan-27-2026/"}, {"para": 237, "contract": "FA810826DB001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB016", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB003", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB004", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB005", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB018", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB006", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB019", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB007", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB021", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB008", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB009", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB010", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB011", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB022", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB012", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB023", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB013", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB014", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB015", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB017", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 237, "contract": "FA810826DB020", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 238, "contract": "FA872626FB004", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 240, "contract": "FA489726C0001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 241, "contract": "W519TC26DA009", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 242, "contract": "W911SR26DA002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 243, "contract": "W58RGZ26D0032", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 244, "contract": "N4425526D0005", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 245, "contract": "N0002426C6100", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 246, "contract": "N0002424C6240", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 247, "contract": "N3220526C0005", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 247, "contract": "N3220526C0005", "website": "https://www.war.gov/News/Contracts/Contract/Article/4389804/contracts-for-jan-26-2026/"}, {"para": 252, "contract": "W911SR26DA001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4388544/contracts-for-jan-23-2026/"}, {"para": 253, "contract": "W912DW26DA002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4388544/contracts-for-jan-23-2026/"}, {"para": 254, "contract": "N0001924C0003", "website": "https://www.war.gov/News/Contracts/Contract/Article/4388544/contracts-for-jan-23-2026/"}, {"para": 255, "contract": "N0003026F3021", "website": "https://www.war.gov/News/Contracts/Contract/Article/4388544/contracts-for-jan-23-2026/"}, {"para": 256, "contract": "N3943023D4050", "website": "https://www.war.gov/News/Contracts/Contract/Article/4388544/contracts-for-jan-23-2026/"}, {"para": 257, "contract": "N0002423C5401", "website": "https://www.war.gov/News/Contracts/Contract/Article/4388544/contracts-for-jan-23-2026/"}, {"para": 258, "contract": "N0001918C1037", "website": "https://www.war.gov/News/Contracts/Contract/Article/4388544/contracts-for-jan-23-2026/"}, {"para": 259, "contract": "SPE1C126D0018", "website": "https://www.war.gov/News/Contracts/Contract/Article/4388544/contracts-for-jan-23-2026/"}, {"para": 260, "contract": "SPE2D126D0007", "website": "https://www.war.gov/News/Contracts/Contract/Article/4388544/contracts-for-jan-23-2026/"}, {"para": 260, "contract": "SPE2DH21R0002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4388544/contracts-for-jan-23-2026/"}, {"para": 261, "contract": "SPE2DF26D0005", "website": "https://www.war.gov/News/Contracts/Contract/Article/4388544/contracts-for-jan-23-2026/"}, {"para": 262, "contract": "SPRDL126C0007", "website": "https://www.war.gov/News/Contracts/Contract/Article/4388544/contracts-for-jan-23-2026/"}, {"para": 263, "contract": "FA877126C0001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4388544/contracts-for-jan-23-2026/"}, {"para": 265, "contract": "FA873026CB002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4388544/contracts-for-jan-23-2026/"}, {"para": 266, "contract": "H9224026DE002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4388544/contracts-for-jan-23-2026/"}, {"para": 270, "contract": "N6247820D5035", "website": "https://www.war.gov/News/Contracts/Contract/Article/4385874/contracts-for-jan-22-2026/"}, {"para": 270, "contract": "N6247820D5035", "website": "https://www.war.gov/News/Contracts/Contract/Article/4385874/contracts-for-jan-22-2026/"}, {"para": 271, "contract": "N6339425C0003", "website": "https://www.war.gov/News/Contracts/Contract/Article/4385874/contracts-for-jan-22-2026/"}, {"para": 272, "contract": "N0002421C5105", "website": "https://www.war.gov/News/Contracts/Contract/Article/4385874/contracts-for-jan-22-2026/"}, {"para": 273, "contract": "HDTRA126C0004", "website": "https://www.war.gov/News/Contracts/Contract/Article/4385874/contracts-for-jan-22-2026/"}, {"para": 274, "contract": "W911QX26DA001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4385874/contracts-for-jan-22-2026/"}, {"para": 275, "contract": "W912HN26CA011", "website": "https://www.war.gov/News/Contracts/Contract/Article/4385874/contracts-for-jan-22-2026/"}, {"para": 276, "contract": "W912DY26DA008", "website": "https://www.war.gov/News/Contracts/Contract/Article/4385874/contracts-for-jan-22-2026/"}, {"para": 276, "contract": "W912DY26DA009", "website": "https://www.war.gov/News/Contracts/Contract/Article/4385874/contracts-for-jan-22-2026/"}, {"para": 276, "contract": "W912DY26DA010", "website": "https://www.war.gov/News/Contracts/Contract/Article/4385874/contracts-for-jan-22-2026/"}, {"para": 276, "contract": "W912DY26DA011", "website": "https://www.war.gov/News/Contracts/Contract/Article/4385874/contracts-for-jan-22-2026/"}, {"para": 276, "contract": "W912DY26DA013", "website": "https://www.war.gov/News/Contracts/Contract/Article/4385874/contracts-for-jan-22-2026/"}, {"para": 276, "contract": "W912DY26DA014", "website": "https://www.war.gov/News/Contracts/Contract/Article/4385874/contracts-for-jan-22-2026/"}, {"para": 276, "contract": "W912DY26DA015", "website": "https://www.war.gov/News/Contracts/Contract/Article/4385874/contracts-for-jan-22-2026/"}, {"para": 277, "contract": "FA930026C6000", "website": "https://www.war.gov/News/Contracts/Contract/Article/4385874/contracts-for-jan-22-2026/"}, {"para": 281, "contract": "N0002424C2115", "website": "https://www.war.gov/News/Contracts/Contract/Article/4384469/contracts-for-jan-21-2026/"}, {"para": 282, "contract": "N0001925C0071", "website": "https://www.war.gov/News/Contracts/Contract/Article/4384469/contracts-for-jan-21-2026/"}, {"para": 282, "contract": "N0001925C0071", "website": "https://www.war.gov/News/Contracts/Contract/Article/4384469/contracts-for-jan-21-2026/"}, {"para": 283, "contract": "N6833526D0005", "website": "https://www.war.gov/News/Contracts/Contract/Article/4384469/contracts-for-jan-21-2026/"}, {"para": 283, "contract": "N6833526D0006", "website": "https://www.war.gov/News/Contracts/Contract/Article/4384469/contracts-for-jan-21-2026/"}, {"para": 283, "contract": "N6833526D0007", "website": "https://www.war.gov/News/Contracts/Contract/Article/4384469/contracts-for-jan-21-2026/"}, {"para": 284, "contract": "N0002423C5410", "website": "https://www.war.gov/News/Contracts/Contract/Article/4384469/contracts-for-jan-21-2026/"}, {"para": 285, "contract": "N6339426C4001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4384469/contracts-for-jan-21-2026/"}, {"para": 286, "contract": "N0001425C2204", "website": "https://www.war.gov/News/Contracts/Contract/Article/4384469/contracts-for-jan-21-2026/"}, {"para": 287, "contract": "W31P4Q22C0060", "website": "https://www.war.gov/News/Contracts/Contract/Article/4384469/contracts-for-jan-21-2026/"}, {"para": 288, "contract": "W912WJ26CA001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4384469/contracts-for-jan-21-2026/"}, {"para": 289, "contract": "W9113M23C0062", "website": "https://www.war.gov/News/Contracts/Contract/Article/4384469/contracts-for-jan-21-2026/"}, {"para": 290, "contract": "FA872626FB007", "website": "https://www.war.gov/News/Contracts/Contract/Article/4384469/contracts-for-jan-21-2026/"}, {"para": 292, "contract": "FA945126CX001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4384469/contracts-for-jan-21-2026/"}, {"para": 293, "contract": "HT941025C0002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4384469/contracts-for-jan-21-2026/"}, {"para": 294, "contract": "SPE2DF26D0005", "website": "https://www.war.gov/News/Contracts/Contract/Article/4384469/contracts-for-jan-21-2026/"}, {"para": 294, "contract": "SPE2DE24R0002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4384469/contracts-for-jan-21-2026/"}, {"para": 298, "contract": "SPE7LX26D0026", "website": "https://www.war.gov/News/Contracts/Contract/Article/4383202/contracts-for-jan-20-2026/"}, {"para": 299, "contract": "SPE8ED26D0001", "website": "https://www.war.gov/News/Contracts/Contract/Article/4383202/contracts-for-jan-20-2026/"}, {"para": 299, "contract": "SPE8ED26D0002", "website": "https://www.war.gov/News/Contracts/Contract/Article/4383202/contracts-for-jan-20-2026/"}, {"para": 299, "contract": "SPE8ED25R0006", "website": "https://www.war.gov/News/Contracts/Contract/Article/4383202/contracts-for-jan-20-2026/"}, {"para": 301, "contract": "HQ003426FE044", "website": "https://www.war.gov/News/Contracts/Contract/Article/4383202/contracts-for-jan-20-2026/"}] \ No newline at end of file diff --git a/WarContracts/final_results.json b/WarContracts/final_results.json new file mode 100644 index 0000000..ab158cf --- /dev/null +++ b/WarContracts/final_results.json @@ -0,0 +1 @@ +[{"og_contract": \ No newline at end of file diff --git a/WarContracts/get_contracts.py b/WarContracts/get_contracts.py new file mode 100644 index 0000000..c86bdaa --- /dev/null +++ b/WarContracts/get_contracts.py @@ -0,0 +1,281 @@ +import os, sys +import json +import re +from datetime import datetime + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from selenium import webdriver as wd +from lxml import html + +from contracts.models import Contract, Company, Paragraph, OriginalContract + + +print("\n+++++\n+++++\n+++++\nStarting Scrape\n+++++\n+++++\n+++++\n") + +tz_str = " -0600 UTC" +DFORMAT = "%b %d, %Y %H:%M %p %z %Z" +D2FORMAT = "%b %d, %Y %z %Z" +D3FORMAT = "%b %d %Y %z %Z" + +SAM_BASE = "https://sam.gov" +SAMLINK = "https://sam.gov/search/?index=opp&page=1&pageSize=25&sort=-modifiedDate&sfm%5Bstatus%5D%5Bis_active%5D=true&sfm%5Bstatus%5D%5Bis_inactive%5D=true&sfm%5BsimpleSearch%5D%5BkeywordRadio%5D=ALL&sfm%5BsimpleSearch%5D%5BkeywordTags%5D%5B0%5D%5Bvalue%5D=" + + +base_site = "https://www.war.gov/News/Contracts/" + + +br = wd.Chrome() +br.get(base_site) +ps = html.fromstring(br.page_source) +# links = ps.xpath('.//*/p[@class="title"]/a/@href') +page_links = [] + +for site in range(2,3): + nsite = base_site + "?Page=" + str(site) + br.get(nsite) + sleep(2) + ps = html.fromstring(br.page_source) + page_links = page_links + ps.xpath('.//*/p[@class="title"]/a/@href') + + +# for site in range(10,25): +# nsite = base_site + "?Page=" + str(site) +# br.get(nsite) +# sleep(2) +# ps = html.fromstring(br.page_source) +# page_links = page_links + ps.xpath('.//*/p[@class="title"]/a/@href') + + +data = [] +base_data = [] + +for link in page_links: + br.get(link) + ps = html.fromstring(br.page_source) + paras = ps.xpath('.//*/p/text()') + # print(len(paras), link) + for para in paras: + nlink = " ".join(link.split("-")[-3:])[:-1] + tz_str + new_paragraph, created = Paragraph.objects.get_or_create( + link = link, + paragraph=para, + date = datetime.strptime(nlink, D3FORMAT), + ) + print(created, new_paragraph) + + contracts = re.findall(r'[A-Z0-9-]{12,}', para) + if len(contracts) > 0: + # print(contracts) + for contract in contracts: + i = {} + i['para'] = new_paragraph.id + i['contract'] = contract.replace("-", "") + i['website'] = link + new_contract, created = OriginalContract.objects.get_or_create( + para = new_paragraph, + number= i['contract'], + ) + print(created, new_contract) + data.append(i) + + +with open('contract_list.json', 'w') as fp: + json.dump(data, fp) + + +for d in data: + website = SAMLINK + d['contract'] + print("\nGetting Website: ", website) + br.get(website) + sleep(2) + links = [] + ps = html.fromstring(br.page_source) + links = ps.xpath('.//*/h3/a[@class="usa-link ng-star-inserted"]/@href') + for link in links: + print("\n++++++++\n", d['website'], "\n++++++++++\n") + br.get(SAM_BASE + link) + print("\nContract link: ", SAM_BASE + link) + sleep(4) + ps = html.fromstring(br.page_source) + i = {} + + + i['og_contract'] = OriginalContract.objects.get(number=d['contract'], para__id=d['para']) + try: + i['pub_date_txt'] = ps.xpath('.//*[@id="solicitation"]/div/div/div[3]/div[4]/div[4]/div/h5/text()')[0].strip() + except: + i['pub_date_txt'] = "missed" + try: + i['title'] = ps.xpath('.//*/h1[@class="card-title"]/text()')[0].strip() + except: + i['title'] = ps.xpath('.//*/h1[@class="card-title"]/text()') + try: + i['notice_id'] = ps.xpath('.//*[@id="solicitation"]/div/div/div[3]/div[1]/div[2]/div/h5/text()')[0].strip() + except: + i['notice_id'] = "missed" + + contract, created = Contract.objects.get_or_create( + title=i["title"], + original_contract_number = i["og_contract"], + notice_id=i["notice_id"], + pub_date_txt = i["pub_date_txt"], + contract_url = br.current_url + ) + print('CONTRACT SUCCESS', created, contract) + + contract.inactive_date = ps.xpath('.//*[@id="solicitation"]/div/div/div[3]/div[3]/div[2]/div/h5/text()')[0].strip() + contract.inactive_policy = ps.xpath('.//*[@id="solicitation"]/div/div/div[3]/div[3]/div[4]/div/h5/text()')[0].strip() + # contract.pub_date_txt = ps.xpath('.//*[@id="solicitation"]/div/div/div[3]/div[4]/div[4]/div/h5/text()')[0].strip() + contract.resp_date = ps.xpath('.//*[@id="solicitation"]/div/div/div[3]/div[4]/div[2]/div/h5/text()')[0].strip() + contract.us_dept = ps.xpath('.//*[@id="solicitation"]/div/div/div[4]/div/div[1]/div[1]/div[2]/h5/text()')[0].strip() + contract.us_dept_subtier = ps.xpath('.//*[@id="solicitation"]/div/div/div[4]/div/div[1]/div[2]/div[2]/h5/text()')[0].strip() + contract.related_notice_id = ps.xpath('.//*[@id="solicitation"]/div/div/div[3]/div[1]/div[4]/div/h5/text()')[0].strip() + contract.opp_type = ps.xpath('.//*[@id="solicitation"]/div/div/div[3]/div[2]/div[2]/div/h5/text()')[0].strip() + contract.orig_set = ps.xpath('.//*[@id="class"]/div[2]/div[1]/div[2]/h5/text()')[0].strip() + contract.prod_svc_code = ps.xpath('.//*[@id="class"]/div[2]/div[2]/div[2]/div/h5/text()')[0].strip() + contract.naics_code = ps.xpath('.//*[@id="class"]/div[2]/div[2]/div[4]/div/h5/text()')[0].strip() + contract.save() + + + try: + contract.us_office = ps.xpath('.//*[@id="solicitation"]/div/div/div[4]/div/div[2]/div/div[2]/h5/text()')[0].strip() + contract.save() + except: + contract.us_office = "naan" + contract.save() + try: + contract.line_num = ps.xpath('.//*[@id="solicitation"]/div/div/div[3]/div[2]/div[4]/div/h5/text()')[0].strip() + contract.save() + except: + continue + try: + contract.major_cmd = ps.xpath('.//*[@id="solicitation"]/div/div/div[4]/div/div[1]/div[3]/div[2]/h5/text()')[0].strip() + contract.save() + except: + contract.major_cmd = "naan" + contract.save() + try: + i['awarded_name'] = ps.xpath('.//*[@id="award-details"]/div[2]/div/div[4]/div[2]/div/h5/text()')[0].strip() + except: + i['awarded_name'] = "naan" + try: + i['award_date'] = ps.xpath('.//*[@id="award-details"]/div[2]/div/div[1]/div[2]/div/h5/text()')[0].strip() + contract.save() + except: + i['award_date'] = "naan" + contract.save() + try: + contract.award_num = ps.xpath('.//*[@id="award-details"]/div[2]/div/div[2]/div[2]/div/h5/text()')[0].strip() + contract.save() + except: + contract.award_num = "naan" + contract.save() + try: + i['unq_entity_id'] = ps.xpath('.//*[@id="award-details"]/div[2]/div/div[3]/div[3]/div/h5/text()')[0].strip() + contract.unq_entity_id = ps.xpath('.//*[@id="award-details"]/div[2]/div/div[3]/div[3]/div/h5/text()')[0].strip() + contract.save() + except: + contract.unq_entity_id = "naan" + contract.save() + try: + i['awarded_addr'] = ps.xpath('.//*[@id="award-details"]/div[2]/div/div[2]/div[3]/div[2]/h5/text()')[0].strip() + except: + i['awarded_addr'] = "naan" + try: + contract.contract_value = ps.xpath('.//*[@id="award-details"]/div[2]/div/div[3]/div[4]/div[3]/div/h5/text()')[0].strip() + contract.save() + except: + contract.contract_value = "naan" + contract.save() + try: + contract.description = ps.xpath('.//*[@id="desc"]/div[2]/div/div/p/text()')[0].strip() + contract.save() + except: + contract.description = "naan" + contract.save() + + base_data.append(i) + + print("\nappended info: ", i['title']) + try: + new_company, created = Company.objects.get_or_create( + name = i["awarded_name"], + address_complete=i["awarded_addr"], + unq_entity_id = i["unq_entity_id"], + ) + print("COMPANY CREATED: ", created, new_company) + contract.company = new_company + contract.save() + except Exception as e: + print("\nCompany error: ", e) + try: + if contract.pub_date_txt.split(" ")[-1:][0].strip() == "EST": + print("TZ: ", contract.pub_date_txt.split(" ")[-1:][0].strip()) + ndate = " ".join(contract.pub_date_txt.split(" ")[:-1]) + " -0500 UTC" + contract.pub_date = datetime.strptime(ndate, DFORMAT) + contract.save() + elif contract.pub_date_txt.split(" ")[-1:][0].strip() == "EDT": + ndate = " ".join(contract.pub_date_txt.split(" ")[:-1]) + " -0500 UTC" + contract.pub_date = datetime.strptime(ndate, DFORMAT) + contract.save() + elif contract.pub_date_txt.split(" ")[-1:][0].strip() == "CST": + ndate = " ".join(contract.pub_date_txt.split(" ")[:-1]) + " -0600 UTC" + contract.pub_date = datetime.strptime(ndate, DFORMAT) + contract.save() + elif contract.pub_date_txt.split(" ")[-1:][0].strip() == "CDT": + ndate = " ".join(contract.pub_date_txt.split(" ")[:-1]) + " -0600 UTC" + contract.pub_date = datetime.strptime(ndate, DFORMAT) + contract.save() + elif contract.pub_date_txt.split(" ")[-1:][0].strip() == "MST": + ndate = " ".join(contract.pub_date_txt.split(" ")[:-1]) + " -0700 UTC" + contract.pub_date = datetime.strptime(ndate, DFORMAT) + contract.save() + elif contract.pub_date_txt.split(" ")[-1:][0].strip() == "PST": + ndate = " ".join(contract.pub_date_txt.split(" ")[:-1]) + " -0800 UTC" + contract.pub_date = datetime.strptime(ndate, DFORMAT) + contract.save() + except Exception as e: + print("Date Error: ", e) + pass + # try: + # contract.major_cmd = i["major_cmd"], + # contract.save() + # except Exception as e: + # print("Major Cmd Error: ", e) + # pass + try: + time = " -0500 UTC" + contract.award_date = datetime.strptime(i["award_date"] + time, D2FORMAT) + contract.save() + except Exception as e: + print("Award Date Error: ", e) + pass + # try: + # contract.award_num = i["award_num"] + # contract.save() + # except Exception as e: + # print("Award Number Error: ", e) + # pass + # try: + # contract.contract_value = i["contract_value"] + # contract.save() + # except Exception as e: + # print("Major Cmd Error: ", e) + # pass + # try: + # contract.unq_entity_id = i["unq_entity_id"] + # contract.save() + # except Exception as e: + # print("Major Cmd Error: ", e) + # pass + + +with open('final_results.json', 'w') as fp: + json.dump(base_data, fp) \ No newline at end of file diff --git a/Working/govt/mn.legislature.py b/Working/govt/mn.legislature.py index f0a6271..45567b7 100644 --- a/Working/govt/mn.legislature.py +++ b/Working/govt/mn.legislature.py @@ -75,15 +75,14 @@ for hE in houseEvents: event_type = 'Gv', show_title = title, show_link = link, - show_date = datetime.strptime(dateTime, DATETIME_FORMAT), - show_day = datetime.strptime(dateTime + tz_str, DATETIME_FORMAT).date(), + show_date = datetime.strptime(dateTime + tz_str, DATETIME_FORMAT), # more_details = details['location'], venue = venue, scraper = scraper ) if type(new_event) is tuple: - print("STS: ", new_event) + print("HOUSE: ", new_event) add_calendar(new_event[0], 'msp') else: add_calendar(new_event, 'msp') @@ -112,8 +111,7 @@ for sE in senateEvents: event_type = 'Gv', show_title = title, show_link = link, - show_date = datetime.strptime(dateTime, DATETIME_FORMAT), - show_day = datetime.strptime(dateTime + tz_str, DATETIME_FORMAT).date(), + show_date = datetime.strptime(dateTime + tz_str, DATETIME_FORMAT), # more_details = details['location'], venue = venue, scraper = scraper @@ -146,14 +144,13 @@ for cE in commEvents: event_type = 'Gv', show_title = title, show_link = link, - show_date = datetime.strptime(dateTime, DATETIME_FORMAT), - show_day = datetime.strptime(dateTime + tz_str, DATETIME_FORMAT).date(), + show_date = datetime.strptime(dateTime + tz_str, DATETIME_FORMAT), # more_details = details['location'], venue = venue, scraper = scraper ) if type(new_event) is tuple: - print("STS: ", new_event) + print("COMMS: ", new_event) add_calendar(new_event[0], 'msp') else: add_calendar(new_event, 'msp') diff --git a/Working/govt/mn.stp.citycouncil.py b/Working/govt/mn.stp.citycouncil.py index bd17235..eab1136 100644 --- a/Working/govt/mn.stp.citycouncil.py +++ b/Working/govt/mn.stp.citycouncil.py @@ -66,7 +66,6 @@ def getEvents(br): show_title = title, show_link = link, show_date = datetime.strptime(dateTime + tz_str, DATETIME_FORMAT), - show_day = datetime.strptime(dateTime, DATETIME_FORMAT), venue = venue, scraper = scraper ) diff --git a/Working/venues/au.vi.arenawien.py b/Working/venues/au.vie.arenawien.py similarity index 100% rename from Working/venues/au.vi.arenawien.py rename to Working/venues/au.vie.arenawien.py diff --git a/Working/venues/getMaps.py b/Working/venues/getMaps.py new file mode 100644 index 0000000..219cca1 --- /dev/null +++ b/Working/venues/getMaps.py @@ -0,0 +1,72 @@ +import os, sys +from datetime import datetime, timedelta +from dateutil import relativedelta +from pprint import pprint as ppr + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + +from selenium.webdriver.common.by import By + +from events.models import Organization, Scraper, Calendar, Event +import events.digitools as digitools + +import re + +def getSite(br, website, org): + ps = digitools.getSource(br, website) + links = ps.xpath('.//*/div[@class="luibr"]/div/div/a/@href') + ppr(links) + nsite = "https://www.google.com" + if len(links) > 0: + nlink = nsite + links[0] + org.barrio = nlink + org.save() + sleep(5) + + +if len(sys.argv) >= 2: + arg1 = sys.argv[1] + br = digitools.getBrowser(arg1) +else: + print("No run_env") + br.close() + quit() + + +orgs = Organization.objects.all() + + +# for org in orgs: +# try: +# if len(org.city) > 0: +# msg = org.name.split(" ") + org.city.split(" ") +# site = "https://www.google.com/search?q=google+maps+" + "+".join(msg) +# print(site) +# getSite(br, site, org) +# except Exception as e: +# ppr(org) +# print(e) + + +for org in orgs[5:]: + try: + br.get(org.barrio) + org.gmap_link = org.barrio + sleep(5) + current_url = br.current_url + match = re.search(r'@(-?\d+\.\d+),(-?\d+\.\d+)', current_url) + print(match[1], match[0].split(",")[1]) + org.latitude = match[1].strip() + org.longitude = match[0].split(",")[1].strip() + org.save() + except Exception as e: + ppr(org) + print(e) + +br.close() diff --git a/Working/venues/il.chi.subterranean.py b/Working/venues/il.chi.subterranean.py index d7cc39a..fc01df8 100644 --- a/Working/venues/il.chi.subterranean.py +++ b/Working/venues/il.chi.subterranean.py @@ -44,7 +44,7 @@ def get_events(ps, event_type): try: event['support'] = c.xpath('.//p[@class="fs-12 supporting-talent"]/text()')[0] except: - pass + continue event['venue'] = c.xpath('.//p[@class="fs-12 venue"]/text()')[0] event['dateStamp'] = datetime.strptime(event['date'], DATETIME_FORMAT) event['link'] = venue.website diff --git a/Working/venues/manual/eventario.py b/Working/venues/manual/eventario.py index 2247d6e..8ec5dfb 100644 --- a/Working/venues/manual/eventario.py +++ b/Working/venues/manual/eventario.py @@ -49,31 +49,33 @@ def getLinks(br, url, links): div = br.find_element(By.XPATH, ".//*/div[@class='feed-pagination flexify']/a") div.click() sleep(2) - br.execute_script("window.scrollTo(0, window.scrollY + 1100)") + br.execute_script("window.scrollTo(0, window.scrollY + 1375)") sleep(2) except: x = 0 ps = html.fromstring(br.page_source) newLinks = [] # newlinks = ps.xpath('.//*/div[@class="e-con-inner"]/*/a/@href') - events = ps.xpath('.//*/div[@class="e-con-inner"]') + events = ps.xpath('.//*/div[@class="ts-preview"]') for event in events: ev = {} try: - ev['link'] = event.xpath('.//*/a/@href')[0] + ev['link'] = event.xpath('.//*/h3/a/@href')[0] ev['title'] = event.xpath('.//*/h3/a/text()')[0] - ev['venue'] = event.xpath('.//*/ul/li/a/text()')[-1:][0].replace('\n', '').replace('\t', '') - # e['venue'] = event.xpath('.//*/ul/li/a/text()')[-1:][0] - ev['venueLink'] = event.xpath('.//*/ul/li/a/@href')[1] + ev['venue'] = event.xpath('.//*/ul/li[@class="elementor-repeater-item-46edd7d flexify ts-action"]/a[@class="ts-action-con"]/text()')[-1:][0].replace('\n', '').replace('\t', '') + ev['venueLink'] = event.xpath('.//*/ul/li[@class="elementor-repeater-item-46edd7d flexify ts-action"]/a[@class="ts-action-con"]/@href')[-1:][0] + # ev['venueLink'] = event.xpath('.//*/ul/li/a/@href')[1] label= event.xpath('.//*/li[@class="elementor-repeater-item-46edd7d flexify ts-action"]/div/text()') ev['label'] = ''.join([x.replace('\t', '').replace('\n', '') for x in label]).strip() newLinks.append(ev) + # ppr(ev) except Exception as e: print("Error: ", ev, e) links = links + newLinks return links + if len(sys.argv) >= 2: arg1 = sys.argv[1] br = digitools.getBrowser(arg1) @@ -89,11 +91,15 @@ for url in urls: allLinks = getLinks(br, url, allLinks) totalLinks = list({v['title']:v for v in allLinks}.values()) +ppr(totalLinks) ppr(len(totalLinks)) # sortedlinks = allLinks.sort() # ppr(sortedlinks) -for event in totalLinks: +# quit() + + +for event in totalLinks[175:250]: br.get(event['link']) sleep(1) ps = html.fromstring(br.page_source) @@ -156,6 +162,10 @@ for d in new_data: cal = Calendar.objects.get(shortcode='mde') +print("run paisa") + +ppr(paisa) + for d in paisa: try: nvenue, created = Organization.objects.get_or_create( @@ -170,17 +180,20 @@ for d in paisa: nvenue.address_complete = d['address'] nvenue.save() - new_event, created = Event.objects.update_or_create( - event_type = d['category'], - show_title = d['title'], - show_link = d['link'], - show_date = d['dateStamp'], - show_day = d['dateStamp'], - scraper = scraper, - venue = nvenue - ) - new_event.calendar.add(cal) - new_event.save() - # print("Success:", new_event) + try: + new_event, created = Event.objects.update_or_create( + event_type = d['category'], + show_title = d['title'], + show_link = d['link'], + show_date = d['dateStamp'], + scraper = scraper, + venue = nvenue + ) + new_event.calendar.add(cal) + new_event.save() + print(new_event, created, new_event.scraper) + # print("Success:", new_event) + except Execption as e: + print(e) digitools.updateScraper(scraper, item_count_start) \ No newline at end of file diff --git a/Working/venues/mn.mpls.HookNLadder.py b/Working/venues/mn.mpls.HookNLadder.py index 5542bc4..3fbe669 100644 --- a/Working/venues/mn.mpls.HookNLadder.py +++ b/Working/venues/mn.mpls.HookNLadder.py @@ -81,11 +81,11 @@ for event in events: show_title = event["show_title"], show_link = event["link"], show_date = event["date_time"], - show_day = event["date_time"], guests = " ".join(event["subtitle"]), venue = venue ) digitools.add_calendar(new_event, 'msp') + ppr(new_event) except Exception as e: print("oops ", e, "\n\n", "Scraper:", scraper) diff --git a/Working/venues/mn.mpls.ParkwayTheater.py b/Working/venues/mn.mpls.ParkwayTheater.py index 77296b7..ccdf935 100644 --- a/Working/venues/mn.mpls.ParkwayTheater.py +++ b/Working/venues/mn.mpls.ParkwayTheater.py @@ -55,7 +55,6 @@ def get_events(ps, event_type): show_title = event['title'], show_link = event['link'], show_date = datetime.strptime(event['date'] + tz_str, DATETIME_FORMAT), - show_day = datetime.strptime(event['date'] + tz_str, DATETIME_FORMAT), more_details = event["details"], venue = venue ) @@ -71,7 +70,6 @@ def get_events(ps, event_type): show_title = event['title'], show_link = event['link'], show_date = datetime.strptime(event['date'] + tz_str, DATETIME_FORMAT), - show_day = datetime.strptime(event['date'] + tz_str, DATETIME_FORMAT), more_details = event["details"], venue = venue ) diff --git a/Working/venues/mn.mpls.UptownVFW.py b/Working/venues/mn.mpls.UptownVFW.py index 0ec0c59..b454549 100644 --- a/Working/venues/mn.mpls.UptownVFW.py +++ b/Working/venues/mn.mpls.UptownVFW.py @@ -26,8 +26,8 @@ venue, created = Organization.objects.get_or_create( scraper,item_count_start, virtcal = digitools.getScraper(venue, venue.website, 'msp') tz_str = " -0600 UTC" -DATETIME_FORMAT = '%a %B %d @ %I:%M %p %Y %z %Z' -DATETIME_FORMAT_2 = '%a %B %d, %Y @ %I:%M %p %z %Z' +DATETIME_FORMAT = '%a %B %d @ %I:%M %p %Y %z %Z' +DATETIME_FORMAT_2 = '%a %B %d @ %I:%M %p %Y %z %Z' calendar_url = 'https://noboolpresents.com/venues/uptown-vfw/' current_year = str(datetime.now().year) @@ -50,32 +50,33 @@ def getEvents(br): title = event.xpath('.//*/h2[@class="alt-font"]/a/text()')[0].replace("\n", "").replace("\t", "") link = event.xpath('.//*/h2[@class="alt-font"]/a/@href')[0] try: + print("First Try", dateTime) new_event, created = Event.objects.update_or_create( scraper = scraper, event_type = 'Mu', show_title = title, show_link = link, show_date = datetime.strptime(dateTime + tz_str, DATETIME_FORMAT), - show_day = datetime.strptime(dateTime + tz_str, DATETIME_FORMAT), venue = venue ) digitools.add_calendar(new_event, 'msp') scraper.items+=1 except Exception as e: try: + print("New Try", dateTime) new_event, created = Event.objects.update_or_create( scraper = scraper, event_type = 'Mu', show_title = title, show_link = link, - show_date = datetime.strptime(dateTime[:-4].strip() + tz_str, DATETIME_FORMAT_2), - show_day = datetime.strptime(dateTime[:-4].strip() + tz_str, DATETIME_FORMAT_2), + show_date = datetime.strptime(dateTime.strip() + tz_str, DATETIME_FORMAT_2), venue = venue ) digitools.add_calendar(new_event, 'msp') scraper.items+=1 except Exception as e: - print("oops", e, dateTime[:-4]) + print("oops", e) + ppr(event) getEvents(br) br.find_element(By.XPATH, './/*/li[@class="tribe-events-c-nav__list-item tribe-events-c-nav__list-item--next"]/a').click() diff --git a/Working/workshop/smedia/bluetweet.py b/Working/workshop/smedia/bluetweet.py new file mode 100644 index 0000000..eafbbae --- /dev/null +++ b/Working/workshop/smedia/bluetweet.py @@ -0,0 +1,68 @@ +import os, sys +from datetime import datetime +from dateutil import relativedelta + +from atproto import Client, client_utils + +sys.path.append('/var/www/digisnaxx.ado/scrapers') +import dtss +dtss.getReady() + +from time import sleep +from pprint import pprint as ppr +import pytz + + +from contracts.models import Contract +from events.digitools import getBrowser, createURL, createBasicEvent, getSource + +tz = pytz.timezone("US/Central") + +# USERNAME = "dreamfreely.org" +# PASSWORD = "gU):3-BA]DaK[_K$DHmI" + +USERNAME = "digisnaxx.bsky.social" +PASSWORD = "xv57-clj3-sjpw-iz5o" + +client = Client() +client.login(USERNAME, PASSWORD) + +contracts = Contract.objects.all().order_by('-pub_date')[35:] + +for c in contracts: + URL = "https://www.digisnaxx.com/contract/" + str(c.id) + URL_TITLE = "DoD Contract {0}" + URL_DESCRIPTION = "DigiSnaxx Link to DoD Contract {0}" + try: + + if len(c.contract_value) > 4 and c.company != None: + POST_TEXT = "\n\n{0} / {1}\n\nCompany: {2}\n\n{3}\n\nNAICS Code: {4}".format(c.us_dept, c.us_dept_sub_tier, c.company.name, c.contract_value, c.naics_code) + ALT_TEXT = " ID {0}. For the {1} sub-tier {2}. Contract awarded to {3}.".format(c.notice_id, c.us_dept, c.us_dept_sub_tier, c.company.name) + + elif len(c.contract_value) == 4 and c.company != None: + POST_TEXT = "\n\n{0} / {1}\n\nCompany: {2}\n\nNAICS Code: {3}".format(c.us_dept, c.us_dept_sub_tier, c.company.name, c.naics_code) + ALT_TEXT = " ID {0}. For the {1} sub-tier {2}. Contract awarded to {3}. {4}".format(c.notice_id, c.us_dept, c.us_dept_sub_tier, c.company.name, c.naics_code) + + elif len(c.contract_value) > 4 and c.company == None: + POST_TEXT = "\n\n{0} / {1}\n\n{2}\n\nNAICS Code: {3}".format(c.us_dept, c.us_dept_sub_tier, c.contract_value, c.naics_code) + ALT_TEXT = " ID {0}. For the {1} sub-tier {2}. {3}. There is no company.".format(c.notice_id, c.us_dept, c.us_dept_sub_tier, c.naics_code) + + elif len(c.contract_value) == 4 and c.company == None: + POST_TEXT = "\n\n{0} / {1}\n\nNAICS Code: {2}".format(c.us_dept, c.us_dept_sub_tier, c.naics_code) + ALT_TEXT = "ID {0}. For the {1} sub-tier {2}. There is no company.".format(c.notice_id, c.us_dept, c.us_dept_sub_tier) + + else: + continue + + text = client_utils.TextBuilder().tag("#DoDContracts ", "DoDContracts").tag("#"+c.notice_id[:16], c.notice_id[:16],).text(POST_TEXT + "\n\n").link(URL, URL) + print(POST_TEXT) + ppr(c) + client.send_post(text=text) + sleep(25) + + except Exception as e: + print(c.notice_id) + print("Error: ", e) + + +# feed = client.get_author_feed(USERNAME, limit = 100) \ No newline at end of file