• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

API zwracające postaci filmowe

+5 głosów
352 wizyt
pytanie zadane 7 lutego w Nasze projekty przez dxr Obywatel (1,250 p.)
edycja 26 lutego przez dxr

UPDATE

Poprawiłem kilka rzeczy w backendzie, dodałem funkcję wyświetlającą liczę rekordów w bazie i dodałem przykłady używania.

Zachęcam do podawania swoich propozycji!

___________________________________________________________
Hej

Jakiś czas temu z nudy napisałem API, które zwraca postaci filmowe. Potrzebowałem tego do tworzenia fikcyjnych kont w testowanych aplikacjach. Wiem oczywiście, że API zwracające fikcyjne dane istnieją od dawna, ale ja wtedy miałem spokojny okres w życiu, a że dodatkowo jestem śmieszkiem to zrobiłem takie cuś o.

Ostatnio ktoś na forum pytał o tworzenie API i przypomniałem sobie o tym śmierdzącym już trupem projekcie. Wskrzesiłem go kilkoma update-ami i włala! Jest piękny w swej brzydocie.

Obecnie jest mała baza danych (niecałe 200 postaci). Zachęcam do podawania swoich propozycji książek, seriali, filmów itp. itd.

Ogólnie plan jest taki, że będę to rozwijać. Na bieżąco będę uzupełniać bazę i popracuję nad frontendem w wolnym czasie. Potem rozszerzę funkcjonalność backendu.

Projekt znajdziecie tu: GitLab

natomiast API tu: Characters-API

komentarz 11 lutego przez dxr Obywatel (1,250 p.)
Z jakiegoś powodu sporo osób ma problem z używaniem API więc daję małą instrukcję:

1. Parametr to nie jest lokalizacja. Parametr w URL zapisuje się po znaku zapytania np. żeby pobrać postacie z polskich filmów trzeba wpisać URL:

https://characters-api.dexit.pl/api/characters/?country=pl

a nie:

https://characters-api.dexit.pl/api/characters/pl

2. Jeśli parametrów jest więcej niż jeden to każdy kolejny wpisujemy po znaku ampersand (&) np. :

https://characters-api.dexit.pl/api/characters/?country=pl&limit=10

3. Wynik jest zwracany w json-ie. Jest to celowy zabieg, żeby łatwo zassać te dane do backend-u aplikacji.

Gdyby ktoś miał jeszcze wątpliwości to proszę pisać tutaj. To nie wstyd nie wiedzieć. Wstyd to nie wiedzieć i udawać, że się wie :)

Jeszcze mały update... dodałem trochę nowych postaci. Jest już 129 sztuk. Zapraszam do podsyłania swoich propozycji. Jeśli się komuś nie chce formatować to chociaż propozycje tytułów :)

Chętnie też wysłucham propozycji czy krytyki samej mechaniki strony/api.
komentarz 15 lutego przez dxr Obywatel (1,250 p.)

Ehh... trochę do siebie popiszę to nic mi się nie stanie :)

Poprawiłem frontend. Może to nie cud, ale przynajmniej nie rani oczu i jest responsywny. W backendzie zasadniczo nic nie zmieniłem, oprócz nowej ścieżki.

Teraz będę pracować nad backendem i powiększę bazę o nowe postacie.

komentarz 20 lutego przez Marcins321 Mądrala (5,470 p.)

@dxr, nwm czy to jest jakiś błąd ale wydaję mi się że troszkę zbyt ciemna ta strona wink http://prntscr.com/mnw6m9

komentarz 20 lutego przez dxr Obywatel (1,250 p.)
To nie błąd, to mój słaby gust :) ogólnie jestem zwolennikiem ciemnych ekranów i żeby mnie nie raziło to zrobiłem w takim szaro-granatowym stylu. W przyszłości to poprawię. Na tą chwilę chyba nie rani oczu :)
komentarz 24 lutego przez Marcins321 Mądrala (5,470 p.)

jeżeli miałbyś problemy z frontendem to chętnie pomogę wink ostatnio robię tylko w frontendzie więc taki teścik umiejętności w postaci prostego SPA bardzo by mi pomógł smiley

