Типы данных

Почти все данные, которые парсит tabun_api, помещаются в соответствующие классы. Они определны в модуле tabun_api.types, но можно импортировать и напрямую из tabun_api.

У всех этих классов названия и содержимое полей соответствуют аргументам конструктора.

Для получения доступа ко времени поста или комментария используйте атрибут utctime — это объект datetime.datetime, хранящий время в UTC (без установленного tzinfo для совместимости с Python 2). Атрибут time хранит time.struct_time по времени сервера и не рекомендуется к использованию: он оставлен для обратной совместимости и может быть удалён в будущем.

Данные, которые относятся только к текущему пользователю (его оценки, статус добавления в избранное, статус подписки и т.п.) хранятся в словаре context. В нём же хранится адрес сайта, с которого были скачаны данные.

Для объектов, содержащих словарь context, чаще всего доступны следующие значения:

  • context['http_host'] — хост, с которого был получен объект
  • context['url'] — ссылка, по которой был получен объект
  • context['username'] — имя пользователя, если он был авторизован при получении объекта

Всё из этого может отсутствовать, поэтому получать их лучше методом get словаря: obj.context.get('username'). Однако отсутствие http_host нежелательно: без него не работает свойство url, присутствующее в некоторых классах.

class tabun_api.types.Post(time, blog, post_id, author, title, draft, vote_count, vote_total, body, tags, comments_count=None, comments_new_count=None, short=False, private=False, blog_name=None, poll=None, favourite=0, favourited=None, download=None, utctime=None, raw_body=None, cut_text=None, context=None)[исходный код]

Пост.

Поля comments_new_count и favourited устарели; используйте контекст вместо них.

Дополнительные значения контекста:

  • can_comment (True/False) — можно ли отправить комментарий
  • can_edit (True/False) — можно ли редактировать пост
  • can_delete — можно ли удалить пост
  • can_vote — можно ли голосовать за пост
  • vote_value (-1/0/1/None) — голос текущего пользователя
  • subscribed_to_comments (True/False) — подписан ли текущий пользователь на новые комментарии
  • unread_comments_count (int) — число новых комментариев (для постов из списка постов, иначе ноль)
  • favourited (True/False) — добавлен ли пост в избранное
  • favourite_tags (list) — теги избранного поста
  • can_save_favourite_tags (True/False) — можно ли редактировать теги избранного поста (обычно совпадает с favourited)
hashsum(fields=None, debug=False)[исходный код]

Считает md5-хэш от конкатенации полей поста (в utf-8), разделённых нулевым байтом.

Поддерживаются только следующие поля: post_id, time (в UTC, в формате %Y-%m-%dT%H:%M:%SZ), draft, author, blog, title, cut_text, body (как необработанный html), tags.

По умолчанию используются все они. Если требуется одинаковость хэшей независимо от версии tabun_api, рекомендуется прописать список полей явно.

Аргумент fields — список полей для использования (или любая другая коллекция, для которой работает проверка if field in fields).

Порядок и повторения полей в этом списке значения не имеют. Неизвестные поля игнорируются.

При debug=True вместо хэша возвращается сырой список, используемый перед хэшированием, что позволит проверить правильность выбора полей.

Возможные применения хэша — отслеживание изменений поста (но не мета-информации вроде названия блога и числа голосов) и идентификация разных версий постов.

class tabun_api.types.Comment(time, blog, post_id, comment_id, author, body, vote_total, parent_id=None, post_title=None, unread=False, deleted=False, favourite=None, favourited=None, utctime=None, raw_body=None, context=None, vote=None)[исходный код]

Коммент. Возможно, удалённый, поэтому следите, чтобы значения не были None!

Поле favourited устарело; используйте comment.context.get('favourited') вместо него.

Поле vote переименовано в vote_total.

Дополнительные значения контекста:

  • can_vote (True/False) — можно ли голосовать за комментарий
  • vote_value (-1/1/None) — голос текущего пользователя
  • favourited (True/False) — добавлен ли комментарий в избранное
hashsum(fields=None, debug=False)[исходный код]

Считает md5-хэш от конкатенации полей коммента (в utf-8), разделённых нулевым байтом.

Поддерживаются только следующие поля: comment_id, time (в UTC, в формате %Y-%m-%dT%H:%M:%SZ), author, body (как необработанный html).

По умолчанию используются все они. Если требуется одинаковость хэшей независимо от версии tabun_api, рекомендуется прописать список полей явно.

Аргумент fields — список полей для использования (или любая другая коллекция, для которой работает проверка if field in fields).

