Модуль tabun_api

Переменные

tabun_api.http_host = 'https://tabun.everypony.ru'

Адрес Табуна. Именно на указанный здесь адрес направляются запросы.

tabun_api.halfclosed = ('shipping', 'RPG', 'borderline', 'ponymanie', 'erpg', 'tearsfromthemoon', 'abode_Clan', 'knifemanes', 'zootopia')

Список полузакрытых блогов.

tabun_api.http_headers = {'connection': 'close', 'user-agent': 'tabun_api/0.7.9 (Linux x86_64 6.8.2-arch1-1) Python/3.11.8 CPython/3.11.8 urllib/3.11'}

Заголовки для HTTP-запросов. Возможно, стоит менять user-agent.

tabun_api.post_url_regex = re.compile('/blog/(([A-z0-9_\\-\\.]{1,})/)?([0-9]{1,}).html')

Регулярка для парсинга ссылки на пост.

tabun_api.post_file_regex = re.compile('^Скачать \\"(.+)" \\(([0-9]*(\\.[0-9]*)?) (Кб|Мб)\\)$')

Регулярка для парсинга прикреплённых файлов.

Самое главное тут: класс User

class tabun_api.User(login=None, passwd=None, session_id=None, security_ls_key=None, key=None, proxy=None, http_host=None, session_cookie_name='TABUNSESSIONID', avoid_cf=None, ssl_params=None, phpsessid=None)[исходный код]

Через божественные объекты класса User осуществляется всё взаимодействие с Табуном. Почти все методы могут кидаться исключением TabunResultError с текстом ошибки (который на сайте обычно показывается во всплывашке в углу). Плюс к этому может выкидываться TabunError при ошибках связи и других подобных нештатных событиях.

Допустимые комбинации параметров (в квадратных скобках опциональные):

  • login + passwd [ + session_id]
  • session_id [+ key] — без куки key разлогинивает через некоторое время
  • login + session_id + security_ls_key [+ key] (с такой комбинацией конструктор отработает без запроса к серверу)
  • без параметров (анонимус)

Если у метода есть параметр raw_data, то через него можно передать код страницы, чтобы избежать лишнего запроса к Табуну. Если есть параметр url, то при его указании открывается именно указанный URL вместо формирования стандартного с помощью других параметров метода.

session_id — печенька (cookie), по которой идентифицируется пользователь (на самом Табуне называется TABUNSESSIONID).

security_ls_key — секретный ключ движка LiveStreet для отправки POST-запросов (CSRF-токен).

key - печенька неизвестного мне назначения.

Можно не париться с ними, их автоматически пришлёт сервер во время инициализации объекта. А можно, например, не авторизоваться по логину и паролю, а выдрать из браузера печеньку TABUNSESSIONID, скормить в аргумент session_id и авторизоваться через неё.

С помощью аргумента proxy можно задать используемый прокси-сервер. Это URL вида proto://username:password@hostname:port. Поддерживаются протоколы socks4, socks5 и http. Имя пользователя и пароль не обязательны, порт для SOCKS-прокси по умолчанию 1080, так что адрес можно записать в кратком виде например так: socks5://myserver.com

Вместо передачи параметра можно установить переменную окружения TABUN_API_PROXY=socks5://myserver.com — конструктор её подхватит. Если нужно наоборот проигнорировать установленный TABUN_API_PROXY, пропишите в аргументе proxy пустую строку (не None).

По умолчанию все запросы направляются по адресу https://tabun.everypony.ru. Если нужно парсить какой-то другой сайт (например, транк или локально запущенную копию Табуна), можно указать нужный адрес в опции http_host.

Если нужно добавить или переопределить какие-то HTTP-заголовки для конкретного объекта, можно запихнуть всё нужное в словарь override_headers. При этом Cookie, Content-Type, X-Requested-With, Referer или ещё что-нибудь в любом случае затираются, если они нужны для отправки запроса (например, формы с созданием поста). Для установки дополнительных Cookie можно воспользоваться атрибутом extra_cookies. Названия заголовков не чувствительны к регистру.

