Skip to main content

Wykop SDK for APIv3 and above.

Project description

Wykop SDK Reloaded

PyPI version PyPI Downloads

SDK umozliwijące komunikację z API (v3) wykopu na podstawie oficjalnej dokumentacji.


Jeśli projekt ci się do czegoś przydał to postaw mi kawę ☕. Nie musi być to kawa z Starbucksa, taka biedronkowa też jest ok ;) Każda nawet najmniejsza dotacja to sygnał że to co robię jest dla was wartościowe i warto to utrzymywać.

Dokumentacja

Link do dokumentacji

Jeśli brakuje akcji w sdk mozna bezposrednio wyslac request do wykop api dzięki metodzie raw_request.

api.raw_request("https://wykop.pl/api/v3/tags/popular", RequestType.GET, data=None)

Instalacja

pip install wykop_sdk_reloaded

Przykładowe uzycie

from wykop_sdk_reloaded.v3.client import AuthClient, WykopApiClient

auth = AuthClient()
auth.authenticate_user("<USER_JWT_TOKEN>", "<USER_REFRESH_TOKEN>")
auth.refresh_user_token()

api = WykopApiClient(auth)

# tworzy wpis na mikroblogu
api.entries_create_entry("michal bialek sami wiecie co #wykop")
# pobiera listę wpisów z mikrobloga
api.entries_list_entries()
from wykop_sdk_reloaded.v3.client import AuthClient, WykopApiClient

auth = AuthClient()
"""
autoryzując się w ten sposob masz tylko dostep do operacji odczytu.
Reszta wymaga WykopApiClient.authenticate_user()
""" 
auth.authenticate_app("<APP_KEY>", "<APP_SECRET>")

api = WykopApiClient(auth)

# pobiera listę wpisów z mikrobloga
api.entries_list_entries()

W razie wątpliwości przeczytaj README do końca i rzuć okiem na testy.

Autoryzacja przez Wykop API

Utworzenie aplikacji

By móc korzystać z api wykopu potrzebujecie utworzyć aplikację na stronie dev.wykop.pl.

Klikacie w przycisk "utwórz aplikację". Zaznaczacie uprawnienia wedle uznania.

Akceptujecie regulamin i klikacie "dodaj aplikację".

Na liście powinna ukazać wam się świezo dodana pozycja:

Kopiujecie klucz API oraz Sekret i wklejacie go do tego fragmentu kodu:

auth = AuthClient()
auth.authenticate_app("<APP_KEY>", "<APP_SECRET>")

Dzięki temu mozecie wykonywać ządania przez SDK. Uwaga, by móc tworzyć, edytować, usuwać, głosować i mieć dostęp do powiadomień musicie się dodatkowo zalogować. Ten etap wystarczy do pobierania danych i w sumie nic poza tym.

Zalogowanie uzytkownikiem

By móc tworzyć, edytować, usuwać, głosować i mieć dostęp do powiadomień musicie się dodatkowo zalogować. Oto instrukcja jak to zrobić.

Gdy juz macie dane aplikacji wywołujecie metodę .wykop_connect() klasy AuthClient która zwraca Wam link pod który musicie się udać.

from wykop_sdk_reloaded.v3.client import AuthClient

auth = AuthClient()
auth.authenticate_app("<APP_KEY>", "<APP_SECRET>")

# zwraca link do wykopu na który musicie wejsc
auth.wykop_connect()

Link powinien wyglądać tak: https://wykop.pl/connect/10d711dfc86f361b6a3349dd1b71c19132f88cc1

Po wejściu powinno wam wyskoczyć okienko łączące wasze konto z aplikacją. Wybierzcie jakie uprawnienia powinien mieć wasz uzytkownik api a następnie kliknijcie "połącz z aplikacją".

Po kliknięciu zostajecie przekierowani na stronę zdefiniowaną przy tworzeniu aplikacji w polu "Podaj adres zwrotny dla WykopConnect".

U mnie będzie to: http://api/?token=eyJ041424iJ3QiLCJhbGciOiJIUzI1NiJ9.bG9yZW0gaXBzdW1sb3JlbSBpcHN1bWxvcmVtIGlwc3VtbG9yZW0gaXBzdW1sb3JlbSBpcHN1bWxvcmVtIGlwc3VtbG9yZW0gaXBzdW0=&rtoken=3e39e42414248c4c79ee221ef8f10af55252db20139eb5c2617a188115f7c2758

Wyciągacie z URLa token i rtoken, zapisujecie gdzieś sobie na przykład w pliku .env waszej aplikacji i teraz w końcu mozecie korzystac z pelni mozliwosci wykopowego api.