Порядок и повторения полей в этом списке значения не имеют. Неизвестные поля игнорируются.

При debug=True вместо хэша возвращается сырой список, используемый перед хэшированием, что позволит проверить правильность выбора полей.

class tabun_api.types.Download(type, post_id, filename, count, filesize=None)[исходный код]

Прикрепленный к посту файл (в новом Табуне) или ссылка (в старом Табуне).

class tabun_api.types.Blog(blog_id, blog, name, creator, readers=0, rating=0.0, status=0, description=None, admins=None, moderators=None, vote_count=-1, posts_count=-1, created=None, avatar=None, raw_description=None, context=None, closed=None)[исходный код]

Блог.

class tabun_api.types.StreamItem(blog, blog_title, title, author, comment_id, comments_count)[исходный код]

Элемент «Прямого эфира».

class tabun_api.types.UserInfo(user_id, username, realname, skill, rating, userpic=None, foto=None, gender=None, birthday=None, registered=None, last_activity=None, description=None, blogs=None, rating_vote_count=None, contacts=None, counts=None, full=False, context=None, raw_description=None)[исходный код]

Информация о броняше.

full=True, только если информация получена со страницы /profile/username/.

Словарь counts может быть пустым или содержать None или, если доступно, содержать следующие значения:

  • publications — число публикаций, учитываются посты, комментарии и (для своего профиля) заметки;
  • posts — число опубликованных постов (со страницы profile/username/created/topics или comments/);
  • comments — число опубликованных комментариев (со страницы profile/username/created/topics или comments или notes/);
  • notes — число заметок к пользователям (со страницы profile/username/created/topics или comments или notes/);
  • favourites — число добавлений в избранное;
  • favourites_posts — число постов в избранном (со страницы profile/username/favourites/topics или comments/);
  • favourites_comments — число комментариев в избранном (со страницы profile/username/favourites/topics или comments/);
  • friends — число друзей.

Дополнительные значения контекста:

  • note (строка или None) — заметка, оставленная текущим пользователем
  • can_edit_note (True/False/None) — можно ли редактировать заметку (определяется по наличию формы на странице /profile/foo/)
  • can_vote (True/False/None) — можно ли голосовать за пользователя (изменить рейтинг) (из-за багов лайвстрита корректно работает только на /profile/foo/)
  • vote_value (1/-1/None) — плюс (1), минус (-1) или голос ещё не оставлен (None) (из-за багов лайвстрита корректно работает только на /profile/foo/)
class tabun_api.types.Poll(total, notvoted, items)[исходный код]

Опрос. Список items содержит кортежи (название ответа, процент проголосовавших, число проголосовавших).

class tabun_api.types.TalkItem(talk_id, recipients, unread, title, date, body=None, author=None, comments=None, utctime=None, recipients_inactive=(), comments_count=0, raw_body=None, context=None)[исходный код]

Личное сообщение. При чтении списка сообщений некоторые поля могут быть None. Учтите, что для нового письма unread = True и context[„unread_comments_count“] = 0.

recipients_inactive — подмножество recipients, содержащее имена пользователей, удаливших свою копию сообщения.

Дополнительные параметры контекста:

  • favourited (True/False): добавлено ли письмо в избранное
  • last_is_incoming (True/False): является ли последний комментарий входящим (True) или исходящим (False) (только для списка писем)
  • unread_comments_count: число непрочитанных комментариев в письме (только для списка писем)
class tabun_api.types.ActivityItem(type, date, post_id=None, comment_id=None, blog=None, username=None, title=None, data=None, id=None)[исходный код]

Событие со страницы /stream/.

Типы события (obj.type):

  • ActivityItem.WALL_ADD — добавление записи на стену пользователя (на Табуне отсутствует)
  • ActivityItem.POST_ADD — добавление поста
  • ActivityItem.COMMENT_ADD — добавление комментария
  • ActivityItem.BLOG_ADD — создание блога
  • ActivityItem.POST_VOTE — голосование за пост
  • ActivityItem.COMMENT_VOTE — голосование за комментарий
  • ActivityItem.BLOG_VOTE — голосование за блог
  • ActivityItem.USER_VOTE — голосование за пользователя (оценивающий в поле username, оцениваемый — в data)
  • ActivityItem.FRIEND_ADD — добавление друга (добавляющий в поле username, добавляемый — в data)
  • ActivityItem.JOIN_BLOG — вступление в блог (события выхода из блога на Табуне нет, ага)