Иногда CloudFlare внезапно хочет узнать, что клиент является нормальным браузером, и вместо Табуна присылает JavaScript-задачку. Здесь она автоматически решается при помощи Js2Py, если он установлен (pip install Js2Py). Вы можете прописать в конструкторе avoid_cf=False, чтобы отключить решение задачки (в таком случае будут выпадать ошибки 503) или avoid_cf=True, и в таком случае будет выкидываться исключение ImportError при отсутствующем Js2Py. Обход CloudFlare работает только при отправке запросов через методы urlopen() или urlread().

В ssl_params можно передать дополнительный параметр с настройками SSL. На данный момент параметр всего один — verify_mode:

  • skip_all — не проверять SSL-сертификаты серверов вообще
  • skip_current_host — не проверять SSL-сертификат только того сервера, который прописан в http_host
  • любое другое значение — проверять все SSL-сертификаты

У класса также есть следующие поля:

  • username — имя пользователя или None
  • talk_unread — число непрочитанных личных сообщений (обновляется после update_userinfo)
  • skill — силушка (после update_userinfo)
  • rating — кармушка (после update_userinfo)
  • timeout — таймаут ожидания ответа от сервера (для функции urlopen, по умолчанию 20)
  • session_id, security_ls_key, key — ну вы поняли
  • session_cookie_name — название печеньки, в которую положить session_id (по умолчанию TABUNSESSIONID)
add_poll(blog_id, title, choices, body, tags, *args, **kwargs)[исходный код]

Создает опрос и возвращает имя блога с номером поста. Может кидаться исключением TabunResultError при невалидном посте.

Параметры:
  • blog_id (int) – ID блога, в который добавляется опрос
  • title (строка) – заголовок создаваемого поста (должен содержать сам вопрос)
  • choices (коллекция строк) – варианты ответов (не более 20)
  • body (строка) – текст поста
  • tags (строка или коллекция строк) – теги поста
  • forbid_comment (bool) – закрыть (True) или открыть (False) написание комментариев
  • draft (bool) – если True, то создание в черновиках вместо публикации
  • check_if_error (bool) – проверяет наличие поста по заголовку даже в случае ошибки (если, например, таймаут или 404, но пост, как иногда бывает, добавляется)
Результат:

кортеж (blog, post_id) или (None, None) при неудаче

add_post(blog_id, title, body, tags, *args, **kwargs)[исходный код]

Отправляет пост и возвращает имя блога с номером поста. Может кидаться исключением TabunResultError при невалидном посте.

Параметры:
  • blog_id (int) – ID блога, в который добавляется пост
  • title (строка) – заголовок создаваемого поста
  • body (строка) – текст поста
  • tags (строка или коллекция строк) – теги поста
  • forbid_comment (bool) – закрыть (True) или открыть (False) написание комментариев
  • draft (bool) – если True, то создание в черновиках вместо публикации
  • check_if_error (bool) – проверяет наличие поста по заголовку даже в случае ошибки (если, например, таймаут или 404, но пост, как иногда бывает, добавляется)
Результат:

кортеж (blog, post_id) или (None, None) при неудаче

add_talk(talk_users, title, body)[исходный код]

Отправляет новое личное сообщение пользователям.

Параметры:
  • talk_users (строка или коллекция строк) – имена пользователей, для которых создаётся сообщение (если строка, то имена через запятую)
  • title (строка) – заголовок сообщения
  • body (строка) – текст сообщения
Результат:

ID созданного личного сообщения

Тип результата:

int

ajax(url, fields=None, files=(), headers=None, throw_if_error=True)[исходный код]

Отправляет ajax-запрос и возвращает распарсенный json-ответ. Или кидается исключением TabunResultError в случае ошибки.

