The following tutorial shows you one way to handle paging when a large amount of data is being returned from the MaxCDN API server. Usually, this type of handler is needed when retrieving raw log data that can be quite long.

We’ve used a static limit of records per page of 1000 for the sake of code simplicity. The goal in the following example is to show bandwidth per country for each page and total bandwidth after all pages have loaded.

print "Start Time: (yyyy-mm-dd)\n"
start = raw_input()
print "End Time: (yyyy-mm-dd)\n"
end = raw_input()

countries = {}
bw = {}

total = 0
i = 1
while(i > 0):
        data = api.get('/v3/reporting/logs.json?start=' + start + '&limit=1000&end=' + end + '&page=' + str(i))
        i += 1
        records = data['records']
        n = len(records)
        if (n == 0):
                i = 0

        for j in range(0, n):
                cntr = records[j]['client_country']
                if cntr not in countries:
                        countries[cntr] = 0
                countries[cntr] += 1
                if cntr not in bw:
                        bw[cntr] = 0
                bw[cntr] += records[j]['bytes']
                total += 1
        print "\n\nCurrent requests state: \n"
        print countries
        print "\nCurrent bandwidth state: \n"
        print bw
        end_line = "Next is page " + str(i)
        if(i == 0):
                end_line = ""
        print end_line
print "Total: " + str(total)
print countries
print bw

Example output

Current requests state:

{u'BE': 1, u'FR': 3, u'DK': 2, u'HR': 2, u'DE': 85, u'JP': 2, u'HU': 2, u'BR': 9, u'BS': 1, u'FI': 1, u'KR': 1, u'BY': 1, u'CN': 3, u'RU': 4, u'NL': 7, u'NO': 1, u'TR': 1, u'LV': 1, u'NZ': 2, u'PK': 3, u'PH': 5, u'RO': 3, u'PL': 2, u'GR': 1, u'CL': 1, u'IQ': 1, u'CA': 9, u'IT': 3, u'CZ': 2, u'AR': 4, u'AU': 5, u'GB': 25, u'EU': 2, u'CR': 1, u'IE': 3, u'ID': 2, u'ES': 3, u'MA': 1, u'AP': 2, u'MY': 1, u'RS': 4, u'US': 772, u'SK': 5, u'MT': 1, u'SA': 1, u'UA': 1, u'MX': 2, u'SE': 5, u'IL': 1}

Current bandwidth state:

{u'BE': 82006, u'FR': 375014, u'DK': 219761, u'HR': 258807, u'DE': 1571331, u'JP': 82006, u'HU': 219761, u'BR': 732466, u'BS': 74548, u'FI': 80316, u'KR': 135093, u'BY': 82006, u'CN': 76239, u'RU': 743078, u'NL': 353602, u'NO': 82006, u'TR': 84306, u'LV': 82006, u'NZ': 164012, u'PK': 238812, u'PH': 200015, u'RO': 245859, u'PL': 487651, u'GR': 82006, u'CL': 618, u'IQ': 24717, u'CA': 632364, u'IT': 276265, u'CZ': 152642, u'AR': 325217, u'AU': 530420, u'GB': 2389339, u'EU': 582446, u'CR': 82006, u'IE': 188729, u'ID': 52526, u'ES': 357297, u'MA': 438629, u'AP': 258807, u'MY': 169542, u'RS': 7187784, u'US': 17925621, u'SK': 701076, u'MT': 82006, u'SA': 82006, u'UA': 176801, u'MX': 487651, u'SE': 349883, u'IL': 176801}
Next is page 2

Current requests state:

{u'BE': 1, u'FR': 3, u'DK': 2, u'HR': 2, u'SG': 1, u'DE': 106, u'JP': 3, u'HU': 2, u'BR': 9, u'BS': 1, u'FI': 1, u'KR': 1, u'BY': 1, u'CN': 3, u'RU': 5, u'NL': 7, u'NO': 1, u'TR': 1, u'LV': 1, u'NZ': 2, u'PK': 3, u'PH': 7, u'RO': 3, u'PL': 3, u'GR': 1, u'CL': 1, u'IQ': 1, u'CA': 12, u'IT': 3, u'CZ': 2, u'AR': 4, u'AU': 6, u'GB': 32, u'EU': 2, u'CR': 1, u'IE': 4, u'ID': 2, u'ES': 3, u'MA': 1, u'AP': 2, u'MY': 1, u'RS': 4, u'US': 957, u'SK': 5, u'MT': 1, u'SA': 1, u'UA': 7, u'MX': 2, u'SE': 5, u'IL': 1}

Current bandwidth state:

