Restful paginate with python












0















I'm getting data using Python via a rest API call as follows...



result = json.load(urllib2.urlopen("https://api.somesite.com/v0/someLink?api_key=aaabbbccc"))


There's a 100 max results built into the API so I have to paginate in python.



After making the first call, result.nextPage returns a code that I then have to pass to the next API call like...



result2 = json.load(urllib2.urlopen("https://api.somesite.com/v0/someLink?api_key=aaabbbccc&nextPage=someCode"))


And so on until I'm through all pages.



Does python have any in-built mechanism to handle pagination like this?



I could write a clumsy loop myself but am unsure about




  1. How to handle waiting for each page so I know I can proceed with the next call

  2. How to handle the 'no more pages' event without erroring

  3. How to combine the results of all calls into 1 variable after making all calls


Appreciate any thoughts at all on the most elegant way to go about this.










share|improve this question



























    0















    I'm getting data using Python via a rest API call as follows...



    result = json.load(urllib2.urlopen("https://api.somesite.com/v0/someLink?api_key=aaabbbccc"))


    There's a 100 max results built into the API so I have to paginate in python.



    After making the first call, result.nextPage returns a code that I then have to pass to the next API call like...



    result2 = json.load(urllib2.urlopen("https://api.somesite.com/v0/someLink?api_key=aaabbbccc&nextPage=someCode"))


    And so on until I'm through all pages.



    Does python have any in-built mechanism to handle pagination like this?



    I could write a clumsy loop myself but am unsure about




    1. How to handle waiting for each page so I know I can proceed with the next call

    2. How to handle the 'no more pages' event without erroring

    3. How to combine the results of all calls into 1 variable after making all calls


    Appreciate any thoughts at all on the most elegant way to go about this.










    share|improve this question

























      0












      0








      0








      I'm getting data using Python via a rest API call as follows...



      result = json.load(urllib2.urlopen("https://api.somesite.com/v0/someLink?api_key=aaabbbccc"))


      There's a 100 max results built into the API so I have to paginate in python.



      After making the first call, result.nextPage returns a code that I then have to pass to the next API call like...



      result2 = json.load(urllib2.urlopen("https://api.somesite.com/v0/someLink?api_key=aaabbbccc&nextPage=someCode"))


      And so on until I'm through all pages.



      Does python have any in-built mechanism to handle pagination like this?



      I could write a clumsy loop myself but am unsure about




      1. How to handle waiting for each page so I know I can proceed with the next call

      2. How to handle the 'no more pages' event without erroring

      3. How to combine the results of all calls into 1 variable after making all calls


      Appreciate any thoughts at all on the most elegant way to go about this.










      share|improve this question














      I'm getting data using Python via a rest API call as follows...



      result = json.load(urllib2.urlopen("https://api.somesite.com/v0/someLink?api_key=aaabbbccc"))


      There's a 100 max results built into the API so I have to paginate in python.



      After making the first call, result.nextPage returns a code that I then have to pass to the next API call like...



      result2 = json.load(urllib2.urlopen("https://api.somesite.com/v0/someLink?api_key=aaabbbccc&nextPage=someCode"))


      And so on until I'm through all pages.



      Does python have any in-built mechanism to handle pagination like this?



      I could write a clumsy loop myself but am unsure about




      1. How to handle waiting for each page so I know I can proceed with the next call

      2. How to handle the 'no more pages' event without erroring

      3. How to combine the results of all calls into 1 variable after making all calls


      Appreciate any thoughts at all on the most elegant way to go about this.







      python rest pagination






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 24 '18 at 8:51









      d3wannabed3wannabe

      456417




      456417
























          1 Answer
          1






          active

          oldest

          votes


















          1















          Does python have any in-built mechanism to handle pagination like this?




          No.



          Write a while True: loop with a break statement if there are no more pages to load.




          How to handle waiting for each page so I know I can proceed with the next call




          urllib2.urlopen is not asynchronous. Your code will block (i.e. wait) until the request is done.




          How to handle the 'no more pages' event without erroring




          That depends on the API you are using. I would expect that result.nextPage is empty/not set on the last page.




          How to combine the results of all calls into 1 variable after making all calls




          Append them to a list as you go. Pseudo code:



          url = "initial URL"
          results =

          while True:
          current_page = request(url)
          results.append(current_page)
          if (another page available):
          url = "new url with next page code"
          else:
          break


          I wholeheartedly recommend that you use the requests module instead of the very bare-bones urllib2.urlopen.






          share|improve this answer


























          • thank you - that worked perfectly and I'll check out the requests module later

            – d3wannabe
            Nov 24 '18 at 9:48











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53456618%2frestful-paginate-with-python%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1















          Does python have any in-built mechanism to handle pagination like this?




          No.



          Write a while True: loop with a break statement if there are no more pages to load.




          How to handle waiting for each page so I know I can proceed with the next call




          urllib2.urlopen is not asynchronous. Your code will block (i.e. wait) until the request is done.




          How to handle the 'no more pages' event without erroring




          That depends on the API you are using. I would expect that result.nextPage is empty/not set on the last page.




          How to combine the results of all calls into 1 variable after making all calls




          Append them to a list as you go. Pseudo code:



          url = "initial URL"
          results =

          while True:
          current_page = request(url)
          results.append(current_page)
          if (another page available):
          url = "new url with next page code"
          else:
          break


          I wholeheartedly recommend that you use the requests module instead of the very bare-bones urllib2.urlopen.






          share|improve this answer


























          • thank you - that worked perfectly and I'll check out the requests module later

            – d3wannabe
            Nov 24 '18 at 9:48
















          1















          Does python have any in-built mechanism to handle pagination like this?




          No.



          Write a while True: loop with a break statement if there are no more pages to load.




          How to handle waiting for each page so I know I can proceed with the next call




          urllib2.urlopen is not asynchronous. Your code will block (i.e. wait) until the request is done.




          How to handle the 'no more pages' event without erroring




          That depends on the API you are using. I would expect that result.nextPage is empty/not set on the last page.




          How to combine the results of all calls into 1 variable after making all calls




          Append them to a list as you go. Pseudo code:



          url = "initial URL"
          results =

          while True:
          current_page = request(url)
          results.append(current_page)
          if (another page available):
          url = "new url with next page code"
          else:
          break


          I wholeheartedly recommend that you use the requests module instead of the very bare-bones urllib2.urlopen.






          share|improve this answer


























          • thank you - that worked perfectly and I'll check out the requests module later

            – d3wannabe
            Nov 24 '18 at 9:48














          1












          1








          1








          Does python have any in-built mechanism to handle pagination like this?




          No.



          Write a while True: loop with a break statement if there are no more pages to load.




          How to handle waiting for each page so I know I can proceed with the next call




          urllib2.urlopen is not asynchronous. Your code will block (i.e. wait) until the request is done.




          How to handle the 'no more pages' event without erroring




          That depends on the API you are using. I would expect that result.nextPage is empty/not set on the last page.




          How to combine the results of all calls into 1 variable after making all calls




          Append them to a list as you go. Pseudo code:



          url = "initial URL"
          results =

          while True:
          current_page = request(url)
          results.append(current_page)
          if (another page available):
          url = "new url with next page code"
          else:
          break


          I wholeheartedly recommend that you use the requests module instead of the very bare-bones urllib2.urlopen.






          share|improve this answer
















          Does python have any in-built mechanism to handle pagination like this?




          No.



          Write a while True: loop with a break statement if there are no more pages to load.




          How to handle waiting for each page so I know I can proceed with the next call




          urllib2.urlopen is not asynchronous. Your code will block (i.e. wait) until the request is done.




          How to handle the 'no more pages' event without erroring




          That depends on the API you are using. I would expect that result.nextPage is empty/not set on the last page.




          How to combine the results of all calls into 1 variable after making all calls




          Append them to a list as you go. Pseudo code:



          url = "initial URL"
          results =

          while True:
          current_page = request(url)
          results.append(current_page)
          if (another page available):
          url = "new url with next page code"
          else:
          break


          I wholeheartedly recommend that you use the requests module instead of the very bare-bones urllib2.urlopen.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 24 '18 at 10:15

























          answered Nov 24 '18 at 9:03









          TomalakTomalak

          259k51429547




          259k51429547













          • thank you - that worked perfectly and I'll check out the requests module later

            – d3wannabe
            Nov 24 '18 at 9:48



















          • thank you - that worked perfectly and I'll check out the requests module later

            – d3wannabe
            Nov 24 '18 at 9:48

















          thank you - that worked perfectly and I'll check out the requests module later

          – d3wannabe
          Nov 24 '18 at 9:48





          thank you - that worked perfectly and I'll check out the requests module later

          – d3wannabe
          Nov 24 '18 at 9:48




















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53456618%2frestful-paginate-with-python%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Costa Masnaga

          Fotorealismo

          Sidney Franklin