Hi Phil,
I believe the list of messages returns because the report is a stream and not a single message response. Such an approach allows receiving data immediately, and your code can start process data without waiting for the entire stream to finish. Also, the single message response would require pagination, could slow down the whole report downloading. Probably having both report types (streaming and single-message pagination one) could cover different needs.
https://github.com/protocolbuffers/protobuf/issues/1823 or
https://groups.google.com/g/protobuf/c/4-BY-k-Lk-g,
https://stackoverflow.com/questions/13502398/json-integers-limit-on-size. I hope it helps a little.
I'm kind of agree with the point that date could be better, but at the same time I like how the request look in my code:
```python
...
from datetime import date
from datetime import timedelta
...
today = date.today()
week_ago = today - timedelta(days=7)
date_range = {'startDate': {'year': week_ago.year, 'month': week_ago.month, 'day': week_ago.day},
'endDate': {'year': today.year, 'month': today.month, 'day': today.day}}
dimensions = ['DATE', 'APP', 'PLATFORM', 'COUNTRY']
metrics = ['ESTIMATED_EARNINGS', 'IMPRESSIONS', 'CLICKS', 'AD_REQUESTS', 'MATCHED_REQUESTS']
sort_conditions = {'dimension': 'DATE', 'order': 'DESCENDING'}
report_spec = {'dateRange': date_range,
'dimensions': dimensions,
'metrics': metrics,
'sortConditions': [sort_conditions]}
...
```
Thanks