{u'BE': 82006, u'FR': 375014, u'DK': 219761, u'HR': 258807, u'SG': 82006, u'DE': 1975090, u'JP': 82006, u'HU': 219761, u'BR': 732466, u'BS': 74548, u'FI': 80316, u'KR': 135093, u'BY': 82006, u'CN': 76239, u'RU': 751261, u'NL': 353602, u'NO': 82006, u'TR': 84306, u'LV': 82006, u'NZ': 164012, u'PK': 238812, u'PH': 528331, u'RO': 245859, u'PL': 569657, u'GR': 82006, u'CL': 618, u'IQ': 24717, u'CA': 1027533, u'IT': 276265, u'CZ': 152642, u'AR': 325217, u'AU': 699962, u'GB': 2947641, u'EU': 582446, u'CR': 82006, u'IE': 269045, u'ID': 52526, u'ES': 357297, u'MA': 438629, u'AP': 258807, u'MY': 169542, u'RS': 7187784, u'US': 24784653, u'SK': 701076, u'MT': 82006, u'SA': 82006, u'UA': 185891, u'MX': 487651, u'SE': 349883, u'IL': 176801}
Next is page 3

Current requests state:

{u'BE': 1, u'FR': 3, u'DK': 2, u'HR': 2, u'SG': 1, u'DE': 106, u'JP': 3, u'HU': 2, u'BR': 9, u'BS': 1, u'FI': 1, u'KR': 1, u'BY': 1, u'CN': 3, u'RU': 5, u'NL': 7, u'NO': 1, u'TR': 1, u'LV': 1, u'NZ': 2, u'PK': 3, u'PH': 7, u'RO': 3, u'PL': 3, u'GR': 1, u'CL': 1, u'IQ': 1, u'CA': 12, u'IT': 3, u'CZ': 2, u'AR': 4, u'AU': 6, u'GB': 32, u'EU': 2, u'CR': 1, u'IE': 4, u'ID': 2, u'ES': 3, u'MA': 1, u'AP': 2, u'MY': 1, u'RS': 4, u'US': 957, u'SK': 5, u'MT': 1, u'SA': 1, u'UA': 7, u'MX': 2, u'SE': 5, u'IL': 1}

Current bandwidth state:

{u'BE': 82006, u'FR': 375014, u'DK': 219761, u'HR': 258807, u'SG': 82006, u'DE': 1975090, u'JP': 82006, u'HU': 219761, u'BR': 732466, u'BS': 74548, u'FI': 80316, u'KR': 135093, u'BY': 82006, u'CN': 76239, u'RU': 751261, u'NL': 353602, u'NO': 82006, u'TR': 84306, u'LV': 82006, u'NZ': 164012, u'PK': 238812, u'PH': 528331, u'RO': 245859, u'PL': 569657, u'GR': 82006, u'CL': 618, u'IQ': 24717, u'CA': 1027533, u'IT': 276265, u'CZ': 152642, u'AR': 325217, u'AU': 699962, u'GB': 2947641, u'EU': 582446, u'CR': 82006, u'IE': 269045, u'ID': 52526, u'ES': 357297, u'MA': 438629, u'AP': 258807, u'MY': 169542, u'RS': 7187784, u'US': 24784653, u'SK': 701076, u'MT': 82006, u'SA': 82006, u'UA': 185891, u'MX': 487651, u'SE': 349883, u'IL': 176801}

Total: 1230
{u'BE': 1, u'FR': 3, u'DK': 2, u'HR': 2, u'SG': 1, u'DE': 106, u'JP': 3, u'HU': 2, u'BR': 9, u'BS': 1, u'FI': 1, u'KR': 1, u'BY': 1, u'CN': 3, u'RU': 5, u'NL': 7, u'NO': 1, u'TR': 1, u'LV': 1, u'NZ': 2, u'PK': 3, u'PH': 7, u'RO': 3, u'PL': 3, u'GR': 1, u'CL': 1, u'IQ': 1, u'CA': 12, u'IT': 3, u'CZ': 2, u'AR': 4, u'AU': 6, u'GB': 32, u'EU': 2, u'CR': 1, u'IE': 4, u'ID': 2, u'ES': 3, u'MA': 1, u'AP': 2, u'MY': 1, u'RS': 4, u'US': 957, u'SK': 5, u'MT': 1, u'SA': 1, u'UA': 7, u'MX': 2, u'SE': 5, u'IL': 1}
{u'BE': 82006, u'FR': 375014, u'DK': 219761, u'HR': 258807, u'SG': 82006, u'DE': 1975090, u'JP': 82006, u'HU': 219761, u'BR': 732466, u'BS': 74548, u'FI': 80316, u'KR': 135093, u'BY': 82006, u'CN': 76239, u'RU': 751261, u'NL': 353602, u'NO': 82006, u'TR': 84306, u'LV': 82006, u'NZ': 164012, u'PK': 238812, u'PH': 528331, u'RO': 245859, u'PL': 569657, u'GR': 82006, u'CL': 618, u'IQ': 24717, u'CA': 1027533, u'IT': 276265, u'CZ': 152642, u'AR': 325217, u'AU': 699962, u'GB': 2947641, u'EU': 582446, u'CR': 82006, u'IE': 269045, u'ID': 52526, u'ES': 357297, u'MA': 438629, u'AP': 258807, u'MY': 169542, u'RS': 7187784, u'US': 24784653, u'SK': 701076, u'MT': 82006, u'SA': 82006, u'UA': 185891, u'MX': 487651, u'SE': 349883, u'IL': 176801}

If you have any questions about this tutorial, please leave a comment below.