Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/p1c2u/wykop-sdk

Wykop API Python SDK
https://github.com/p1c2u/wykop-sdk

Last synced: 2 months ago
JSON representation

Wykop API Python SDK

Awesome Lists containing this project

README

        

Wykop API Python SDK
====================

.. role:: strike
:class: strike

.. image:: https://badge.fury.io/py/wykop-sdk.png
:target: http://badge.fury.io/py/wykop-sdk

.. image:: https://travis-ci.org/p1c2u/wykop-sdk.svg?branch=master
:target: https://travis-ci.org/p1c2u/wykop-sdk

.. image:: https://img.shields.io/codecov/c/github/p1c2u/wykop-sdk/master.svg?style=flat
:target: https://codecov.io/github/p1c2u/wykop-sdk?branch=master

Biblioteka ta jest implementacją `Wykop API`_ w Python.

.. _Wykop API: http://www.wykop.pl/developers/api/

Przykładowe użycie:

::

import wykop

api = wykop.WykopAPI(klucz_aplikacji, sekret_aplikacji)
profile = api.get_profile("m__b")

Instalacja
-------------------

Zalecana jest instalacja wykop-sdk poprzez pip:

::

$ pip install wykop-sdk

Alternatywnie możesz pobrać kod i zainstalować bezpośrednio z repozytorium:

::

$ pip install -e git+https://github.com/p1c2u/wykop-sdk.git#egg=wykop-sdk

Uwierzytelnienie
-------------------

Aby wykonywać działania jako użytkownik zalogowany przed wykonaniem metody należy się uwierzytenić.

Przykładowe użycie metody wymagającej uwierzytelnienia:

::

import wykop

api = wykop.WykopAPI(klucz_aplikacji, sekret_aplikacji)
api.authenticate(login, klucz_polaczenia)
profile = api.observe_profile("m__b")

API wersja 1
-------------------

Zdefiniowane metody
^^^^^^^^^^^^^^^^^^^

Biblioteka posiada wbudowane metody odpowiednie do zdefiniowanych w Wykop API