Параметры:
  • url (строка или Request) – ссылка, на которую отправляется запрос, или сам объект Request
  • fields (коллекция кортежей (название, имя файла, значение)) – простые поля запроса
  • fields – файлы запроса (MIME-тип будет выбран по расширению)
  • headers (кортежи из двух строк/bytes или словарь) – HTTP-заголовки (повторяться не могут)
  • throw_if_error (bool) – выкидывать ли TabunResultError, если придёт ошибка
Тип результата:

dict

Исключение:

TabunResultError – если сервер вернёт непустой bStateError при throw_if_error=True

build_request(url, data=None, headers=None, with_cookies=True)[исходный код]

Собирает и возвращает объект Request. Используется в методе urlopen().

check_login()[исходный код]

Генерирует исключение, если нет session_id или security_ls_key.

comment(target_id=None, body=None, reply=0, typ='blog', post_id=None)[исходный код]

Отправляет коммент и возвращает его номер.

Параметры:
  • target_id (int) – ID поста или лички, куда отправляется коммент
  • body (строка) – текст комментария
  • reply (int) – ID комментария, на который отправляется ответ (0 — не является ответом)
  • typ (строка) – blog — пост, talk — личное сообщение
Результат:

ID созданного комментария

Тип результата:

int

create_blog(title, url, description, rating_limit=0, status=0, closed=None)[исходный код]

Создаёт блог и возвращает его url-имя или None в случае неудачи.

Параметры:
  • title (строка) – заголовок нового блога
  • url (строка) – url-имя блога (на латинице без пробелов)
  • description (строка) – описание блога (допустим HTML-код)
  • rating_limit (int) – минимальный рейтинг пользователя, при котором можно писать в блог
  • status (int) – 0 - открытый блог, 1 - закрытый
Тип результата:

строка или None

delete_blog(blog_id)[исходный код]

Удаляет блог.

Параметры:blog_id (int) – ID удалямого блога
delete_post(post_id)[исходный код]

Удаляет пост.

Параметры:post_id (int) – ID удаляемого поста
delete_talk(talk_id)[исходный код]

Удаляет личное сообщение.

Параметры:talk_id (int) – ID удаляемого письма
edit_blog(blog_id, title, description, rating_limit=0, status=0, closed=False)[исходный код]

Редактирует блог и возвращает его url-имя или None в случае неудачи.

Параметры:
  • blog_id (int) – ID блога, который редактируется
  • title (строка) – заголовок блога
  • description (строка) – описание блога (допустим HTML-код)
  • rating_limit (int) – минимальный рейтинг пользователя, при котором можно писать в блог
  • status (int) – 0 - открытый блог, 1 - закрытый
Тип результата:

строка или None

edit_comment(comment_id, body, set_lock=False)[исходный код]

Редактирует комментарий и возвращает кортеж из трёх строк: новый (или старый, если изменений нет) html-код комментария, сообщение с информацией для пользователя и некий notice. В исключении TabunResultError в словаре data доступно поле newText, тоже содержащее тело комментария даже в случае ошибки.

Параметры:
  • comment_id (int) – ID комментария, который редактируем
  • body (строка) – новый текст комментария
  • set_lock (bool) – заблокировать дальнейшее изменение
Тип результата:

(строка, строка или None, строка или None)

edit_post(post_id, blog_id, title, body, tags, forbid_comment=False, draft=False, check_if_error=False)[исходный код]

Редактирует пост и возвращает его блог и номер. Может кидаться исключением TabunResultError при невалидном посте.

Параметры:
  • post_id (int) – ID редактируемого поста
  • blog_id (int) – ID блога, в который поместить пост
  • title (строка) – заголовок поста
  • body (строка) – текст поста
  • tags (строка или коллекция строк) – теги поста
  • forbid_comment (bool) – закрыть (True) или открыть (False) написание комментариев
  • draft (bool) – перемещение в черновики (True) или публикация из черновиков (False)
  • check_if_error (bool) – проверяет наличие поста по заголовку даже в случае ошибки (если, например, таймаут или 404, но пост, как иногда бывает, добавляется). Учтите, что в отличие от add_post здесь при проверке будет загружен сам пост, что может привести к слёту подсветки новых комментариев
