Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 23, 2026 23:45:24

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1396
Репутация: +  124  -
Профиль   Отправить e-mail  

Нужны добровольцы на бета-тестирование моей проприетарщины

Rodegast
Я сделал простенький скрипт который от туда видео скачивает, вот только для этого нужно знать id видеопотока, а для этого приходится в отладчик лезть…

 import requests
resp = requests.get('https://api.altube.ru/api/v1/channels/intuit/playlists/metacomputation')
print(resp.json())
import subprocess
m3u8_url = "https://cdn.altube.ru/4dc475fef6/360p.m3u8"
subprocess.run([
    "ffmpeg",
    "-i", m3u8_url,
    "-c", "copy",
    "video_360p.mp4"
])

там через api можно все ссылки сразу получить, и закачать через ffmpeg

Офлайн

#2 Март 8, 2026 04:29:49

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10026
Репутация: +  857  -
Профиль   Отправить e-mail  

Нужны добровольцы на бета-тестирование моей проприетарщины

xam1816
там через api можно все ссылки сразу получить
Наверное, можно как-то для верхней ссылки на видео получить m3u8. Я пока не смотрел.



Офлайн

#3 Март 17, 2026 21:57:02

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Нужны добровольцы на бета-тестирование моей проприетарщины

> там через api можно все ссылки сразу получить, и закачать через ffmpeg

Попробовал, не получилось. Для этого нужно что бы сайт отдавал видео напрямую, а это он не делает.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Март 17, 2026 22:14:58

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Нужны добровольцы на бета-тестирование моей проприетарщины

Основные изменения по проекту от 16.03.2026

1) Запуск репозитория с расширениями для платформы https://gitflic.ru/project/meta-test/extensions
Сейчас доступны расширения для selebrow и Report Portal
2) Добавлено расширение для moon
3) Добавлен атрибут no_vacuum для тестов
4) Обеспечена проверка значений атрибутов команд на стадии загрузки, а не выполнения
5) Поддержка HTTP-авторизации перенесена в команду URL
6) Исправлен ряд ошибок, улучшена отказоустойчивость платформы
7) Meta Test внесён в реестр программного обеспечения минцифры



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Апрель 19, 2026 09:27:50

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10026
Репутация: +  857  -
Профиль   Отправить e-mail  

Нужны добровольцы на бета-тестирование моей проприетарщины

Rodegast
В Haskell-е конструкторы типов делают практически тоже самое. Что до Rust-а, то там компилятор интересный, но сам язык меня не очень впечатлил.
Ты знаешь, он ещё отличается от других новых языков, он особенный какой-то. Там, например, его взяли и сделали ещё одним официальным, признанным языком для разработки ядра Linux. Казалось бы, столько языков есть новых, но они не становятся такими базовыми для мира разработки.

Я сейчас прошёл итераторы в нём - это фундамент языка, всё на них там. Ну казалось бы, итераторы, что в них может быть нового, они есть во всех языках уже лет двадцать-тридцать. Но блин, тут вдруг узнаёшь, что они все в нём двухсторонние. В питоне такого нет вообще понятия, итератор только слева направо. Тут же ты в любой момент подключаешься с правой стороны, почерпал справа элементы и снова возвращаешься к левой стороне. И самодельные итераторы ты тоже делаешь с одной или с двух сторон, ты не обязан их делать двухконцовыми. Причём и сама работа с итераторами тоже очень разносторонняя, можно их сравнивать между собой, как строчки, или разбавлять элементами через вставки. Тут они гораздо менее закрытые и фиксированные, чем в питоне, в питоне с ними ничего нельзя сделать после создания.

Ну и рекурсия тоже. Что можно нового узнать там? Но тут если тебе надо в рекурсии сделать break или continue, как в обычном цикле, для этого можно взять конструкции такие, типа объект break или объект continue, и вернуть его из вызова, что приведёт к такому эффекту, будто ты остановил или мотанул дальше цикл. Поэтому ты не обязан писать всё только на вызовах или только на итерациях, всё это можно превращать из одного в другое, меняя стиль.



Офлайн

#6 Апрель 22, 2026 21:46:14

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Нужны добровольцы на бета-тестирование моей проприетарщины

> Ты знаешь, он ещё отличается от других новых языков, он особенный какой-то.