9 odpowiedzi

+1 głos
odpowiedź 20 lutego przez kodel Początkujący (480 p.)

Żeby nie było że tylko pasożytuję :)

(null, 'Mac', 'Taylor', null, 'CSI: NY', 'CSI: Kryminalne zagadki Nowego Jorku', 'us'),
(null, 'Josephine', 'Danville', null, 'CSI: NY', 'CSI: Kryminalne zagadki Nowego Jorku', 'us'),
(null, 'Danny', 'Messer', null, 'CSI: NY', 'CSI: Kryminalne zagadki Nowego Jorku', 'us'),
(null, 'Sheldon', 'Hawkes', null, 'CSI: NY', 'CSI: Kryminalne zagadki Nowego Jorku', 'us'),
(null, 'Don', 'Flack', null, 'CSI: NY', 'CSI: Kryminalne zagadki Nowego Jorku', 'us'),
(null, 'Lindsay', 'Monroe', null, 'CSI: NY', 'CSI: Kryminalne zagadki Nowego Jorku', 'us'),
(null, 'Sid', 'Hammerback', null, 'CSI: NY', 'CSI: Kryminalne zagadki Nowego Jorku', 'us'),
(null, 'Adam', 'Ross', null, 'CSI: NY', 'CSI: Kryminalne zagadki Nowego Jorku', 'us'),
(null, 'Stella', 'Bonasera', null, 'CSI: NY', 'CSI: Kryminalne zagadki Nowego Jorku', 'us')

Będę dodawać więcej swoich ulubionych seriali, a tymczasem birę się za instalowanie tego wszystkiego. Mam nadzieję że nie polegnę.

komentarz 21 lutego przez dxr Obywatel (1,250 p.)
Dodałem, dzięki.
+1 głos
odpowiedź 23 lutego przez kodel Początkujący (480 p.)
Teraz widzę, że nie działa to API. Zobacz czy coś cię nie wywaliło :)
komentarz 23 lutego przez dxr Obywatel (1,250 p.)
Działa tylko wpinam domenę do Cloudflare i właśnie część serwisów mi padła :) tego się nie uniknie. Zaraz pewnie wróci.
+1 głos
odpowiedź 23 lutego przez dxr Obywatel (1,250 p.)
API już wróciło. Wpiąłem swoją domenę do Cloudflare i głupi nie sprawdziłem czy wszystkie rekordy się przeniosły.
+1 głos
odpowiedź 25 lutego przez kodel Początkujący (480 p.)

Dodaję klasyk :)

(null, 'Forrest', 'Gump', null, 'Forrest Gump', 'Forrest Gump', 'us'),
(null, 'Jenny', 'Curran', null, 'Forrest Gump', 'Forrest Gump', 'us'),
(null, 'Dan', 'Taylor', null, 'Forrest Gump', 'Forrest Gump', 'us'),
(null, 'Benjamin', 'Bufford-Blue', 'Bubba', 'Forrest Gump', 'Forrest Gump', 'us'),
(null, 'Dorothy', 'Harris', null, 'Forrest Gump', 'Forrest Gump', 'us'),
(null, 'Paul', 'Bryant', 'Bear', 'Forrest Gump', 'Forrest Gump', 'us'),
(null, 'Abbie', 'Hoffman', null, 'Forrest Gump', 'Forrest Gump', 'us');

 

komentarz 26 lutego przez dxr Obywatel (1,250 p.)
Dzięki! Dodałem też CSI: Miami :D
0 głosów
odpowiedź 20 lutego przez kodel Początkujący (480 p.)

Witaj. Właśnie potrzebuję zrobić podobne API tylko do czego innego. Ogólnie bardzo fajny projekt. Aż w szoku jestem, że sam do siebie piszesz w tym wątku :) Chciałem się zapytać o kilka rzeczy:

1. Dlaczego w kodzie HTML masz takie dziwne znaczniki np.

{% block content %}

nigdy czegoś takiego nie widziałem...