Результат:

кортеж (blog, post_id) или (None, None) при неудаче

favourite_comment(comment_id, type=True)[исходный код]

Добавляет (type=True) коммент в избранное или убирает (type=False) оттуда. Возвращает новое число пользователей, добавивших коммент в избранное.

favourite_talk(talk_id, type=True)[исходный код]

Добавляет (type=True) личное сообщение в избранное или убирает (type=False) оттуда. Возвращает новое состояние (1/0).

favourite_topic(post_id, type=True)[исходный код]

Добавляет (type=True) пост в избранное или убирает (type=False) оттуда. Возвращает новое число пользователей, добавивших пост в избранное.

get_activity(url='/stream/all/', raw_data=None)[исходный код]

Возвращает кортеж из двух элементов: номер самого старого события в списке и собственно список последних событий.

get_blog(blog, raw_data=None)[исходный код]

Возвращает информацию о блоге. Функция не доделана.

get_blogs_list(page=1, order_by='blog_rating', order_way='desc', url=None)[исходный код]

Возвращает список объектов Blog.

get_comments(url='/comments/', raw_data=None)[исходный код]

Парсит комменты со страницы по указанной ссылке. Допустимы как страницы постов, так и страницы ленты комментов. Но из ленты комментов доступны не все данные context.

Параметры:
  • url (строка) – ссылка на страницу, с которой достать комменты
  • raw_data (bytes) – код страницы (чтобы не скачивать его по ссылке)
Тип результата:

dict {id: Comment, …}

get_comments_from(target_id=None, comment_id=0, typ='blog', post_id=None)[исходный код]

Возвращает словарь комментариев к посту или личке c id больше чем comment_id. На сайте используется для подгрузки новых комментариев (ajaxresponsecomment).

Параметры:
  • target_id (int) – ID поста или личного сообщения, с которого загружать комментарии
  • comment_id (int) – ID комментария, начиная с которого (но не включая его самого) запросить комментарии
  • typblog — пост, talk — личное сообщение
Тип результата:

dict {id: Comment, …}

get_editable_blog(blog_id, raw_data=None)[исходный код]

Возвращает заголовок блога, URL, тип (True - закрытый, False - открытый), описание и ограничение рейтинга.

Параметры:
  • blog_id (int) – ID блога (должен быть доступ на редактирование)
  • raw_data (bytes) – код страницы (чтобы не скачивать его)
Тип результата:

(строка, строка, bool, строка, float)

get_editable_post(post_id, raw_data=None)[исходный код]

Возвращает blog_id, заголовок, исходный код поста, список тегов и галочку закрытия комментариев (True/False).

Параметры:
  • post_id (int) – ID поста (должен быть доступ на редактирование)
  • raw_data (bytes) – код страницы (чтобы не скачивать его)
Тип результата:

(int, строка, строка, список строк, bool)

get_favourited_talk_list(page=1, raw_data=None)[исходный код]

Возвращает список объектов TalkItem с избранными личными сообщениями.

get_main_context(raw_data, url=None)[исходный код]

Парсит основные параметры контекста со страницы Табуна.

Возвращает что-то вроде такого:

{
    'http_host': 'https://tabun.everypony.ru',
    'url': 'https://tabun.everypony.ru/blog/2.html',
    'username': 'Orhideous'
}
Параметры:
  • raw_data (bytes) – исходный код страницы
  • url (строка или None) – переопределение URL контекста при необходимости
Тип результата:

dict

get_more_activity(last_id=2147483647)[исходный код]

Возвращает список событий старее данного id.

get_notes(page=1, url=None, raw_data=None)[исходный код]

Получает заметки, установленные текущим пользователем — список из словарей с ключами username, note и date.

Параметры:
  • page (int) – страница
  • url (строка) – ссылка на страницу, с которой достать заметки (при наличии page игнорируется)
  • raw_data (bytes) – код страницы (чтобы не скачивать его по ссылке)