Вот недавно видел доклад с критикой rust-а. Ну а “мир системной разработки” сидит в тупике, вот и пытается хоть за что то зацепится.
https://vkvideo.ru/video-155609632_456239242

> В питоне такого нет вообще понятия, итератор только слева направо.

Это означает что ты просто не понимаешь что такое итераторы

> Но тут если тебе надо в рекурсии сделать break или continue, как в обычном цикле

А вот не должно в рекурсии быть подобных вещей. В этом случае язык должен жёстко “дать по рукам”.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Апрель 26, 2026 06:40:13

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10026
Репутация: +  857  -
Профиль   Отправить e-mail  

Нужны добровольцы на бета-тестирование моей проприетарщины

Rodegast
Вот недавно видел доклад с критикой rust-а.
Ну критика не критика, я смотрю на сам язык обычно. За тот же Kotlin все что-то там говорят, восхваляют его, а мне он воообще не нравится. Так что я и Rust бы не стал изучать, не произведи он на меня впечатление.

Не знаю, насколько ты изучал его (ознакамливался с ним), но там есть такая особенность, которой нет в других языках. В чём прикол: вот все ставшие известными заморочки в языках, которые стали известны в течении десятков лет использования этих языков, от них от всех там пытаются избавиться, и им это удаётся, потому что способы избавления они выдумывают свои.

Например, вот сборщик мусора, который в Java или в C# занимает время рантайма, а в C и в C++ просто отсутствует и из-за этого приводит к утечкам памяти и потерям других ресурсов, они решили как бы сделать, взяв все плюсы, и как бы не сделать, убрав все минусы. Получилась новая концепция: сборщик мусора есть, но он внутри компилятора и поэтому его нет. То есть это что-то новое, какой-то третий путь, как третий глаз.

И поэтому он системный (в отличие от Go и Kotlin), но при этом в нём сборка мусора есть, как в удобных Java там и прочих. То есть он удобный, но при этом подходит для системного программирования, где всё впритык должно быть по памяти и по времени.

Также там есть ссылки, но при этом нет проблем со ссылками, как во всяких языках со ссылками типа Java и C++. Ну там эти висячие ссылки или ссылки на нули - это целая проблема всех языков со ссылками, и надо уметь это всё видеть и не допускать, целый набор навыков надо иметь, чтобы красиво писать и потом не дебажить это всё. А тут ты просто эти проблемные ссылки не создашь, потому что их обдумали, заморочились этим и запретили просто к существованию. То есть ссылки есть, но только беспроблемные.

Поэтому он вот такой необычный. Он отличается от Go, Swift и так далее. У него свои концепции, а не типа “просто ещё один язык”. Так что из-за этого его и подхватили, он современный, продуманный ещё. Например, там есть проверка границ массива, не вылез ли ты за границы, но она не идёт в бинарник и поэтому в бинарнике ничего не проверяется и время на это не тратится. А в других языках, если она есть, то она в бинарник идёт, а если её нет, то там оуверфлоу бывает частенько и за границы массива что-то пишется или что-то читается оттуда. При этом он современный, в нём все новые фичи есть, инкапсуляция, полиморфизм, то есть он отличается от C, потому что в C постоянно надо что-то выдумывать, чтобы современно всё сделать.

Изучать его тяжеловато. Он какой-то мудрёный из-за больших количеств синтаксического сахара, который там постоянно добавляют с каждыми версиями языка. Я уже полкнижки прочитал, а написать на нём ничего не могу до сих пор. Ещё много чего надо изучить, чтобы просто консольные проги писать. Там разобрать XML - целая проблема, разобрать JSON - целая проблема. И так во всём. Постоянно надо сторонние модули скачивать, а они ещё все по-разному устроены.



Отредактировано py.user.next (Май 22, 2026 12:25:39)

Офлайн

#8 Апрель 26, 2026 22:16:03

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Нужны добровольцы на бета-тестирование моей проприетарщины

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

Вот за это его и критикуют. С одной стороны они пытаются реализовать правильные вещи, но с другой делают это как то не очень : )



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#9 Май 19, 2026 18:53:18

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10026
Репутация: +  857  -
Профиль   Отправить e-mail  

Нужны добровольцы на бета-тестирование моей проприетарщины

По мотивам подсказки от xam1816

xam1816
  