2. Do czego są pliki gitlab-ci.yml i deploy.sh? Pisałeś, że wszystko jest napisane w Pythonie.

3. O co chodzi z tym plikiem .env?

Ja potrzebuję API do wyszukiwania produktów w sklepie intenetorym więc nawet frontendu nie potrzebuję. Tylko będę miał więcej tabel... To duży problem?

Tak btw to API działa jak malina :) można dodać jeszcze wyszukiwanie po kilku parametrach jednoczeście, ale jak na start projektu to i tak mega. Jak uda mi się podobne zrobić to będę super happy.

komentarz 20 lutego przez dxr Obywatel (1,250 p.)
No witam, chyba zabłądziłeś w internetach :) odpowiem najpierw na pytania.

1. To jest kod jinja2 czyli takiego języka templatek do pythona. W tym przypadku to co jest pomiędzy content block jest podmieniane na html, który zwraca python. Widzisz podobieństwo do php? :)

2. .gitlab-ci.yml i deploy.sh to moje zboczenie zawodowe + lenistwo. Te dwa pliki służą do automatycznego deployu aplikacji na serwerze. W momencie kiedy zrobię commit na branchu master to gitlab runner łączy się z moim serwerem i stawia aplikację w pół minuty. Zrobi to nawet na gołym serwerze. Sam zainstaluje wszystko co trzeba itp. itd. CI/CD to akronim od continous integration / continous delivery. W korporacjach używa się tych narzędzi do tego, żeby budować i aktualizować aplikacje przy zerowej przerwie w działaniu. Ogólnie to temat rzeka na osobne wątki :)

deploy.sh to skrypt robiący grunt pod instalację/aktualizację aplikacji na serwerze.

Nie musisz z tego narzędzia korzystać. Aplikacja zadziała bez tego tylko będziesz wszystko sam musiał wyklikać z palca.

3. .env to plik zmiennych środowiskowych czyli w tym prostym przypadku z nazwami użytkowników i hasłami. Nie chcesz przecież publikować na gicie, ani nigdzie indziej haseł do baz danych :)

Możesz mieć tyle tabel ile dusza zapragnie. Będziesz musiał dla każdej napisać osobną klasę. Jeśli twój sklep będzie wykonywać dużo zapytań do API np. 1000 na sekundę lub więcej to ten projekt będziesz musiał, albo zastąpić phpem, albo dodać jakieś kolejki w rabbitmq... Pamiętaj, że python jest trochę wolniejszy od php.

Pewnie, pewnie :) będę dodawać funkcjonalności z czasem.
komentarz 20 lutego przez kodel Początkujący (480 p.)
Ok może najpierw zacznę od zwykłego uruchomienia na swoim komputerze, a te zaawansowane rzeczy spróbuję zgłębić później.

W sumie nie wiem po co o te pliki html pytam jak ja nie chcę frontendu więc nieważne. Natomiaste ten plik .env muszę sobie sam stworzyć i wpisać tam swoje hasła tak?

Nawet nie wiem co to jest rabbitmq, ale jestem pewien, że nie będzie 1000 zapytań na sekundę :) może allegro tyle ma ale nie mały sklepik.

To tak w skrócie co muszę zrobić, żeby na razie odpalić to twoje API u siebie? Bo chyba bym tak zrobił, że zerżnę z tego twojego projektu i potem będę sobie zmiany wprowadzać. Mam nadzieję, że nie masz nic przeciwko? :)
komentarz 20 lutego przez dxr Obywatel (1,250 p.)
Pewnie, że nie mam :) klonuj :)

Najpierw musisz sklonować repo. Potem instalujesz pakiety z pliku requirements.txt. Możesz sobie zrobić virtualenv żeby nie było konfliktu żadnego z twoimi obecnymi pakietami.

Potem musisz zainstalować mysql i wgrać bazę danych i ustawić użytkownika i hasło. Zmień sobie host="0.0.0.0" na debug="true" w ostatniej linijce kodu. Ułatwi ci to modyfikację aplikacji.

