скрипт для скачивания

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35465
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: скрипт для скачивания

Непрочитанное сообщение Alex Keda » 2008-11-23 23:36:25

кем "им"?
походу я, как и парадокс, не вижу чего-то, что видите вы...
Убей их всех! Бог потом рассортирует...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Гость
проходил мимо

Re: скрипт для скачивания

Непрочитанное сообщение Гость » 2008-11-23 23:55:47

lissyara писал(а):кем "им"?
походу я, как и парадокс, не вижу чего-то, что видите вы...
хм, нельзя быть таким невнимательным, в пред. моем сообщении было:
Гость писал(а):

Код: Выделить всё

sleep=100

get-pre-url() {
    curl $1 -s |
    sed -n 's/.*<form[[:space:]]*id="ff"[[:space:]]*action="\(.*\)"[[:space:]]*method="post">.*/\1/p' |
    xargs -I% curl %#dlt -so- -d dl.start=Free
}

get-url() {
    while get-pre-url $1 | grep -qi "try[[:space:]]*again"; do
	sleep 60
    done

    get-pre-url $1 |
    sed -n 's/.*form[[:space:]]*name="dlf"[[:space:]]*action="\([^\"]*\)".*/\1/p'
}

download-url() {
    echo Sleeping for $sleep seconds before downloading ${1:?Error}
    sleep $sleep
    curl $1 -O
}

multi-dl() {
    for arg; {
	download-url $(get-url $arg)
    }
}

multi-dl $@

Гость
проходил мимо

Re: скрипт для скачивания

Непрочитанное сообщение Гость » 2008-11-24 0:00:49

Гость писал(а):

Код: Выделить всё

*action="\(.*\)"[[:space:]]*
oops, здесь должно быть "\([^"]*\)", а не "\(.*\)", иначе .* может скушать то, что находится за кавычкой.

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: скрипт для скачивания

Непрочитанное сообщение paradox » 2008-11-24 3:57:16

>Гость
ты так много всего комментировал
что я так понял то не скрипт а какое то исправление чего то

MAK
ст. сержант
Сообщения: 344
Зарегистрирован: 2008-09-17 2:23:21

Re: скрипт для скачивания

Непрочитанное сообщение MAK » 2008-11-24 4:29:57

