Типы данных¶
Почти все данные, которые парсит 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, hidden=False, 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, private_profile=False, private_profile_data=False)[исходный код]¶ Информация о броняше.
full=True, только если информация получена со страницы
/profile/username/
.Если private_profile=True, то пользователь скрыл свой профиль настройками приватности и почти вся информация недоступна.
Если private_profile=False, но private_profile_data=True, то недоступна только информация из блока «Активность» и фото.
Словарь
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, utctime=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
— вступление в блог (события выхода из блога на Табуне нет, ага)