get_pagination(raw_data)[исходный код]

Возвращает со страницы номер текущей страницы и список с номерами страниц и текстами ссылок (кортеж из номера и строки), которые содержатся в элементе с пагинацией (<div class="pagination">). Соответственно, первый элемент списка — номер первой страницы, последний — последней страницы. Номера могут повторяться, если так в коде страницы. Если пагинаций ноль или больше одного, возвращается (None, None).

Параметры:raw_data (bytes) – код страницы
Тип результата:(int, list)
get_people_list(page=1, order_by='user_rating', order_way='desc', url=None, raw_data=None)[исходный код]

Загружает список пользователей со страницы /people/.

Параметры:
  • page (int) – страница
  • order_by (строка) – сортировка (user_rating, user_skill, user_login или user_id)
  • order_way (строка) – сортировка по возрастанию (asc) или убыванию (desc)
  • url (строка) – ссылка, с которых скачать пользователей (если указать, игнорируются все предыдущие параметры)
Тип результата:

список из UserInfo

get_post(post_id, blog=None, raw_data=None)[исходный код]

Возвращает пост по номеру.

Рекомендуется указать url-имя блога, чтобы избежать перенаправления и лишнего запроса.

Если поста нет - кидается исключением TabunError("No post"). В случае проблем с парсингом может вернуть None.

Также, в отличие от get_posts(), добавляет can_comment в контекст.

Параметры:
  • post_id (int) – ID скачиваемого поста
  • blog (строка) – url-имя блога (опционально, для оптимизации)
  • raw_data (bytes) – код страницы (чтобы не скачивать его)
Тип результата:

Post или None

get_post_and_comments(post_id, blog=None, raw_data=None)[исходный код]

Возвращает пост и словарь комментариев. По сути просто вызывает метод get_post() и get_comments().

Параметры:
  • post_id (int) – ID скачиваемого поста
  • blog – url-имя блога (опционально, для оптимизации)
  • raw_data (bytes) – код страницы (чтобы не скачивать его)
Результат:

(Post, {id: Comment, ...})

Тип результата:

tuple

get_posts(url='/index/newall/', raw_data=None)[исходный код]

Возвращает список постов со страницы или RSS. Если постов нет — кидает исключение TabunError(«No post»).

Сортирует в порядке, обратном порядку на странице (т.е. на странице новые посты вверху, а в возвращаемом списке новые посты в его конце).

Параметры:
  • url (строка) – ссылка на страницу, с которой достать посты
  • raw_data (bytes) – код страницы (чтобы не скачивать его по ссылке)
Тип результата:

список объектов Post

get_profile(username=None, url=None, raw_data=None)[исходный код]

Получает информацию об указанном пользователе.

В raw_data можно указать не только страницу с профилем пользователя, но также список публикаций или комментариев и т.п. — в таком случае будет получена частичная информация, доступная на этих страницах.

Параметры:
  • username (строка) – имя пользователя
  • url (строка) – ссылка на страницу, с которой парсить информацию
  • raw_data (bytes) – код страницы (чтобы не скачивать его)
Тип результата:

UserInfo

get_short_blogs_list(raw_data=None)[исходный код]

Возвращает пустой список. После обновления Табуна не работает, функция оставлена для обратной совместимости.

get_stream_comments()[исходный код]

Возвращает «Прямой эфир» - объекты StreamItem().

get_stream_topics()[исходный код]

Возвращает список последних постов (без самого содержимого постов, только автор, дата, заголовки и число комментариев).

get_talk(talk_id, raw_data=None)[исходный код]

Возвращает объект TalkItem беседы с переданным номером.

get_talk_list(page=1, raw_data=None)[исходный код]

Возвращает список объектов TalkItem с личными сообщениями.

invite(blog_id, users=None, username=None)[исходный код]

Отправляет инвайт в блог с указанным номером указанному пользователю (или пользователям, если указать несколько через запятую).