Potem odpalasz aplikację i wchodzisz w przeglądarce na http://localhost:5000
komentarz 21 lutego przez kodel Początkujący (480 p.)
Zrobiłem jak mówisz i wywala mi błąd z połączeniem do bazy danych... wszystko ustawiłem jak trzeba chyba.
komentarz 21 lutego przez dxr Obywatel (1,250 p.)
Wklej tutaj komunikat błędu.
komentarz 21 lutego przez kodel Początkujący (480 p.)
Już działa, dzięki! Zrobiłem literówkę w haśle :P
0 głosów
odpowiedź 21 lutego przez kodel Początkujący (480 p.)
No dobra. Uruchomiłem przetestowałem i zaczynam modyfikować po swojemu. Gdybym miał jakieś problemy to będę pisać. Chciałem jeszcze tak bardziej z ciekawości zapytać o coś.

Tam na gitlabie jest drugi branch "docker". To jest "work in progres" i potem go zmergujesz z masterem tak? Bo tam zupełnie inna koncepcja jest. Nie znam się na dokerze i czarna magia to jest dla mnie... Chyba wolę zostać przy tym co jest w masterze :)
komentarz 22 lutego przez dxr Obywatel (1,250 p.)
Branch docker to moje kolejne zboczenie zawodowe :) nie zostanie zmergowany do mastera.

Jest to po prostu zdockeryzowana wersja tej aplikacji. Deploy jest jeszcze szybszy i bardziej bezproblemowy niż w pierwszym przypadku. Nawet bazy danych nie musisz instalować i wgrywać :) wszystko podane na tacy. Gitlab runner buduje obraz aplikacji i wypycha go do rejestru, a następnie wykonuje jedną komendę na serwerze i koniec - aplikacja gotowa.

Zapewnia też lepszą skalowalność dzięki docker swarm ale to już w ogóle trochę wyższe sfery dla korporacji, a nie dla takich robaczków jak my :) tzn. warto umieć takie rzeczy żeby robić to dla korporacji :P tylko nie ma sensu żeby takie moje śmieszne API miało infrastrukturę rozproszoną.
komentarz 23 lutego przez kodel Początkujący (480 p.)
A to nie dla mnie :) chętnie bym skorzystał z takiego ułatwienia ale Docker to dla mnie czarna magia.
0 głosów
odpowiedź 23 lutego przez kodel Początkujący (480 p.)
Dobra mam już działającą aplikację zmodyfikowaną po swojemu. Wywaliłem frontend, bo mi nie potrzebny i dodałem swoje tabele do bazy danych. Zmodyfikowałem kod dodając klasy i... wywala mi peewee error jakieś dziwne rzeczy. Wkleił bym error ale ma pewnie ze stronę a4 nie wiem czy chcesz to czytać :)

Chciałem zapytać dlaczego nie zrobić po prostu zapytań sql w kodzie? I czy się da w ogóle czy trzeba z tego peewee korzystać?
komentarz 23 lutego przez dxr Obywatel (1,250 p.)
Od tego jest error log żeby go czytać więc wklej. Może zrób to w osobnym poście to będzie łatwiej przeczytać niż w komentarzu.

Oczywiście, że możesz pisać zapytania w kodzie. Pewnie zaraz zapytasz "to dlaczego nie zrobiłeś?" :) zatem uprzedzam pytanie.

Zapytania w kodzie są fajne, bo nie musisz się nowych narzędzi uczyć, ale mają też wady. Oto najważniejsze:

1. Jakie zapytanie napiszesz takie masz. Innymi słowy, musisz sam zadbać o zabezpieczenie przed wstrzykiwaniem itd.

2. Wynik zapytania jest tekstem więc zanim zrobisz z niego jsona to musisz napisać kawał kodu do parsowania zapytań. Jak masz proste zależności i pytania to luz, ale jak masz złożone zapytania i kilkanaście powiązanych ze sobą tabel to zajmie ci to 5 razy dłużej nisz nauka ORM, a kod będzie paskudny.
komentarz 23 lutego przez kodel Początkujący (480 p.)
Ok to zostaję przy peewee.
0 głosów
odpowiedź 23 lutego przez kodel Początkujący (480 p.)

