Created
July 26, 2013 21:28
-
-
Save davoclavo/6092376 to your computer and use it in GitHub Desktop.
Vine API from Vino with added methods
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# coding: utf-8 | |
import json | |
import logging | |
import requests | |
BASE_URL = "https://api.vineapp.com/" | |
class VineError(Exception): | |
def __init__(self, response): | |
self.code = response["code"] | |
self.message = response["error"] | |
def __str__(self): | |
return str(self.message) | |
class Vine(object): | |
def __init__(self): | |
self._user_id = None | |
self._key = None | |
def login(self, username, password): | |
response = self._call("users/authenticate", data={"username": username, "password": password}) | |
self._user_id = response["data"]["userId"] | |
self._key = response["data"]["key"] | |
# def logout(self): | |
# DELETE https://api.vineapp.com/users/authenticate | |
def me(self): | |
return self._call("users/me")["data"] | |
def get_user_profile(self, id_): | |
return self._call("users/profiles/%s" % id_)["data"] | |
def get_user_timeline(self, id_, page=None, size=None): | |
return self._call("timelines/users/%s" % id_, params={"page": page, "size": size})["data"] | |
def get_tag(self, tag_, page=None, size=None): | |
return self._call("timelines/tags/%s" % tag_, params={"page": page, "size": size})["data"] | |
def get_single_post(self, id_): | |
return self._call("timelines/posts/%s" % id_)["data"] | |
def get_notifications(self): | |
return self._call("users/%s/pendingNotificationsCount" % self._user_id)["data"] | |
def popular(self, page=None, size=None): | |
return self._call("timelines/popular", params={"page": page, "size": size})["data"] | |
def venues(self, venue_id_, page=None, size=None): | |
return self._call("timelines/venues/%s" % venue_id_, params={"page": page, "size": size})["data"] | |
def search_user(self, username_, page=None, size=None): | |
return self._call("users/search/%s" % username_, params={"page": page, "size": size})["data"] | |
def search_tag(self, tag_, page=None, size=None): | |
return self._call("tags/search/%s" % tag_, params={"page": page, "size": size})["data"] | |
def _call(self, call, params=None, data=None): | |
"""Make an API call. Return the parsed response. If login has | |
been called, make an authenticated call. If data is not None, | |
it's a post request. | |
""" | |
url = BASE_URL + call | |
headers = {"User-Agent": "com.vine.iphone/1.0.3 (unknown, iPhone OS 6.0.1, iPhone, Scale/2.000000)", | |
"Accept-Language": "en, sv, fr, de, ja, nl, it, es, pt, pt-PT, da, fi, nb, ko, zh-Hans, zh-Hant, ru, pl, tr, uk, ar, hr, cs, el, he, ro, sk, th, id, ms, en-GB, ca, hu, vi, en-us;q=0.8"} | |
if self._key: | |
headers["vine-session-id"] = self._key | |
if data: | |
r = requests.post(url, params=params, data=data, headers=headers, verify=False) | |
else: | |
r = requests.get(url, params=params, headers=headers, verify=False) | |
try: | |
data = r.json() | |
if data.get("success") is not True: | |
raise VineError(data) | |
return data | |
except: | |
logging.error(r.text) | |
raise |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hello