Разное

Ссылку вк: Чат Вконтакте, как получить ссылку?

06.12.2022

streamlink/vk.py на мастере · streamlink/streamlink · GitHub

«»»
$description Российская социальная платформа для прямых трансляций и видеохостинга.
$ URL-адрес vk.com
$тип live, vod
«»»
журнал импорта
импорт по
из hashlib импорта md5
из urllib.parse import parse_qsl, без кавычек, urlparse
из streamlink. exceptions import NoStreamsError
из streamlink.plugin import Plugin, PluginError, pluginmatcher
из streamlink.plugin.api, проверка импорта
из streamlink.stream.dash импортировать DASHStream
из streamlink.stream.hls импортировать HLSStream
из streamlink.utils.url import update_qsd
журнал = logging.getLogger(__name__)
@pluginmatcher(перекомпилировать(
r»https?://(?:\w+\. )?vk\.com/videos?(?:\?z=video)?(?P-?\d+_\d+)»
))
@pluginmatcher(перекомпилировать(
r»https?://(\w+\.)?vk\.com/.+»
))
класс ВК(Плагин):
API_URL = «https://vk.com/al_video.php»
HASH_COOKIE = «хэш529»
по определению _get_cookies(я):
определение on_response(res, **kwargs):
, если res. headers.get(«x-waf-redirect») == «1»:
, если не res.headers.get(«X-WAF-Backend-Status»):
log.debug(«Получение файла cookie WAF»)
куки = res.cookies.get(self.HASH_COOKIE)
ключ = md5(cookie.encode(«utf-8»)).hexdigest()
res.headers[«Местоположение»] = update_qsd(res.headers[«Местоположение»], qsd={«ключ»: ключ})
возврат рез
elif res.headers.get(«X-WAF-Backend-Status») == «challenge_success»:
self.session.http.cookies.update(res.cookies)
возврат рез
self. session.http.get(«https://vk.com/», hooks={«response»: on_response})
по определению _has_video_id(я):
вернуть любое (self.matches[:-1])
по определению follow_vk_redirect(self):
, если self._has_video_id():
возврат
попытка:
parsed_url = urlparse(self.url)
true_path = next(unquote(v). split(«/»)[0] для k, v в parse_qsl(parsed_url.query), если k == «z» и len(v) >
0)
self.url = f»{parsed_url.scheme}://{parsed_url.netloc}/{true_path}»
, если self._has_video_id():
возврат
кроме StopIteration:
проход
попытка:
self.url = self.session.http.get(self.url, схема=validate.Schema(
validate.parse_html(),
validate. xml_xpath_string(«.//head/meta[@property=’og:url’][@content]/@content»),
ул
))
кроме PluginError:
проход
, если self._has_video_id():
возврат
поднять NoStreamsError(self.url)
по определению _get_streams(я):
self._get_cookies()
self.
follow_vk_redirect()
video_id = self.match.group(«video_id»)
если не video_id:
возврат
log.debug(f»ИД видео: {video_id}»)
попытка:
данных = self.session.http.post(
self.API_URL,
params={«действие»: «показать»},
data={«act»: «show», «al»: «1», «video»: video_id}, 9\s*