Покажи Публикации - 4096bits
* Виж публикациите на потр. | Виж темите на потр. | Виж прикачените файлове на потр
Страници: [1] 2 3 ... 230
1  Хумор, сатира и забава / Живота, вселената и някакви други глупости / Re: Започна се... -: Apr 01, 2020, 09:06
Цитат на: jet link=topic=48733.msg313473#msg313473 date=1585693281данската отговорност.
(що не вземат и презервативи да шият)).
:D

Цитат на: jet link=topic=48733.msg313473#msg313473 date=1585693281данската отговорност.
Като тресне рецесията тоя вирус ще е като ташак.
Абсолютно!
Казано е, че не могат да ти направят толкова лошо, колкото ти можеш сам на себе си.
Няма да е просто рецесия
2  Хумор, сатира и забава / Кошче / Re: [BASH] While яде първия знак, на вас случвало ли се е? -: Mar 30, 2020, 02:30
Тъй, долното нещо не използва oti2 въпреки, че все пак го създава и прави проверка, ако съществува, да не се случва нищо.
Вместо това дърпа от Youtube данните за всяко видео от линковете в oti в JSON формат посредством youtube-dl и използва тези данни така:
Взима заглавието на видеото ( без разширението ), за всяко аудио и видео, формата и размера на файл, определя кой файл за всяко видео и аудио е най-малък и най-голям ( за всеки случай и второто ) и събира всичко това за всеки линк в oti накуп в някакаква структура.

След това сваля форматите на най-малките видео+аудио.

Всичко това е моя интерпретация на това, което разбрах, че искаш - както разбрах, възможно най-малък трафик. Ако искаш точно определен файлов формат да свалиш, може да се промени.

Засега работи. Хубаво е, че единият трите линка към Youtube, които даде като пример за oti, вече не е наличен, та промених някои неща.
Тествай и кажи, дали е наред.

Така и не разбрах малко по-надолу, как правиш имената. Щото не стигнах до там, но ще променя и това. Също и датата на новите mkv.

Искам само да разбера, дали работи при теб.

Код:
#!/usr/bin/env python3
#
#

from collections import namedtuple
import concurrent.futures as cf
from glob import glob
import json
import os
from pathlib import Path
import subprocess as sp
import sys
import time


def get_dw_link(oti_path):
    with open(oti_path) as oti:
        for line in oti:
            # Просто проверява, ако реда започва като линк за гледане на видео от Youtube
            # и игнорира всичко останало
            if line.startswith('https://www.youtube.com/watch?v='):
                yield line.split()[0]
               

def get_data(url):
    try:
        # Тук може да се сложи timeout като аргумент в секунди
        # Може да бъде и израз 10*60 става 10 минути. Или пък 10*60+15
       
        # Сваля данни за видеото в JSON формат
        resp = sp.run(f'youtube-dl -j {url}'.split(), capture_output=True) # timeout=timeout
       
        if resp.returncode == 0:
            data = json.loads(resp.stdout)
           
            video_data = {'video_id': data['display_id'],
                        'filename': Path(data['_filename']).stem,
                        'audio': dict(),
                        'video': dict()}
           
            audio = []
            video = []
            for media in data['formats']:
                _format = namedtuple('Format', ['format', 'filesize',])

                if media['filesize'] and 'audio only' in media['format']:
                    audio.append(_format(media['format_id'], media['filesize']))
                elif media['filesize']:
                    video.append(_format(media['format_id'], media['filesize']))
               
            audio.sort(key=lambda data: data.filesize)
            video.sort(key=lambda data: data.filesize)
           
            video_data['audio'] = audio
            video_data['video'] = video
           
            video_data['audio_min'] = min(audio, key=lambda data: data.filesize)
            video_data['video_min'] = min(video, key=lambda data: data.filesize)
           
            return video_data
       
        else:
            msg = f'\nGetting video data FAILED! Skipped: "{url}". Return code: {resp.returncode}\n'
           
            for line in resp.stderr.decode().split('\n'):
                if line.startswith('ERROR: '):
                    msg = f'{msg}{line}\n'
           
            msgs.append(msg)
           
    except sp.TimeoutExpired:
        print(f'\nTimeout! Subprocess: {" ".join(resp.args)}. Skipped!\n')
       
                                     