+-------------------+--------------------------------+
| Metoda API | Metoda SDK |
+===================+================================+
| **Comments** |
+-------------------+--------------------------------+
| Add | add_comment |
+-------------------+--------------------------------+
| Plus | plus_comment |
+-------------------+--------------------------------+
| Minus | minus_comment |
+-------------------+--------------------------------+
| Edit | edit_comment |
+-------------------+--------------------------------+
| Delete | delete_comment |
+-------------------+--------------------------------+
| **Link** |
+-------------------+--------------------------------+
| Index | get_link |
+-------------------+--------------------------------+
| Dig | dig_link |
+-------------------+--------------------------------+
| Cancel | cancel_link |
+-------------------+--------------------------------+
| Bury | bury_link |
+-------------------+--------------------------------+
| Comments | get_link_comments |
+-------------------+--------------------------------+
| Reports | get_link_reports |
+-------------------+--------------------------------+
| Digs | get_link_digs |
+-------------------+--------------------------------+
| Related | get_link_related |
+-------------------+--------------------------------+
| Buryreasons | get_link_buryreasons |
+-------------------+--------------------------------+
| Observe | observe_link |
+-------------------+--------------------------------+
| Favorite | favorite_link |
+-------------------+--------------------------------+
| **Links** |
+-------------------+--------------------------------+
| Promoted | get_links_promoted |
+-------------------+--------------------------------+
| Upcoming | get_links_upcoming |
+-------------------+--------------------------------+
| **MyWykop** |
+-------------------+--------------------------------+
| Index | get_mywykop |
+-------------------+--------------------------------+
| Tags | get_mywykop_tags |
+-------------------+--------------------------------+
| Users | get_mywykop_users |
+-------------------+--------------------------------+
| Notifications | get_notifications |
+-------------------+--------------------------------+
| NotificationsCount| get_notifications_count |
+-------------------+--------------------------------+
| ReadNotifications | mark_as_read_notifications |
+-------------------+--------------------------------+
| **Popular** |
+-------------------+--------------------------------+
| Promoted | get_popular_promoted |
+-------------------+--------------------------------+
| Upcoming | get_popular_upcoming |
+-------------------+--------------------------------+
| **Profile** |
+-------------------+--------------------------------+
| Index | get_profile |
+-------------------+--------------------------------+
| Added | get_profile_links |
+-------------------+--------------------------------+
| Published | get_profile_published |
+-------------------+--------------------------------+
| Commented | get_profile_commented |
+-------------------+--------------------------------+
| Digged | get_profile_digged |
+-------------------+--------------------------------+
| Buried | get_profile_buried |
+-------------------+--------------------------------+
| Observe | observe_profile |
+-------------------+--------------------------------+
| Unobserve | unobserve_profile |
+-------------------+--------------------------------+
| Followers | get_profile_followers |
+-------------------+--------------------------------+
| Followed | get_profile_followed |
+-------------------+--------------------------------+
| Favorites | get_profile_favorites |
+-------------------+--------------------------------+
| **Search** |
+-------------------+--------------------------------+
| Index | search |
+-------------------+--------------------------------+
| Links | search_links |
+-------------------+--------------------------------+
| Entries | search_entries |
+-------------------+--------------------------------+
| Profiles | search_profiles |
+-------------------+--------------------------------+
| **User** |
+-------------------+--------------------------------+
| Login | user_login |
+-------------------+--------------------------------+
| Favorites | user_favorites |
+-------------------+--------------------------------+
| Observed | user_observed |
+-------------------+--------------------------------+
| **Top** |
+-------------------+--------------------------------+
| Index | get_top |
+-------------------+--------------------------------+
| Date | get_top_date |
+-------------------+--------------------------------+
| **Related** |
+-------------------+--------------------------------+
| Plus | plus_related |
+-------------------+--------------------------------+
| Minus | minus_related |
+-------------------+--------------------------------+
| Add | add_related |
+-------------------+--------------------------------+
| **Entries** |
+-------------------+--------------------------------+
| Index | get_entry |
+-------------------+--------------------------------+
| Add | add_entry |
+-------------------+--------------------------------+
| Edit | edit_entry |
+-------------------+--------------------------------+
| Delete | delete_entry |
+-------------------+--------------------------------+
| AddComment | add_entry_comment |
+-------------------+--------------------------------+
| EditComment | edit_entry_comment |
+-------------------+--------------------------------+
| DeleteComment | delete_entry_comment |
+-------------------+--------------------------------+
| Vote | vote_entry / |
| | vote_entry_comment |
+-------------------+--------------------------------+
| Unvote | unvote_entry / |
| | unvote_entry_comment |
+-------------------+--------------------------------+
| **Rank** |
+-------------------+--------------------------------+
| Index | get_rank |
+-------------------+--------------------------------+
| **Observatory** |
+-------------------+--------------------------------+
| Votes | get_observatory_votes |
+-------------------+--------------------------------+
| Comments | get_observatory_comments |
+-------------------+--------------------------------+
| Entries | get_observatory_entries |
+-------------------+--------------------------------+
| EntriesComments | get_observatory_entres_comments|
+-------------------+--------------------------------+
| **Favorites** |
+-------------------+--------------------------------+
| Index | get_favorites |
+-------------------+--------------------------------+
| Lists | get_favorites_lists |
+-------------------+--------------------------------+
| **Stream** |
+-------------------+--------------------------------+
| Index | get_stream |
+-------------------+--------------------------------+
| Hot | get_stream_hot |
+-------------------+--------------------------------+
| **Tag** |
+-------------------+--------------------------------+
| Index | tag |
+-------------------+--------------------------------+
| **PM** |
+-------------------+--------------------------------+
| ConversationsList | get_conversations_list |
+-------------------+--------------------------------+
| Conversation | get_conversation |
+-------------------+--------------------------------+
| SendMessage | send_message |
+-------------------+--------------------------------+
| DeleteConversation| delete_conversation |
+-------------------+--------------------------------+

Proste żądania
^^^^^^^^^^^^^^^^^^^

Można również skorzystać z podstawowej metody do tworzenia żądań. Przykład z dokumentacji Wykop API będzie przedstawiał się następująco:

::

link = api.request("link", 'index', [54321,], {"appkey": 12345})

gdzie:

+-------------------+-------------------------+
| 'link' | typ zasobu |
+-------------------+-------------------------+
| 'index' | metoda zasobu |
+-------------------+-------------------------+
| [54321,] | lista parametrów metody |
+-------------------+-------------------------+
| {"appkey": 12345} | parametry API |
+-------------------+-------------------------+

Wykop Connect
^^^^^^^^^^^^^^^^^^^

Możliwe jest też łączenie konta użytkownika z aplikacją

Generowanie linku do Wykop Connect

::

url = api.get_connect_url("http://hostname.pl")

Dekodowanie danych Wykop Connect

::

appkey, login, token = api.get_connect_data(encoded_data)

Odpowiedzi
^^^^^^^^^^^^^^^^^^^

Wyróżniamy 3 typy odpowiedzi:

- logiczny, np. metoda observe_profile:
::

>>> print api.observe_profile("m__b")
[True]

- obiekt, np. metoda get_profile:
::

>>> print api.get_profile("m__b")
{'author_group': 5, 'buries': None, 'rank': 274, 'links_published': 41, 'gg': '', 'groups': 2, 'entries': 203, .. }

- lista obiektów, np. metoda get_link_digs
::

>> print api.get_link_digs(12345)
[{'author_group': 2, 'author_sex': 'male', .. }, {'author_group': 2, 'author_sex': 'male', .. }]

