Модуль tabun_api.utils¶
Вспомогательный модуль с независимыми от API функциями.
-
class
tabun_api.utils.
HTMLFormatter
(params=None)[исходный код]¶ Гибкий и расширяемый конвертер lxml-элементов в красивые строки подобно браузеру links и родственным ему.
В словаре
params
можно указать следующие параметры:fancy
(True/False, по умолчанию True) — грамотно форматирует спойлеры и убирает кнопку ката при наличииstrike_mode
(unicode
(по умолчанию) илиhtml
) — как форматировать зачёркиванияvk_links
(True/False, по умолчанию False) — преобразует ссылки видаhttps://vk.com/foo
в@foo (текст ссылки)
для отправки во ВКонтактеdisable_links
(True/False, по умолчанию False) — удаляет ссылки, если текст ссылки совпадает с самой ссылкой (примитивный антиспам)
Пример использования:
node = parse_html_fragment('<div>a <s>bc</s> <hr/> d ef<br/>g<a></a>cut</div>')[0] HTMLFormatter({'strike_mode': 'html'}).format(node, with_cutted=False)
Результат:
a <s>bc</s> ===== d ef g
-
format
(node, with_cutted=True)[исходный код]¶ Форматирует lxml-элемент.
Параметры: - node – сам lxml-элемент
- with_cutted (bool) – если False, обработка будет прекращена после
натыкания на тег-кат (когда
is_cut()
вернёт True)
Тип результата: строка
-
tabun_api.utils.
ava_regex
= re.compile('\\/((images)|(storage))\\/([0-9]+)\\/([0-9]+)\\/([0-9]+)\\/([0-9]+)\\/([0-9]+)\\/([0-9]+)\\/avatar_([0-9]+)x([0-9]+)\\.(...)(\\?([0-9]+))?')¶ Регулярка для парсинга ссылки на аватарку — из неё можно узнать много полезного!
-
tabun_api.utils.
block_elems
= ('div', 'p', 'blockquote', 'section', 'ul', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6')¶ Блочные элементы, для красивого вывода в htmlToString (устарело, используйте HTMLFormatter.block_elems)
-
tabun_api.utils.
build_proxy_params
(proxy=None)[исходный код]¶ Парсит URL с параметрами прокси-сервера и возвращает словарь с аргументами для конструктора SocksiPyHandler. Если прокси пустой, возвращает просто None.
Параметры: proxy (str) – URL с параметрами прокси Тип результата: dict или None
-
tabun_api.utils.
cf_email
= re.compile('<[A-Za-z]+( href="/cdn-cgi/l/email-protection")? class="__cf_email__".*? data-cfemail="([0-9a-f]+)".+?</[A-Za-z]+>', re.DOTALL)¶ Регулярка для расшифровки почты, которую шифрует CloudFlare.
-
tabun_api.utils.
cf_email_a
= re.compile('<[Aa]\\s([^>]*)href="/cdn-cgi/l/email-protection#([0-9a-f]+)"(\\s[^>]*)?>', re.DOTALL)¶ Тоже регулярка для расшифровки почты, которую шифрует CloudFlare, но для ссылок.
-
tabun_api.utils.
cf_email_s
= re.compile('<script.{1,2048}getAttribute\\(.data-cfemail.\\).{1,2048}</script>', re.DOTALL)¶ Регулярка, убирающая скрипты расшифровки почты от CloudFlare.
-
tabun_api.utils.
download
(url, maxmem=20971520, timeout=5, waitout=15, headers=None)[исходный код]¶ Скачивает данные по ссылке. Имеет защиту от переполнения памяти и слишком долгого ожидания, чтобы всякие боты тут не висли. В случае чего кидает
IOError
.Параметры: - url (строка) – ссылка, которую скачать
- maxmem (int) – допустимый максимальный размер скачиваемых данных
- timeout (float) – как долго можно ждать ответа
- waitout (float) – как долго можно скачивать данные (простенькая защита от Slow TCP DoS Attack — timeout тут не поможет)
Тип результата: bytes
-
tabun_api.utils.
encode_multipart_formdata
(fields, files, boundary=None)[исходный код]¶ Возвращает кортеж (content_type, body), готовый для отправки HTTP POST–запроса.
Значения полей и файлов могут быть строками (закодируются в utf-8), bytes или числами (будут преобразованы в строку).
Параметры: - fields (коллекция кортежей (название, имя файла, значение)) – простые поля запроса
- fields – файлы запроса (MIME-тип будет выбран по расширению)
- boundary (строка или bytes) – boundary (по умолчанию генерируется случайные)
Тип результата: (строка, bytes)
-
tabun_api.utils.
escape_blog_content
(data)[исходный код]¶ Экранирует описание блога.
-
tabun_api.utils.
escape_comment_contents
(data)[исходный код]¶ Экранирует содержимое комментов.
-
tabun_api.utils.
escape_profile_content
(data)[исходный код]¶ Экранирует содержимое блока «О себе» профиля.
-
tabun_api.utils.
escape_topic_contents
(data, may_be_short=False)[исходный код]¶ Экранирует содержимое постов и личных сообщений для защиты от поехавшей вёрстки и багов lxml.
-
tabun_api.utils.
find_good_image
(urls, maxmem=20971520)[исходный код]¶ Ищет годную картинку из предложенного списка ссылок и возвращает ссылку и скачанные данные картинки (файл, bytes). Такой простенький фильтр смайликов и элементов оформления поста по размеру.
Требует PIL или Pillow.
Не грузит картинки размером больше maxmem байт, дабы не вылететь от нехватки памяти.
-
tabun_api.utils.
find_images
(body, spoiler_title=True, no_other=False)[исходный код]¶ Ищет картинки в lxml-элементе и возвращает их список в виде [[ссылки до ката], [ссылки после ката]].
Параметры: - spoiler_title (bool) – включать ли картинки с заголовков спойлеров
- no_other (bool) – исключать ли всякий мусор. Фильтрация простейшая: по наличию «smile» или «gif» в ссылке, также убираются табунские аватарки и навигация АльтерБРЕДаций.
Тип результата: [list, list]
-
tabun_api.utils.
find_substring
(s, start, end, extend=False, with_start=True, with_end=True)[исходный код]¶ Возвращает подстроку, находящуюся между кусками строки
start
иend
, илиNone
, если не нашлось.При
extend=True
кусок строки end ищется с конца (rfind
).
-
tabun_api.utils.
gen_user_agent
()[исходный код]¶ Генерирует кусочек юзерагента с информацией о системе.
-
tabun_api.utils.
generate_comments_tree
(comms)[исходный код]¶ Строит дерево комментариев из словаря, возвращаемого функциями get_comments[_from].
Формат элемента: [(комментарий, элемент), (комментарий, элемент), …]
Возвращает само такое дерево и список номеров комментариев-сирот (по идее должен быть пустой, но мало ли).
Параметры: comms ({id: Comment()
}) – словарь комментариевТип результата: (list, list)
-
tabun_api.utils.
get_content_type
(filename)[исходный код]¶ return mimetypes.guess_type(filename)[0] or „application/octet-stream“
Возвращает словарь с печеньками, взятыми из HTTP-заголовков
Set-Cookie
. Ключи и значения — Unicode-строки (unicode
в Python 2,str
в Python 3).Параметры: headers (http.client.HTTPMessage) – объект с HTTP-заголовками Тип результата: dict
-
tabun_api.utils.
html_escape
(s, single_quote=False)[исходный код]¶ Заменяет на html-сущности следующие символы:
&
,<
,>
,"
. Приsingle_quote=True
ещё и'
на'
.
-
tabun_api.utils.
is_cut
(item)[исходный код]¶ Возвращает True, если тег похож на кат (на момент написания это
<a id="cut"></a>
(новый) или<a></a>
(старый)).
-
tabun_api.utils.
is_module_available
(name)[исходный код]¶ Проверяет доступность модуля для импорта, при этом не импортируя его.
Параметры: name (str) – имя модуля Тип результата: bool
-
tabun_api.utils.
logger
= <Logger tabun_api (WARNING)>¶ Логгер tabun_api.
-
tabun_api.utils.
mon2num
(s)[исходный код]¶ Переводит названия месяцев в числа, чтобы строку можно было скормить в strftime.
-
tabun_api.utils.
mons
= ('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря')¶ Месяцы, для парсинга даты.
-
tabun_api.utils.
node2string
(node, encoding='utf-8')[исходный код]¶ Переводит html-элемент в байтовую строку.
-
tabun_api.utils.
normalize_body
(body=None, raw_body=None, cls='text')[исходный код]¶ Кодирует lxml-элемент в исходник html или наоборот декодирует исходник в lxml-элемент.
-
tabun_api.utils.
parse_avatar_url
(url)[исходный код]¶ Парсит ссылку на аватарку и возвращает id пользователя, дату отправки, размер, расширение и какой-то номер с конца ссылки. Если не удалось распарсить, то всё
None
.Параметры: url (строка) – ссылка Тип результата: (int, «YYYY-MM-DD», (int, int), строка, int или None)
-
tabun_api.utils.
parse_datetime
(s, utc=True)[исходный код]¶ Парсит дату-время в формате ISO 8601 и возвращает объект datetime с часовым поясом. При utc=True возвращает время в UTC (без привязки к часовому поясу для совместимости с Python 2), иначе — что распарсилось.
-
tabun_api.utils.
parse_html
(data, encoding='utf-8')[исходный код]¶ Парсит HTML-код и возвращает lxml.etree-элемент.
-
tabun_api.utils.
parse_html_fragment
(data, encoding='utf-8')[исходный код]¶ Парсит кусок HTML-кода и возвращает список lxml.etree-элементов и строк.
-
tabun_api.utils.
replace_cloudflare_emails
(data)[исходный код]¶ Декодирует почты, которые зашифровал CloudFlare, в html-странице.
-
tabun_api.utils.
send_form
(url, fields, files, timeout=None, headers=None)[исходный код]¶ Отправляет форму, пользуясь функцией
encode_multipart_formdata()
.Значения полей и файлов могут быть строками (закодируются в utf-8), bytes или числами (будут преобразованы в строку).
Параметры: - fields (коллекция кортежей (название, имя файла, значение)) – простые поля запроса
- fields – файлы запроса (MIME-тип будет выбран по расширению)
- timeout (float) – сколько ожидать ответа, не дождётся - кидается исключением urllib
- headers (кортежи из двух строк/bytes или словарь) – дополнительные HTTP-заголовки (повторяться не могут)
Тип результата: urllib.addinfourl
/urllib.response.addinfourl
-
tabun_api.utils.
youtube_regex
= re.compile('youtube.com\\/embed\\/(.{10,15})((\\?)|($))')¶ Регулярка для парсинга ютуба для выдирания превьюшки.