def get_ids():
    all_data = []
   
    with open('oti2', 'w') as oti2:
        with cf.ThreadPoolExecutor() as executor:
            videos_data = [executor.submit(get_data, url) for url in get_dw_link('oti')]
           
            for result in cf.as_completed(videos_data):
                data = result.result()
               
                if data:
                    all_data.append(data)
                    oti2.write(f'{data["video_id"]}\n')
     
    return all_data


###
# Премахваме файла, ако преди това скрипта е прекъснал и не го е премахнал сам
msgs = []

if os.path.exists('oti2'):
    os.remove('oti2')

mt_oti = os.stat('oti').st_mtime # Съхраняваме mtime на oti

# Ако не съществува или mtime му е различен от този на oti
if not os.path.exists('oti2') or os.stat('oti2').st_mtime != mt_oti:
    videos = get_ids()
       
    at_oti2 = os.stat('oti2').st_atime
   
    # За да се промени mtime на файла трябва да се зададат и двете atime и mtime. Не питай защо. Не зная.
    os.utime('oti2', (at_oti2, mt_oti))

# Сваляне на видеата от списъка в oti
for video in videos:
    # Търсим, ако има файл, който завършва на {id}.mkv
    pattern = f'*{video["video_id"]}.mkv'
   
    if glob(pattern):
        pass
        # print(f'ID: {{video["video_id"]} - Matroska OK!')
   
    else:
        command = f'youtube-dl -f {video["video_min"].format}+{video["audio_min"].format} -c {video["video_id"]}'.split()
       
        while not glob(pattern):
            try:
                proc = sp.run(command, check=True) # timeout=timeout
                print(f'\n')
           
                time.sleep(2) # Това по принцип не е необходимо
                 
            except sp.CalledProcessError:
               
                if proc.returncode < 0:
                    sys.exit(f'Subprocess stoped by a signal!')
                else:
                    continue
               

os.remove('oti2')

for msg in msgs:
    print(msg)     
3  Хумор, сатира и забава / Живота, вселената и някакви други глупости / Re: Започна се... -: Mar 30, 2020, 00:55
https://www.actualno.com/europe/stigna-se-i-do-tova-gladni-sicilianci-kradat-ot-supermarket-pazi-go-vyoryjena-policija-news_1447755.html
4  Хумор, сатира и забава / Кошче / Re: [BASH] While яде първия знак, на вас случвало ли се е? -: Mar 29, 2020, 04:07
Така...

Не ми става ясно, какъв документ while -r l; чете и откъде се взима ( как му е посочен )

Поне от кратката версия не можа ли да се ориентираш - махнал съм всичко излишно - след края на while ... do .. done командата продължава още и има пренасочване на вход от файл и се вижда откъде ги взема - от входа (който му е пренасочен да се изчете от файла)
Код
GeSHi (Bash):
  1. while read -r l;
  2. do
  3. echo "$l e super";
  4. done < oti2

сега стана ли ти ясно къде отива т.е. се пренасочва файлът  oti2

може би на един ред ще е по-ясно
Код
GeSHi (Bash):
  1. while read -r l; do echo "$l e super"; done < oti2


;D
Сега стана ясно. Не очаквах да е на дъното на цикъла
5  Хумор, сатира и забава / Кошче / Re: [BASH] While яде първия знак, на вас случвало ли се е? -: Mar 28, 2020, 21:26
Впрочем, може на oti2 да му се вдигне i флага, за да не може да се променя случайно нещо по него
6  Хумор, сатира и забава / Кошче / Re: [BASH] While яде първия знак, на вас случвало ли се е? -: Mar 28, 2020, 20:38
Така...

