I have a script that goes out to REST endpoints to retrieve the various services. However, some of these services have hundreds of thousands of records. The max record limit on the endpoints is 1000, meaning I have to first get all the ObjectIDs and query the service in batches of 1000 based on the ObjectIDs. For 100,000 records, this means 100 queries. This is very time consuming. Is there a better way to get this data? Thanks.
<SPAN class="keyword token">for</SPAN> id <SPAN class="keyword token">in</SPAN> idstofetch<SPAN class="punctuation token">:</SPAN>
<SPAN class="comment token"># starting and ending object id for each group</SPAN>
idmin <SPAN class="operator token">=</SPAN> str<SPAN class="punctuation token">(</SPAN>id<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
idmax <SPAN class="operator token">=</SPAN> str<SPAN class="punctuation token">(</SPAN>id<SPAN class="punctuation token">[</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
query_dict <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">{</SPAN><SPAN class="string token">"token"</SPAN> <SPAN class="punctuation token">:</SPAN> token<SPAN class="punctuation token">[</SPAN><SPAN class="string token">"token"</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"where"</SPAN> <SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"objectId >="</SPAN> <SPAN class="operator token">+</SPAN> idmin <SPAN class="operator token">+</SPAN> <SPAN class="string token">"and objectid <="</SPAN> <SPAN class="operator token">+</SPAN> idmax<SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"outfields"</SPAN> <SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"*"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"outSR"</SPAN> <SPAN class="punctuation token">:</SPAN> <SPAN class="number token">4326</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"returnGeometry"</SPAN> <SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"true"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"f"</SPAN> <SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"json"</SPAN><SPAN class="punctuation token">}</SPAN>
r <SPAN class="operator token">=</SPAN> requests<SPAN class="punctuation token">.</SPAN>get<SPAN class="punctuation token">(</SPAN>url<SPAN class="punctuation token">,</SPAN> query_dict<SPAN class="punctuation token">,</SPAN> stream<SPAN class="operator token">=</SPAN><SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># build json file name</SPAN>
f <SPAN class="operator token">=</SPAN> v<SPAN class="punctuation token">.</SPAN>replace<SPAN class="punctuation token">(</SPAN><SPAN class="string token">' '</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'_'</SPAN><SPAN class="punctuation token">)</SPAN>
f <SPAN class="operator token">=</SPAN> f<SPAN class="punctuation token">.</SPAN>replace<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'('</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'_'</SPAN><SPAN class="punctuation token">)</SPAN>
f <SPAN class="operator token">=</SPAN> f<SPAN class="punctuation token">.</SPAN>replace<SPAN class="punctuation token">(</SPAN><SPAN class="string token">')'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'_'</SPAN><SPAN class="punctuation token">)</SPAN>
filenm <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>interim_folder<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'{}_'</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>f<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">+</SPAN> dt <SPAN class="operator token">+</SPAN> <SPAN class="string token">'_'</SPAN> <SPAN class="operator token">+</SPAN> idmax<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">+</SPAN> <SPAN class="string token">'.json'</SPAN>
<SPAN class="comment token"># create json file</SPAN>
<SPAN class="keyword token">with</SPAN> open<SPAN class="punctuation token">(</SPAN>filenm<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'wb'</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">as</SPAN> fd<SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">for</SPAN> chunk <SPAN class="keyword token">in</SPAN> r<SPAN class="punctuation token">.</SPAN>iter_content<SPAN class="punctuation token">(</SPAN>chunk_size<SPAN class="operator token">=</SPAN><SPAN class="number token">256</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
fd<SPAN class="punctuation token">.</SPAN>write<SPAN class="punctuation token">(</SPAN>chunk<SPAN class="punctuation token">)</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>