from wykop_sdk_reloaded.v3.client import AuthClient, WykopApiClient

auth = AuthClient()
# USER_JWT_TOKEN to token, a USER_REFRESH_TOKEN to rtoken z urla
auth.authenticate_user("<USER_JWT_TOKEN>", "<USER_REFRESH_TOKEN>")

api = WykopApiClient(auth)

# tworzy wpis na mikroblogu
api.entries_create_entry("michal bialek sami wiecie co #wykop")

Michal Białek jak zwykle przekombinował ale co mozna poradzic.

Decyzje projektowe

As explicit as possible

Unikam automagicznych funkcjonalności dlatego na przykład nie ma automatycznego odświezania tokenu uzytkownika API. Osoba korzystająca z SDK musi to zrobić manualnie. Najbardziej leniwy sposób to robienie tego za kazdym razem przy inicjacji obiektu wtedy macie gwarancję, ze uzywacie aktualnego tokenu:

from wykop_sdk_reloaded.v3.client import AuthClient

auth = AuthClient()
auth.authenticate_user("<USER_JWT_TOKEN>", "<USER_REFRESH_TOKEN>")
auth.refresh_user_token()

Tokeny mają ustawiony krotki okres waznosci więc podejrzewam, ze to jest najbardziej praktyczna opcja.

SDK blisko Wykop API

Postanowiłem zwracać praktycznie surowe dane z api wykopu zamiast zdeserializowanych list obiektów. Ma to jedną duzą zaletę - znaczie ułatwiania utrzymywanie biblioteki przy jednoczesnej duzej elastyczności w przetwarzaniu odpowiedzi przez uzytkowników SDK. Jeśli struktura odpowiedzi się zmieni to znaczy, ze wykop zmienił swoje API i wystarczy, ze dokonacie zmian w kodzie zamiast czekania na nową wersję SDK.

Wiele bibliotek ma tendencje do zbyt duzej abstrakcji co powoduje, ze nie są wstanie nadązyć za zmianami w API a przez to stają się niepraktyczne dla programistów którzy są zmuszeni do napisania własnego wrappera.

Jeśli brakuje Wam implementacji jakiegoś endpointu albo obecna jest niepełna to oczywiście utwórzcie ticket ale pamiętajcie, ze mozecie zawsze uzywać WykopApiClient.raw_request(). Pomysł został zaczerpnięty z ORMów, które mają metodę awaryjną do wykonywania napisanego przez programistę SQLa.

Dlaczego polski

Z wykopu korzystają polacy (ewentualnie ruskie i ukraińskie trolle). Język angielski w komentarzach nie ma sensu dla polskojęzycznego odbiorcy. Nazwy obiektów i metod są po angielsku tylko dlatego, ze wymagają tego dobre praktyki programistyczne.

Etyka

Nie napisałem tego SDK by jakieś trolle i boty spamowały na wykopie. Niestety nie jestem wstanie tego skontrolować więc zotaje sprawiedliwość boska tak zwana pośmiertna. SDK zostało stworzone do pomocy fajnym projektom, jak na przykład WykopGPT.

Kontakt

SDK nie jest kompletne, jeśli będzie Wam czegoś brakowało to dodajcie swoje Issue albo PR, które są oczywiście mile widziane.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wykop_sdk_reloaded-0.6.0.tar.gz (29.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wykop_sdk_reloaded-0.6.0-py3-none-any.whl (26.4 kB view details)

Uploaded Python 3

File details

Details for the file wykop_sdk_reloaded-0.6.0.tar.gz.

File metadata

  • Download URL: wykop_sdk_reloaded-0.6.0.tar.gz
  • Upload date:
  • Size: 29.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for wykop_sdk_reloaded-0.6.0.tar.gz
Algorithm Hash digest
SHA256 4070b1ad044524cea517257f0c73d48e3b035a535e2b0784cacf52dd582a4ea8
MD5 ba6e45c766439fab83a6aee93c83e227
BLAKE2b-256 304bb47d9c61eac3a05937e499903347712896b3eb7429c9dbc64946420ab17c

See more details on using hashes here.

File details

Details for the file wykop_sdk_reloaded-0.6.0-py3-none-any.whl.

File metadata

File hashes

Hashes for wykop_sdk_reloaded-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5258b033387499936e537b9426575147e31a852b8b8eb2a8666b51d9d58feacc
MD5 d02c2c7c6dcb7ea54762c2e38c79d9ce
BLAKE2b-256 fa83b22afe67959dc0f99295c5864a4fdb738ecf1b60823b56420c9626ad5b1d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page