Не ми става ясно, какъв документ while -r l; чете и откъде се взима ( как му е посочен )

Иначе си поиграх малко и до четенето на oti, свалянето на IDтата и уеднаквяването на mtime се докара.
Защо предпочитам Питоня вместо баш... Можеш да вършиш няколко неща едновременно ( паралелно ), като например да напускаш наведнъж да се вземат няколко IDта.

Ето и нещото, допреди да запецна поради горната причина.
Код:
#!/usr/bin/env python3
# This software is under the MIT License: https://opensource.org/licenses/MIT
#


import concurrent.futures as cf
import os
import os.path
import subprocess as sp

def get_dw_link(oti_path):
    with open(oti_path) as oti:
        for line in oti:
            # Просто проверява, ако реда започва като линк за гледане на видео от Youtube
            # и игнорира всичко останало
            if line.startswith('https://www.youtube.com/watch?v='):
                yield line.split()[0]


def get_id(url):
    try:
        # Тук може да се сложи timeout като аргумент в секунди
        # Може да бъде и израз 10*60 става 10 минути. Или пък 10*60+15
        resp = sp.run(['youtube-dl', '--get-id', url],
                    capture_output=True,
                    text=True)
       
        if resp.returncode == 0:
            return resp.stdout
        else:
            print(f'Getting ID failed! Skipped: "{url}". Return code: {resp.returncode}')
           
    except sp.TimeoutExpired:
        print(f'Timeout! Subprocess: {" ".join(resp.args)}. Skipped!')
       
                                     
def get_ids():
    with open('oti2', 'w') as oti2:
        with cf.ThreadPoolExecutor() as executor:
            ids = [executor.submit(get_id, url) for url in get_dw_link('oti')]
           
            for video_id in cf.as_completed(ids):
                if video_id.result():
                    oti2.write(video_id.result())
       


mt_oti = os.stat('oti').st_mtime

# Ако не съществува или mtime му е различен от този на oti
if not os.path.exists('oti2') or os.stat('oti2').st_mtime != mt_oti:
    get_ids()
   
    at_oti2 = os.stat('oti2').st_atime
   
    # За да се промени mtime на файла трябва да се зададат и двете atime и mtime. Не питай защо. Не зная.
    os.utime('oti2', (at_oti2, mt_oti))
   
else:
    pass
   
### Вторият ред е шегичка
7  Хумор, сатира и забава / Кошче / Re: [BASH] While яде първия знак, на вас случвало ли се е? -: Mar 28, 2020, 12:43
...

Не си мерим езиците. Аз съм любител програмист и програмирам за да си улесня живота. Досега не съм имал нужда от C#.
Впрочем, не намирам нищо лошо във библиотеки, които не идват с езика. Улесняват живота
И смятах да ползвам urllib, за да не се налага да се дърпат и инсталират още неща.

Цитат
Освен това, в предни мнения казвах, че y-dl никога не са пробвали нещото си при бавни връзки или поне не са ги симулирали с шейпър. Y-dl увисва и спира да има признаци на живот на всеки няколко минути.
Погледнах по-обстойно опциите, защото ползвам само няколко.
Тези нямат ли отношение към това, за което споменаваш? Сваляне при малка скорост и прекъсването след време.
Код:
  Download Options:
    -r, --limit-rate RATE            Maximum download rate in bytes per second (e.g. 50K or 4.2M)
    -R, --retries RETRIES            Number of retries (default is 10), or "infinite".
    --fragment-retries RETRIES       Number of retries for a fragment (default is 10), or "infinite" (DASH, hlsnative
                                     and ISM)