import requests
resp = requests.get('https://api.altube.ru/api/v1/channels/intuit/playlists/metacomputation')
print(resp.json())
import subprocess
m3u8_url = "https://cdn.altube.ru/4dc475fef6/360p.m3u8"

Добрался, наконец-то, до этой задачи и занялся ей.

Я составил цепочку преобразования верхней ссылки на видео в прямую ссылку на видео в виде списка частей в формате m3u8.

Пример последовательности вывода:
                                                                                         там JSON скачивается
https://altube.ru/video/6dX8cpUAuuLI -> https://api.altube.ru/api/v1/videos/6dX8cpUAuuLI -> https://cdn.altube.ru/a0fe4b98e5 -> https://cdn.altube.ru/a0fe4b98e5/360p.m3u8

Дальше я сделал скрипт на Shell'е, который делает это преобразование автоматически:
load.sh
  
#!/bin/bash
 
make_json_url()
{
    sed 's%.*/\(.*\)$%https://api.altube.ru/api/v1/videos/\1%'
}
 
load_json()
{
    curl -s "$1" | sed -n 's%.*"path".*/\(.*\)","status".*%\1%p'
}
 
make_final_url()
{
    sed 's%.*%https://cdn.altube.ru/&/360p.m3u8%'
}
 
run()
{
    load_json $(echo "$1" | make_json_url) | make_final_url
}
 
main()
{
    run "$1"
}
 
main "$@" || exit 1
exit 0

Работает так:
[guest@localhost julo-at]$ ./load.sh https://altube.ru/video/OQU798lRsfdN
https://cdn.altube.ru/cb318cb05c/360p.m3u8[guest@localhost julo-at]$

Ну и всё, дальше подключил к своему менеджеру закачек этот скрипт на Shell'е и он стал качать файлы по списку, получая их прямые ссылки через этот скрипт и сохраняя файлы под именами из файла со ссылками.

Это конфиг моего менеджера закачек:
<?xml version="1.0" encoding="utf-8"?>
<site name="Altube">
<urls file="urls" search="*" replace="[" namesep=" " />
<notice name="Altube" one="loaded %file" all="all loaded" />
<patterns>
<pattern load="./load.sh %url"
start="^"
left="^"
right="$" />
</patterns>
<load cmd="yt-dlp %url -o %file" />
<temp prefix="tmp_" suffix=".mp4" random="8" />
<final prefix="t" suffix=".mp4" />
</site>

Это список ссылок в моём менеджере закачек:
Altube urls
----------

https://altube.ru/channel/billig/playlists/programmirovanie-na-python?video=OQU798lRsfdN
*https://altube.ru/video/OQU798lRsfdN x.mp4

[https://altube.ru/video/OQU798lRsfdN billig_ariphm_types.mp4
[https://altube.ru/video/JKDpgiTnAafX billig_type_str.mp4
[https://altube.ru/video/139vpURPUbrM billig_type_bool.mp4
Со звёздочкой - это то, что качается сейчас.
С квадратными скобками - это те файлы, которые уже закачались.
А те, которые без звёздочек и без квадратных скобок, - это просто типа комментарии и всё. Так можно отключать ссылки в списке, если их качать не надо.

Ну как бы без проблем всё скачалось. Просто ставишь, оно само качается.

Вот так выглядит оно, пока качается:
[guest@localhost julo-at]$ julo 
Load config... Altube
Start download
[generic] Extracting URL: https://cdn.altube.ru/cb318cb05c/360p.m3u8
[generic] 360p: Downloading webpage
WARNING: [generic] Falling back on generic information extractor
[generic] 360p: Downloading m3u8 information
[generic] 360p: Checking m3u8 live status
[info] 360p: Downloading 1 format(s): 0
[hlsnative] Downloading m3u8 manifest
[hlsnative] Total fragments: 377
[download] Destination: tmp_e88db7bf.mp4
[download] 100% of 185.32MiB in 00:05:39 at 558.98KiB/s
[FixupM3u8] Fixing MPEG-TS in MP4 container of "tmp_e88db7bf.mp4"
[guest@localhost julo-at]$

Но она (прога) может закачивать любыми закачивальщиками, то есть с одним (в данном случае yt-dlp) она выглядит так, с другим - по-другому, с третьим - по-третьему. Там можно curl ставить, даже какие-то свои загрузчики бинарные, которые закачивают как угодно.



Отредактировано py.user.next (Май 21, 2026 01:43:27)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version