Возвращает словарь, который содержит пары юзернейм-текст ошибки в случае, если кому-то инвайт не отправился. Если всё хорошо, то словарь пустой.

Параметры:
  • blog_id (int) – ID блога, инвайты для которого рассылаются
  • users (строка (с никами через запятую) или коллекция строк) – пользователи, которым рассылаются инвайты
Тип результата:

dict

login(login, password, return_path=None, remember=True)[исходный код]

Логинится и записывает печеньку key в случае успеха. Параметр return_path нафиг не нужен, remember - галочка «Запомнить меня».

poll_answer(post_id, answer=-1)[исходный код]

Проголосовать в опросе. -1 - воздержаться.

Параметры:
  • post_id (int) – ID поста с опросом, в котором голосуем
  • answer (int) – порядковый номер ответа (отсчёт с нуля)
Результат:

обновлённые данные опроса

Тип результата:

Poll

preview_comment(body, fix=False, save=False)[исходный код]

Возвращает HTML-код предпросмотра комментария.

Параметры:
  • body (строка) – текст комментария
  • fix (bool) – если False, то предпросмотр для создания комментария, если True, то для редактирования
  • save (bool) – неизвестно
Тип результата:

строка

preview_post(blog_id, title, body, tags)[исходный код]

Возвращает HTML-код предпросмотра поста (сам пост плюс мусор типа заголовка «Предпросмотр»).

Параметры:
  • blog_id (int) – ID блога, в который добавляется пост
  • title (строка) – заголовок создаваемого поста
  • body (строка) – текст поста
  • tags (строка или коллекция строк) – теги поста
Тип результата:

строка

remove_note(user_id)[исходный код]

Удаляет заметку у пользователя.

Параметры:user_id (int) – ID пользователя, у которого удаляем заметку
saferead(resp)[исходный код]

Вызывает функцию read у переданного объекта с перехватом ошибок ввода-вывода и выкидыванием TabunError вместо них (оригинальное исключение может быть доступно через поле exc). Также вызывает метод close при его наличии.

save_favourite_tags(target_id, tags, target_type='topic')[исходный код]

Редактирует теги избранного поста и возвращает новый их список (элементы — словари с ключами tag и url).

Параметры:
  • target_id (int) – ID поста
  • tags (строка или коллекция строк) – новые теги (старые будут удалены)
  • target_type (строка) – неизвестно
Тип результата:

список словарей

save_note(user_id, note)[исходный код]

Меняет заметку у пользователя.

Параметры:
  • user_id (int) – ID пользователя, которому пишем заметку
  • note (строка) – Собственно заметка
Результат:

установленная заметка (с учётом фильтрации html-тегов)

Тип результата:

строка

send_form(url, fields=(), files=(), headers=None, redir=True)[исходный код]

Формирует multipart/form-data запрос и отправляет его через метод urlopen() с аргументами по умолчанию.

Значения полей и файлов могут быть строками (закодируются в utf-8), bytes или числами (будут преобразованы в строку).

Параметры:
  • url (строка или Request) – ссылка, на которую отправляется запрос, или сам объект Request
  • fields (коллекция кортежей (название, имя файла, значение)) – простые поля запроса
  • fields – файлы запроса (MIME-тип будет выбран по расширению)
  • headers (кортежи из двух строк/bytes или словарь) – HTTP-заголовки (повторяться не могут)
  • redir (bool) – следовать ли по перенаправлениям (3xx)
Тип результата:

urllib.addinfourl / urllib.response.addinfourl

send_form_and_read(url, fields=(), files=(), headers=None, redir=True)[исходный код]

Аналогично send_form(), но сразу возвращает тело ответа (bytes).

send_request(request, redir=True, nowait=False, timeout=None)[исходный код]

Отправляет запрос (строку со ссылкой или объект Request). Возвращает результат вызова urllib.urlopen (объект urllib.addinfourl). Используется в методе urlopen. Если установлен query_interval, то метод может сделать паузу перед запросом для соблюдения интервала. Таймаут на эту паузу не влияет.