To jest błąd, który mi wywala:

Traceback (most recent call last):
  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/flask/app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/flask/app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/flask/app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()

  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/mnt/files/coding/py/characters_api/app.py", line 52, in Characters
    db.connect()
  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/peewee.py", line 2662, in connect
    self._initialize_connection(self._state.conn)
  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/peewee.py", line 2512, in __exit__
    reraise(new_type, new_type(*exc_args), traceback)
  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/peewee.py", line 186, in reraise
    raise value.with_traceback(tb)
  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/peewee.py", line 2661, in connect
    self._state.set_connection(self._connect())
  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/peewee.py", line 3475, in _connect
    return mysql.connect(db=self.database, **self.connect_params)
  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/pymysql/__init__.py", line 94, in Connect
    return Connection(*args, **kwargs)
  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/pymysql/connections.py", line 325, in __init__
    self.connect()
  File "/home/dxr/.local/share/virtualenvs/characters_api-KllCubHW/lib/python3.6/site-packages/pymysql/connections.py", line 630, in connect
    raise exc
peewee.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection refused)")

Nie mam pojęcia o co chodzi z tymi plikami...

1
komentarz 23 lutego przez dxr Obywatel (1,250 p.)
Nie no koleżko chyba lenia dostałeś :) w ostatniej linni masz napisane co poszło nie tak...
komentarz 23 lutego przez kodel Początkujący (480 p.)
edycja 25 lutego przez kodel
Oszszszszszsz... sorry. Te pierwsze szlaczki mi całkiem wzrok odebrały. Szukam dalej.

Update: miałem wyłączony silnik bazy danych. Z jakiegoś powodu usługa nie była "enabled".
0 głosów
odpowiedź 1 kwietnia przez kodel Początkujący (480 p.)
Hej, udało mi się zrobić własne API. Dzięki!!!

Teraz chciałbym je umieścić w sieci (obecnie po prostu na komputerze odpalam) i mam dylemat. Hosting raczej odpada z uwagi na ograniczenia, a kupić VPS trochę drogo... Nie znasz jakiejś usługi, które by wpasowała się pomiędzy?

Drugie pytanie: jakie wady i zalety ma to podejście z robieniem własnego Dockera? Coś już na ten temat mówiłeś, ale niedużo... zastanawiam się ile pracy kontra ile zalet ma zrobienie tego API właśnie w Dockerze.
komentarz 1 kwietnia przez Criss Mędrzec (172,300 p.)
Zrób wlasne pytanie i ew. umiesc link tutaj jak chcesz żeby ktoś stąd sie wypowiedział
komentarz 1 kwietnia przez Bosswell Nałogowiec (32,810 p.)
Coś pomiędzy? Hmm, może Raspberry Pi jako własny serwer?
komentarz 1 kwietnia przez dxr Obywatel (1,250 p.)

@kodel,  popieram @Criss :) post się zrobił rozlazły, a temat jest bardzo szeroki.

Aplikację możesz wrzucić na Heroku lub AWS Elastic Beanstalk. To jest coś pomiędzy VPS, a hostingiem. Wrzucasz aplikację i nie martwisz się utrzymaniem VPS-a. Nie wiem jak z Heroku, ale AWS może wyjść drogo.

Jeśli nie jest to produkcyjna aplikacja to sugestia @Bosswell będzie dla ciebie idealna.

Podobne pytania

0 głosów
1 odpowiedź 63 wizyt
pytanie zadane 4 listopada 2018 w Python, Django przez Dawid89 Początkujący (380 p.)
0 głosów
1 odpowiedź 55 wizyt
0 głosów
1 odpowiedź 274 wizyt
Porady nie od parady
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze). Nie zapomnij o ustawieniu odpowiedniego języka z rozwijanego menu oraz czytelnym formatowaniu kodu.Przycisk code

65,641 zapytań

112,265 odpowiedzi

236,884 komentarzy

46,639 pasjonatów

Przeglądających: 144
Pasjonatów: 7 Gości: 137

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...