Гость, выложи рабочий вариант, вместе с /bin/sh, не ленись.
И перепиши все на wget, докачка должна работать.
Ну а по поводу
у мя качает и без этого, зачем временные файлы?, поиск по curl(1) не осилил?, У меня и без `-d mirror=' работает., это можно все сделать одним sed(1)'ом
хули тут можно сказать? Рассказать где пирожки лежат, или сам знаешь? ))

Гость
проходил мимо

Re: скрипт для скачивания

Непрочитанное сообщение Гость » 2008-11-24 14:12:26

MAK писал(а):Гость, выложи рабочий вариант, вместе с /bin/sh, не ленись.
ну, если тебе нужен только заголовок, то вот: http://wiki.lissyara.su/wiki/Rapidfetch.sh

Код: Выделить всё

(~). rapidfetch.sh
usage: rapidfetch.sh [-s sec] url [url...]
(~). rapidfetch.sh http://rapidshare.com/files/147657184/Hot_Noizes_-_People_-_Machine
s__2008__CDR.rar.html
10 minutes left
9 minutes left
8 minutes left
7 minutes left
6 minutes left
5 minutes left
4 minutes left
3 minutes left
2 minutes left
1 minutes left
Sleeping for 100 seconds before downloading:
http://rs90cg2.rapidshare.com/files/147657184/2720783/Hot_Noizes_-_People_-_Machines__2008__CDR.rar
Hot_Noizes_-_People_-_Machines__2008__CDR.rar 100% of   67 MB  212 kBps 00m00s

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: скрипт для скачивания

Непрочитанное сообщение paradox » 2008-11-24 14:19:14

я так чувсвую что скоро кто то доусовершенствует так что и количество секунд ожидания тоже будет парситься)
чисто теоретичеси оно как то зависит от размера файла

Гость
проходил мимо

Re: скрипт для скачивания

Непрочитанное сообщение Гость » 2008-11-24 15:04:45

paradox писал(а):я так чувсвую что скоро кто то доусовершенствует так что и количество секунд ожидания тоже будет парситься)
чисто теоретичеси оно как то зависит от размера файла
пока проблема в том как приделать буффер. Вот эти функции как-то странно себя ведут внутри get-direct-url():

Код: Выделить всё

pipe-to-vector() {
    # pipe-to-vector vector
    local IFS=''
    local i
    while read line; do
	eval $1_$((i+=1))=\$line
    done
}

vector-to-pipe() {
    # vector-to-pipe vector
    local IFS=''
    local i
    while eval [ \$$1_$((i+=1)) ]; do
	eval echo \$$1_$i
    done
}
а хочется сделать что-то вроде

Код: Выделить всё

try-url() {
    get-status $1 |
    pipe-to-vector buf

    if vector-to-pipe buf | grep -qi "try[[:space:]]*again"
    then
 	vector-to-pipe buf |
 	sed -n 's|.*in[[:space:]]*about[[:space:]]\(.*\)\.</p>|\1 left|p' >&2
 	sleep 60
 	try-url $1
    else
	sleep=$(vector-to-pipe buf | sed -n 's|.*var[[:space:]]*c=\([^[:space:]]*\);.*|\1|p')
	vector-to-pipe buf
 	return
    fi
}

Аватара пользователя
MASiK
лейтенант
Сообщения: 625
Зарегистрирован: 2008-09-19 20:09:41
Откуда: Оттуда
Контактная информация:

Re: скрипт для скачивания

Непрочитанное сообщение MASiK » 2008-12-04 21:01:38

во чё нарыл

http://www.markontech.com/2006/12/22/do ... -and-bash/

http://forums.fedoraforum.org/showthread.php?t=162611

http://www.reviewingit.com/index.php/content/view/47/2/ (не понял но вроде что-то по теме)

http://m0ds-ubuntu.blogspot.com/2008/01 ... r-for.html (в гет для премиумов)

Ну вот чем мог тем помог :)
Самурай


Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35465
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: скрипт для скачивания

Непрочитанное сообщение Alex Keda » 2008-12-05 9:13:05

питон - ф топку.
Убей их всех! Бог потом рассортирует...

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: скрипт для скачивания

Непрочитанное сообщение ProFTP » 2008-12-05 9:29:10

покочану и покочерыжке. © lissyara :ROFL:
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Гость
проходил мимо

Re: скрипт для скачивания

Непрочитанное сообщение Гость » 2008-12-15 22:11:45

lissyara писал(а):питон - ф топку.
И правда! Чего-то мне ни один из них не понравился. Наваял свой, ради пробы пистона: rfetch.py

надо бы его опробовать на винде с wget, но че-то под рукой нет виртуалок с ней

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35465
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: скрипт для скачивания

Непрочитанное сообщение Alex Keda » 2008-12-16 1:56:07

мне кажется, или на шелле меньше размером? =)))
Убей их всех! Бог потом рассортирует...

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: скрипт для скачивания

Непрочитанное сообщение paradox » 2008-12-16 3:36:20

вообщем все сведеться скоро к тому что я на C/C++ все это дело напишу...))

Гость
проходил мимо

Re: скрипт для скачивания

Непрочитанное сообщение Гость » 2008-12-16 4:39:31

lissyara писал(а):мне кажется, или на шелле меньше размером? =)))
да: таймер с отсчетом в реальном времени, пара исключений (file not found и тп) и возможность отослать в фон по ^Z. А main() и usage() только места много занимают, но пользы никакой.

Надо попробовать прикрутить поддержку rapidshare.DE + tesseract для распознавания капчи. Но перед этим tesseract надо натренировать на rapidshare'овские капчи, или epic fail неизбежен.

Или может быть есть способ скачать DE в обход капчи?

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: скрипт для скачивания

Непрочитанное сообщение paradox » 2008-12-16 4:57:34

попробовал на 2.3 питоне
ничего не пашет
или ему токо 3 0 подавай?

Гость
проходил мимо

Re: скрипт для скачивания

Непрочитанное сообщение Гость » 2008-12-16 5:11:09

paradox писал(а):вообщем все сведеться скоро к тому что я на C/C++ все это дело напишу...))
было б интересно глянуть на реализацию на lisp'е или elisp'е
paradox писал(а):или ему токо 3 0 подавай?
да, писалось с расчетом на 3.0.
3.X и 2.X не совместимы.

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: скрипт для скачивания

Непрочитанное сообщение paradox » 2008-12-16 5:14:08

лисс ставь на сервак 3питон)))))

Гость
проходил мимо

Re: скрипт для скачивания

Непрочитанное сообщение Гость » 2008-12-16 5:18:22

Код: Выделить всё

#! /usr/bin/env python-shared2.5

Код: Выделить всё

    File "./rfetch.py", line 35
    print('\r' + line % i, end = '')
                               ^
SyntaxError: invalid syntax
а всего то

Гость
проходил мимо

Re: скрипт для скачивания

Непрочитанное сообщение Гость » 2008-12-16 6:37:26

Гость писал(а):

Код: Выделить всё

    File "./rfetch.py", line 35
    print('\r' + line % i, end = '')
                               ^
SyntaxError: invalid syntax
вот для 2.X, но я не проверял

Код: Выделить всё

--- rfetch3.0.py
+++ rfetch2.6.py
@@ -1,9 +1,9 @@
-#! /usr/bin/env python-shared3.0
+#! /usr/bin/env python-shared2.6
 # usage: rfetch.py url [url...]
 
 import sys, os
 import time, re
-import urllib.request
+import urllib2
 
 def fetch(url):
     url, counter = suck(url)
@@ -32,7 +32,8 @@
         # do not print anything unless we are in foreground
         # and connected to a controlling terminal
         if os.getpgrp() == os.tcgetpgrp(0):
-            print('\r' + line % i, end='')
+            print('\r' + line % i),
+            sys.stdout.flush()
         time.sleep(update)
 
 def suck(url):
@@ -41,14 +42,14 @@
     if url.find('rapidshare.de') >= 0:
         raise NotImplementedError('rapidshare.DE is unsupported')
     elif data.lower().find('file could not be found') >= 0:
-        raise urllib.error.URLError('file not found')
+        raise urllib2.URLError('file not found')
     elif data.lower().find('contain illegal content') >= 0:
-        raise urllib.error.URLError('file has been blocked')
+        raise urllib2.URLError('file has been blocked')
     url = re.search('id="ff"\s*action="([^"]*)"', data).group(1)
     while True:
         data = url2str(url, 'dl.start=Free')
         if data.lower().find('already downloading a file') >= 0:
-                raise urllib.error.URLError('already downloading one file')
+                raise urllib2.URLError('already downloading one file')
         elif data.lower().find('reached the download limit') >= 0:
             # grab ticket and wait
             wait = int(re.search('about\s*(\d*)\s*minutes', data).group(1))
@@ -61,7 +62,7 @@
 
 def url2str(url, data=None):
     '''fetch url and return its content as a string'''
-    f = urllib.request.urlopen(url, data)
+    f = urllib2.urlopen(url, data)
     data = f.read().decode("utf-8", "replace")
     return(data)
 

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: скрипт для скачивания

Непрочитанное сообщение paradox » 2008-12-16 7:06:00

Код: Выделить всё

  File "./rfetch.py", line 38
    sys.stdout.flush()
    ^
IndentationError: unexpected indent

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: скрипт для скачивания

Непрочитанное сообщение paradox » 2008-12-16 7:20:09

убрал флуш
все вроде работает
стянуло
не красиво без флуша
но жить можно)

зы
неплохо было бы что бы линк который вытягивался показывало на екран
обьясняю почему
есть ситуации когда закачку нужно прервать
но сессия на рапиде еще живет какое то время
и на этот момент еще можно сделать

Гость
проходил мимо

Re: скрипт для скачивания

Непрочитанное сообщение Гость » 2008-12-16 7:31:10

paradox писал(а):
Гость писал(а):

Код: Выделить всё

  File "./rfetch.py", line 38
    sys.stdout.flush()
    ^
IndentationError: unexpected indent
а применял патч командой patch(1)? Пистон очень притязателен к пробелам/табам перед выражениями, т.к. они является способом их группировки в блоки.

Код: Выделить всё

(~). patch rfetch.py patch-rfetch.py
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- rfetch3.0.py
|+++ rfetch2.6.py
--------------------------
Patching file rfetch.py using Plan A...
Hunk #1 succeeded at 1.
Hunk #2 succeeded at 32.
Hunk #3 succeeded at 42.
Hunk #4 succeeded at 62.
done
(~). ./rfetch.py http://rapidshare.com/files/147657184/Hot_Noizes_-_People_-_Machines__2008__CDR.rar.html
sleeping...  41 seconds remain^C
2.3 у мя вываливается с `Bad system call', но работает на 2.4, 2.5, 2.6.
paradox писал(а):неплохо было бы что бы линк который вытягивался показывало на екран
обьясняю почему
есть ситуации когда закачку нужно прервать
но сессия на рапиде еще живет какое то время
и на этот момент еще можно сделать
такой вариант сойдет?

Код: Выделить всё

--- rfetch2.6.py
+++ rfetch2.6.py
@@ -8,6 +8,8 @@
 def fetch(url):
     url, counter = suck(url)
     status(counter, 1, 'sleeping... %3d seconds remain')
+    if os.getpgrp() == os.tcgetpgrp(0):
+        print('\r' + url)
     os.spawnlp(os.P_WAIT, 'fetch', sys.argv[0], url)
 
 def main():

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: скрипт для скачивания

Непрочитанное сообщение paradox » 2008-12-16 7:39:57

а применял патч командой patch(1)? Пистон очень притязателен к пробелам/табам перед выражениями, т.к. они является способом их группировки в блоки
я ручками патчил
там кстати 2.5 питон а не 2.6
такой вариант сойдет?
пойдет