sleep_func()

sleep(seconds)

Delay execution for a given number of seconds. The argument may be a floating point number for subsecond precision.

subscribe_to_new_comments(post_id, subscribed, mail=None)[исходный код]

Меняет статус подписки на новые комментарии у поста.

Параметры:
  • post_id (int) – ID поста
  • subscribed (bool) – True — подписаться, False — отписаться
  • mail (строка) – неизвестно
Тип результата:

None

toggle_subscription_to_blog(blog_id)[исходный код]

Подписывается на блог/отписывается от блога и возвращает новое состояние: True - подписан, False - не подписан.

Параметры:blog_id (int) – ID блога
Тип результата:bool
update_security_ls_key(raw_data)[исходный код]

Выдирает security_ls_key из страницы. Вызывается из update_userinfo.

update_userinfo(raw_data)[исходный код]

Парсит security_ls_key, имя пользователя, рейтинг и число непрочитанных сообщений с переданного кода страницы и записывает в объект. Возвращает имя пользователя или None при его отсутствии.

upload_image_file(fp, title='', parse_link=False, filename=None)[исходный код]

Загружает файл с картинкой на Табун.

Параметры:
  • fp (строка или file) – путь к файлу или файловый объект
  • title (строка) – заголовок картинки
  • parse_link (bool) – если True, пытаться достать ссылку из html-кода вместо возвращения самого html-кода
  • filename (строка) – имя файла, если передан файловый объект (по его расширению вычисляется Content-Type)
Тип результата:

строка

Загружает на Табун картинку по ссылке.

Параметры:
  • url (строка) – ссылка на файл или файловый объект
  • title (строка) – заголовок картинки
  • parse_link (bool) – если True, пытаться достать ссылку из html-кода вместо возвращения самого html-кода
Тип результата:

строка

urlopen(url, data=None, headers=None, redir=True, nowait=False, with_cookies=True, timeout=None, avoid_cf=None)[исходный код]

Отправляет HTTP-запрос и возвращает результат вызова urllib.urlopen (объект addinfourl).

Во избежание случайной DoS-атаки между несколькими запросами подряд имеется пауза в user.query_interval секунд (по умолчанию 0; отключается через nowait=True).

Параметры:
  • url (строка или Request) – ссылка, на которую отправляется запрос, или сам объект Request
  • data (строка (utf-8) или bytes или None) – содержимое тела HTTP. Если присутствует (даже пустое), то отправится POST-запрос
  • headers (кортежи из двух строк/bytes или словарь) – HTTP-заголовки (повторяться не могут)
  • redir (bool) – следовать ли по перенаправлениям (3xx)
  • nowait (bool) – игнорирование очереди запросов (которая нужна во избежание DoS)
  • with_cookies (bool) – прикреплять ли session_id и остальные печеньки (отключайте для запросов не к Табуну) (печеньки из extra_cookies прикрепляются в любом случае)
  • timeout (float или None) – таймаут (по умолчанию user.timeout)
  • avoid_cf (bool) – переопределяет значение поля avoid_cf (см. конструктор)
Тип результата:

urllib.addinfourl / urllib.response.addinfourl

urlread(url, data=None, headers=None, redir=True, nowait=False, with_cookies=True, timeout=None, avoid_cf=None)[исходный код]

Как return self.urlopen(*args, **kwargs).read(), но с перехватом исключений, возникших в процессе чтения (см. saferead()).

vote(post_id, value=0)[исходный код]

Ставит плюсик (1) или минусик (-1) или ничего (0) посту и возвращает его рейтинг.

vote_blog(blog_id, value)[исходный код]

Ставит плюсик (1) или минусик (-1) блогу и возвращает его рейтинг.

vote_comment(comment_id, value)[исходный код]

Ставит плюсик (1) или минусик (-1) комменту и возвращает его рейтинг.

vote_user(user_id, value)[исходный код]

Ставит плюсик (1) или минусик (-1) пользователю и возвращает его рейтинг.