Biblioteka requests, zadanie dla początkującego

0

Cześć!
Dopiero zaczynam swoją przygodę z programowaniem i big data i rozwiązuje sobie pewne zadania, z jednym natrafiłem na spory problem i nie wiem jak dokończyć , ktoś pomoże?

Zadanie polega na wyciągnięciu pewnych danych z https://cat-fact.herokuapp.com/facts , to są dokładnie ciekawostki o kotach.
Zadaniem jest połączyć się za pomocą requests (GET). Gdy już się połączymy, oto co mamy zrobić:

  1. Wypisać ile jest wszystkich ciekawostek.
  2. Wypisać 5 ciekawostek z największą liczbą głosów.
  3. Wypisać imiona i nazwiska użytkowników, ale bez powtórzeń.

Zapewne dla Was zadanie banalne, ale tak jak mówię - dobra zaczynam, a średnio podpasowało mi requests i api.

oto co mam:

import requests
import json
def get_cat_data():
    url='https://cat-fact.herokuapp.com/facts'
    response=requests.get(url)
    response_json=response.json()
    cat_data=response_json['text']
    output=[]
    for x in cat_data:
        output.append("{text}".format(cat_data))

Z góry bardzo dziękuję!

0
def get_cat_data():
	url = 'https://cat-fact.herokuapp.com/facts'
	response = requests.get(url)
	response_json = response.json()
	output = []

	for record in response_json:
		output.append(record['text'])

Tak poprawilem, zeby Ci troche pomoc. Co do zadan:

Wypisać ile jest wszystkich ciekawostek.

Uzyj funkcji len na response_json.

Wypisać 5 ciekawostek z największą liczbą głosów.

Mozna by uzyc funkcji nlargest z biblioteki heapq (https://docs.python.org/3.6/library/heapq.html)

Wypisać imiona i nazwiska użytkowników, ale bez powtórzeń.

Nie wiem gdzie te imiona sa w tym JSONie, ale mozesz dodac imiona do setu zamiast listy i wyswietlic owy set na koniec (set nie zawiera powtarzajacych sie elementow).

1
import requests

class CatDetector:
    def __init__(self, page=None):
        self.page = page

    def _get_web_content(self):
        return requests.get(self.page).json()
    
    def _get_all_cats(self):
        return filter(lambda x: x["type"] == "cat", self._get_web_content())
    
    def show_cats(self):
        return len(list(self._get_all_cats()))

    def get_five_best_ratings(self):
        ratings = list(self._get_all_cats())
        ratings.sort(key = lambda x: int(x["status"]["sentCount"]))
        return ratings[::-1][:5]
   
cat = CatDetector('https://cat-fact.herokuapp.com/facts')

Bardziej propozycja bo json jest niekompletny.

metody z _ to dla mnie takie wizualne rozroznienie ktora metoda jest prywatna (python nie ma prawidziwie prywatnych metod). Prywatne zwracaja kolejno calego jsona i konkretne elementy.

show_cats -> zwraca liczbe wszystkich szukanych elementow (ciekawostek)
get_five_best_ratings (propozycja) -> Rzutuje elementy typu filter(generator) na liste a nastepnie sortuje na podstawie konkretnego klucza pod ktorym jest ocena. Nastepnie odwraca liste i wypluwa pierwsze 5 elementow.

1 użytkowników online, w tym zalogowanych: 0, gości: 1