Видях и че има опция -F, с която могат да се вземат възможните видео формати:
Код:
$ youtube-dl -F https://www.youtube.com/watch?v=eURPTdaO3ck
[youtube] eURPTdaO3ck: Downloading webpage
[youtube] eURPTdaO3ck: Downloading video info webpage
[info] Available formats for eURPTdaO3ck:
format code  extension  resolution note
249          webm       audio only tiny   56k , opus @ 50k (48000Hz), 3.07MiB
250          webm       audio only tiny   71k , opus @ 70k (48000Hz), 4.06MiB
140          m4a        audio only tiny  128k , m4a_dash container, mp4a.40.2@128k (44100Hz), 7.94MiB
251          webm       audio only tiny  138k , opus @160k (48000Hz), 8.12MiB
160          mp4        256x144    144p   19k , avc1.4d400c, 30fps, video only, 635.95KiB
133          mp4        426x240    240p   34k , avc1.4d4015, 30fps, video only, 876.81KiB
278          webm       256x144    144p   60k , webm container, vp9, 30fps, video only, 1.53MiB
134          mp4        640x360    360p   78k , avc1.4d401e, 30fps, video only, 1.43MiB
242          webm       426x240    240p   89k , vp9, 30fps, video only, 2.40MiB
135          mp4        854x480    480p  153k , avc1.4d401f, 30fps, video only, 2.40MiB
243          webm       640x360    360p  169k , vp9, 30fps, video only, 4.37MiB
244          webm       854x480    480p  284k , vp9, 30fps, video only, 4.44MiB
136          mp4        1280x720   720p  285k , avc1.4d401f, 30fps, video only, 4.14MiB
137          mp4        1920x1080  1080p  482k , avc1.640028, 30fps, video only, 6.68MiB
247          webm       1280x720   720p  551k , vp9, 30fps, video only, 13.23MiB
248          webm       1920x1080  1080p  979k , vp9, 30fps, video only, 22.45MiB
18           mp4        640x360    360p  238k , avc1.42001E, mp4a.40.2@ 96k (44100Hz), 14.89MiB (best)

Може още да се ползва и тази опция, за да се пести време и трафик:
Код:
--youtube-skip-dash-manifest     Do not download the DASH manifests and related data on YouTube videos
8  Сигурност / Системна Сигурност / Re: DDoS -: Mar 28, 2020, 12:31
Виж hping3
Има --flood опция и може да си направиш и пакетите.
9  Хумор, сатира и забава / Кошче / Re: [BASH] While яде първия знак, на вас случвало ли се е? -: Mar 28, 2020, 06:33
Ами аз се опитах да си го преведа, обаче синтаксиса на bash ми мътна работа все още. Така и не го научих.
10  Хумор, сатира и забава / Кошче / Re: [BASH] While яде първия знак, на вас случвало ли се е? -: Mar 27, 2020, 19:00
Какво искаш да направиш стъпка по стъпка?
Може да пробвам да сглобя нещо на Питоня
11  Хумор, сатира и забава / Кошче / Re: [BASH] While яде първия знак, на вас случвало ли се е? -: Mar 27, 2020, 15:32
Защо не извлечеш IDтата директно от адресите в списъка, а правиш запитване към youtube?
12  Сигурност / Системна Сигурност / Re: DDoS -: Mar 27, 2020, 15:30
Мисля, че дори обикновената ping команда имаше някакви такива опции. Да залее другата машина
13  Хумор, сатира и забава / Живота, вселената и някакви други глупости / Re: Започна се... -: Mar 27, 2020, 00:05
За да им казва, колко са тъпи.
Поне по веднъж на ден.
14  Хумор, сатира и забава / Живота, вселената и някакви други глупости / Re: Започна се... -: Mar 26, 2020, 11:36
А в кризисния щаб все още няма вирусулог  :D
15  Хумор, сатира и забава / Живота, вселената и някакви други глупости / Re: Започна се... -: Mar 24, 2020, 20:30
Полицията вече ще има достъп до трафичните данни и телефоните ни, без да им трябва съдебно решение за това.
Било мярка за справяне с положението. Честито на всички ни! Вървим усилено към диктатура и автокрация
Страници: [1] 2 3 ... 230