Примеры

Все примеры написаны под Python 3. Для Python 2 нужно поменять input на raw_input и перед примерами выполнить:

from __future__ import print_function, unicode_literals

Заголовки последних постов

import time
import tabun_api as api

user = api.User()  # anonymous
posts = user.get_posts("/index/newall/")

for post in posts:
    # посты отсортированы по дате публикации (новые в конце)
    print(time.strftime("%H:%M", post.time), post.author, post.title)

Ну, или с авторизацией

import time
import getpass
import tabun_api as api

username = input("Username: ")
passwd = getpass.getpass("Password: ")

user = api.User(login=username, passwd=passwd)
posts = user.get_posts("/blog/night-ponyville/newall/")

for post in posts:
    print(time.strftime("%H:%M", post.time), post.author, post.title)

Первонах (код не проверялся)

import time
import getpass
import tabun_api as api

username = input("Username: ")
passwd = getpass.getpass("Password: ")
user = api.User(login=username, passwd=passwd)
ok = False

while True:
    posts = user.get_posts("/index/newall/")
    for post in posts:
        if post.blog == "comicsworkshop" and post.title.startswith("ИнтерБРЕДации: "):
            print(user.comment(post.post_id, "Первый"))
            ok = True
            break
    if ok:
        break
    time.sleep(5)

Прямой эфир

Работает на допущении, что дата написания комментария тем больше, чем больше его id (известен один случай, когда это не так).

import time
import tabun_api as api

user = api.User()

max_comment_id = 0
while True:
    try:
        comments = user.get_comments("/comments/")
    except api.TabunError as e:
        print()
        print("Error:", e.message)
        time.sleep(10)
        continue

    for comment_id in sorted(comments.keys()):
        if comment_id > max_comment_id:
            c = comments[comment_id]
            max_comment_id = comment_id
            print()
            print('[{tm}] <{author}> {title}'.format(
                tm=time.strftime("%H:%M:%S", c.time),
                author=c.author,
                title=c.post_title
            ))
            print(api.utils.HTMLFormatter().format(c.body))
    time.sleep(5)

Активность

Выводит не более 20 новых элементов за раз.

import time
import tabun_api as api

def print_act(item):
    # Секунд во времени Табун не предоставляет
    print(time.strftime("[%H:%M]", item.date), item.username, end=' ')
    if item.type == item.POST_ADD:
        print('добавил новый пост "{}" ({}/{})'.format(item.title, item.blog, item.post_id))

    elif item.type == item.COMMENT_ADD:
        print('прокомментировал пост "{}" ({}/{}) ({})'.format(item.title, item.blog, item.post_id, item.comment_id))
        print(' ', item.data)

    elif item.type == item.POST_VOTE:
        print('оценил пост "{}" ({}/{})'.format(item.title, item.blog, item.post_id))

    elif item.type == item.COMMENT_VOTE:
        print('оценил комментарий к посту "{}" ({}/{}) ({})'.format(item.title, item.blog, item.post_id, item.comment_id))

    elif item.type == item.USER_VOTE:
        print('оценил пользователя {}'.format(item.data))

    else:
        print(item.type)

user = api.User()

old_items = []
while 1:
    acts = user.get_activity()[1]
    new_items = []

    for x in acts:
        # активность в порядке добавления, но новые — в начале
        if x in old_items:
            # при удалении постов активность может пропадать, поэтому
            # сравниваем не с последней активностью из предыдущего
            # запроса, а со всеми
            break
        new_items.append(x)
    old_items = acts

    for x in reversed(new_items):
        print_act(x)
    time.sleep(5)

Простейший бот в личке

import time
import tabun_api as api

def parse_command(message):
    if message == "ping":
        return "pong"
    elif message == "time":
        return time.strftime("%Y-%m-%d %H:%M:%S")

user = api.User("guest", "123456")

while True:
    for talk in user.get_talk_list():
        if not talk.unread:
            continue
        for comment in user.get_talk(talk.talk_id).comments.values():
            if not comment.unread:
                continue
            message = api.utils.HTMLFormatter().format(comment.body)
            print('<', message)
            answer = parse_command(message)
            if answer:
                print('>', answer)
                try:
                    user.comment(talk.talk_id, body=answer, reply=comment.comment_id, typ='talk')
                except api.TabunError as exc:
                    print(exc.message)
    time.sleep(10)