Każdy obiekt z odpowiedzi jest typu słownikowego (dict) z możliwością dostępu do właściwości poprzez artybuty:

::

>> profile = api.get_profile("m__b")
>> profile["diggs"]
12155
>> profile.diggs
12155

Filtrowanie odpowiedzi
^^^^^^^^^^^^^^^^^^^^^^
Aby odfiltrować z odpowiedzi kod HTML, należy wywołać klasę z parametrem output='clear'

::

import wykop

api = wykop.WykopAPI(klucz_aplikacji, sekret_aplikacji, output='clear')
api.authenticate(login, klucz_polaczenia)
profile = api.observe_profile("m__b")

API wersja 2
-------------------

Wykop posiada API w wersji 2. Jest to nowa, nieudokumentowana wersja API. Implementacja tej wersji w SDK może się zmieniać.

.. warning::

Uwierzytelnienie działa tylko z kluczami ze wsparciem dla tej wersji API.

Przykładowe użycie:

::

from wykop import WykopAPIv2

api = WykopAPIv2(klucz_aplikacji, sekret_aplikacji)
profile = api.get_profile("m__b")

Zdefiniowane metody
^^^^^^^^^^^^^^^^^^^

API w wersji 2 posiada następujące wbudowane metody.

+-------------------+--------------------------------+
| Metoda API | Metoda SDK |
+-------------------+--------------------------------+
| **Links** |
+-------------------+--------------------------------+
| ? | get_links_promoted |
+-------------------+--------------------------------+
| ? | get_links_upcoming |
+-------------------+--------------------------------+
| ? | get_link_comments |
+-------------------+--------------------------------+
| ? | get_link_related |
+-------------------+--------------------------------+
| ? | get_link_upvoters |
+-------------------+--------------------------------+
| ? | get_link_downvoters |
+-------------------+--------------------------------+
| **MyWykop** |
+-------------------+--------------------------------+
| ? | get_mywykop |
+-------------------+--------------------------------+
| ? | get_mywykop_tags |
+-------------------+--------------------------------+
| ? | get_mywykop_users |
+-------------------+--------------------------------+
| **Notifications** |
+-------------------+--------------------------------+
| ? | get_notifications |
+-------------------+--------------------------------+
| ? | get_notifications_count |
+-------------------+--------------------------------+
| ? | get_hashtags_notifications |
+-------------------+--------------------------------+
| ? | get_hashtags_notifications_cou |
+-------------------+--------------------------------+
| **Profiles** |
+-------------------+--------------------------------+
| ? | get_profile |
+-------------------+--------------------------------+
| ? | observe_profile |
+-------------------+--------------------------------+
| ? | unobserve_profile |
+-------------------+--------------------------------+
| ? | block_profile |
+-------------------+--------------------------------+
| ? | unblock_profile |
+-------------------+--------------------------------+
| **Search** |
+-------------------+--------------------------------+
| ? | search_links |
+-------------------+--------------------------------+
| ? | search_entries |
+-------------------+--------------------------------+
| ? | search_profiles |
+-------------------+--------------------------------+
| **Login** |
+-------------------+--------------------------------+
| ? | user_login |
+-------------------+--------------------------------+
| **Hits** |
+-------------------+--------------------------------+
| ? | get_hits_month |
+-------------------+--------------------------------+
| ? | get_hits_popular |
+-------------------+--------------------------------+
| **Entries** |
+-------------------+--------------------------------+
| ? | get_entry |
+-------------------+--------------------------------+
| ? | get_stream_entries |
+-------------------+--------------------------------+
| ? | get_hot_entries |
+-------------------+--------------------------------+
| **Tag** |
+-------------------+--------------------------------+
| ? | get_tag |
+-------------------+--------------------------------+
| ? | get_tags_observed |
+-------------------+--------------------------------+
| ? | get_tag_entries |
+-------------------+--------------------------------+
| ? | get_tag_links |
+-------------------+--------------------------------+
| **PM** |
+-------------------+--------------------------------+
| ? | get_conversations_list |
+-------------------+--------------------------------+

? = nieudokumentowana metoda

Proste żądania
^^^^^^^^^^^^^^^^^^^

Implementacja API w wersji 2 również posiada podstawową metodę do tworzenia żądań. Na przykład:

::

link = api.request("entries", 'hot', {"period": 12})

gdzie:

+-------------------+-------------------------+
| 'entries' | typ zasobu |
+-------------------+-------------------------+
| 'hot' | metoda zasobu |
+-------------------+-------------------------+
| {"period": 12} | parametry API |
+-------------------+-------------------------+

Zgłaszanie błędów
-----------------

Jeżeli znalazłeś jakieś błędy lub masz inny problem zgłoś go na `bugtracker`_ lub na mirko @tenji :>

.. _bugtracker: https://github.com/p1c2u/wykop-sdk/issues