Tapioca API wrapper
Project description
Tapioca provides an easy way to make explorable python API wrappers. APIs wrapped by Tapioca follow a simple interaction pattern that works uniformelly so developers don’t need to learn how to use a new coding interface/style for each service API.
Concepts
Uniform and explorable wrappers means developers don’t need to read full API and wrapper documentation before starting to play with it.
pip install tapioca-facebook
To better experience Tapioca, we will also use iPython:
pip install ipython
from tapioca_facebook import Facebook
api = Facebook(api_params={
'access_token': '{your_genereated_access_token}'})
If you are using iPython, you can now list available endpoints by typing api. and pressing tab.
In [2]: api.
api.user_likes api.page_blocked api.page_locations
api.page_statuses api.user_applications_developer api.user_friends
api.user_invitable_friends api.user_photos api.user_videos
api.object api.page_conversations api.page_milestones
...
Resources
Those are the available endpoints for the facebook API. As we can see there is one called: user_likes, lets take a closer look.
Type api.user_likes and press enter
In [3]: api.user_likes
Out [3]: {
'resource': '{id}/likes',
'docs': 'https://developers.facebook.com/docs/graph-api/reference/v2.2/user/likes'
}
As we can see, user_likes resource requires an id to be passed to the url. Lets do it:
api.user_likes(url_params={'id': 'me'})
Fetching data
To request current user likes, its easy:
likes = api.user_likes(url_params={'id': 'me'}).get()
To print the returned data do:
In [9]: likes().data()
OUT [9]: {
'data': [...],
'paging': {...}
}
Exploring data
We can also expore the returned data using the iPython tab auto-complete
In [9]: likes.
likes.data likes.paging
Executor object
Whenever you use brackets, Tapioca will return to you an Executor object. You will use the executor every time you want to perform an action over data you possess. An example was when we filled url params for the user_likes resource, and then used the get method to fetch data.
Tapioca provides many methods, here are they:
get()/post()
Tapioca uses requests library to make requests, so http methods will work just the same.
likes = api.user_likes(url_params={'id': 'me'}).get()
data()
Use data to return data contained in the Tapioca object
likes = api.user_likes(url_params={'id': 'me'}).get()
# this will print only the array contained in data field of the response
print(likes.data().data())
[...]
iterator
Many APIs use paging concept to provide large amounts of data. This way data is returned in multiple requests avoing a single long request. Tapioca is buit to provide easy way to access paged data using iterators:
likes = api.user_likes(url_params={'id': 'me'}).get()
for like in likes:
print(like.id().data())
This will keep fetching user likes until there are none left.
open_docs()
If you are accessing a resource, you can call open_docs to open resource documentation in browser:
api.user_likes().open_docs()
open_in_browser()
Whenever the data contained in Tapioca object is a URL, you can open it in browser by using the open_in_browser method.
Tapioca comes in many flavours
Send a pull request to add new ones to the list.
Wrapping an API with Tapioca
This is all the code you need to build the Facebook Graph API wrapper you just played with:
# source here: https://github.com/vintasoftware/tapioca-facebook/blob/master/tapioca_facebook/tapioca_facebook.py
from tapioca import (TapiocaClient, TapiocaAdapter)
from requests_oauthlib import OAuth2
from resource_mapping import RESOURCE_MAPPING
class FacebookClientAdapter(TapiocaAdapter):
api_root = 'https://graph.facebook.com'
resource_mapping = RESOURCE_MAPPING
def get_request_kwargs(self, api_params):
client_id = api_params.get('client_id')
return {
'auth': OAuth2(client_id,
token={
'access_token': api_params.get('access_token'),
'token_type': 'Bearer'})
}
def get_iterator_list(self, response_data):
return response_data['data']
def get_iterator_next_request_kwargs(self,
iterator_request_kwargs, response_data):
paging = response_data.get('paging')
if not paging:
return
url = paging.get('next')
if url:
return {'url': url}
Facebook = TapiocaClient(FacebookClientAdapter())
Everything else is what we call resource_mapping and its merely documentation. You can take a look here.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file tapioca-wrapper-0.0.6.tar.gz
.
File metadata
- Download URL: tapioca-wrapper-0.0.6.tar.gz
- Upload date:
- Size: 5.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 64ddbcaec33a0c8969a55cfa75de69c39ded134176a71eb3afea8ed4dcc7e752 |
|
MD5 | 1df92d9226d394edb444fc7010708183 |
|
BLAKE2b-256 | f3fa556256d52d3af590575b5702871e22b9708a15949789fc077f7f6e585715 |