2013-07-21 11 views
7

Gram z API Alist (AL) i chcę pobrać wszystkie zlecenia w San San Francisco. Ponieważ nie mogłem znaleźć aktywnego opakowania Pythona dla api (jeśli zrobię jakikolwiek postęp, myślę, że chciałbym zrobić własny), używam biblioteki żądań.Python żąda argumentów/postępowania z api paginacją

Wyniki AL API są podzielone na strony i nie mogę wymyślić, jak przejść poza pierwszą stronę wyników.

Oto mój kod:

import requests 
r_sanfran = requests.get("https://api.angel.co/1/tags/1664/jobs").json() 
r_sanfran.keys() 
# returns [u'per_page', u'last_page', u'total', u'jobs', u'page'] 
r_sanfran['last_page'] 
#returns 16 
r_sanfran['page'] 
# returns 1 

Próbowałem dodanie argumentów requests.get, ale to nie działa. Próbowałem też czegoś naprawdę głupiego - zmiana wartości klawisza "strona", jak to było w magii, będzie dla mnie paginacją.

np. r_sanfran['page'] = 2

Zgaduję, że to coś stosunkowo prostego, ale nie mogę tego rozgryźć, więc jakakolwiek pomoc byłaby niesamowita.

Dzięki jak zawsze.

Angel List API documentation jeśli jest to pomocne.

Odpowiedz

12

Czytaj last_page i złożyć zamówienie Pobierz dla każdej strony w zakresie:

import requests 

r_sanfran = requests.get("https://api.angel.co/1/tags/1664/jobs").json() 
num_pages = r_sanfran['last_page'] 

for page in range(2, num_pages + 1): 
    r_sanfran = requests.get("https://api.angel.co/1/tags/1664/jobs", params={'page': page}).json() 
    print r_sanfran['page'] 
    # TODO: extract the data 
+2

Zgaduję, że powinno być 'Zakres (2, NUM_PAGES + 1)' ponieważ pierwsza strona jest 1, a 16 to całkowita liczba stron, więc będzie to dotyczyć zakresu ... (i może chcieć użyć 'requests.get ('http: // ... blah ...?', params = {'page' : page}) ', aby uniknąć interpolacji ciągów znaków –

+0

Ah. Nie widziałem, żebym mógł przekazać argumenty params w request.get – crock1255

+0

Ah. Dobra, widzę, co się dzieje, myślałem, że paginacja pochodzi od anioła. co/1 ... angel.co/2, itp. Dzięki za pomoc! – crock1255