Newsgroup: it.comp.os.linux.iniziare
Titolo: ScriptBash: wget+lista_proxy+megaupload

Salve a tutti.
Premetto che questa discussione è al limite dell'OT, ma in fondo si 
tratta di qualche dritta sulla stesura di uno script.
Spesso scarico files da megaupload senza alcun account premium. 
Utilizzo wget copiando e incollando il link reperito sul sito allo
scadere dei tot secondi d'attesa, questo mi garantisce il resume che
invece attraverso firefox non sempre ottengo. Altri vantaggi
dell'utilizzo di wget sono l'assenza di interfaccia grafica,
possibilità di lavorare in background con o senza una sessione screen
ecc ecc.
Il problema è che dopo un certo quantitativo di materiale scaricato,
salta sempre fuori il monito Limit Exceeded (lo vedo sulla console
attraverso wget).
La soluzione che ho trovato è abbastanza semplice anche se un po'
macchinosa:
mi collego ad un sito che mantiene una lista aggiornata di server
proxy (basta googolare con la stringa *proxy list* e salta fuori al
primo posto). Poi uso wget lanciandolo come segue:
bash$ http_proxy=xxx.yyy.zzz.ttt:ppp prodown.sh linkURL
in cui "prodown" non è altro che un semplicissimo script che richama
semplicemente wget con alcune opzioni:
-----------------prodown.sh------
#!/bin/bash
wget -t 0 \
     -c   \
     --waitretry=100    \
     --retry-connrefuse \
     --limit-rate=15k   \
     $1
----------------------------------
In pratica l'indirizzo *xxx.yyy.zzz.ttt* è quello del proxy, mentre 
*ppp* è la porta che questo utilizza.
In soldoni provo diversi server proxy copiando ed icollando i vari
"indirizzo:porta" che leggo sul sito, nella variabile http_proxy. Poi
lancio la stringa di comando trascritta sopra e aspetto l'esito di
wget.
Poichè i server sono di diversa natura (ma ho constatato che non
c'entra poi molto) sono possibili diversi responsi negaativi del tipo:
- Bad request
- Limit Exceeded (probabilmente derivante sempre dalle limitazioni di 
                 megaupload)
- Service not avaiable
Alcuni server però funzionano e mi concedono un banda di download
elevata rispetto a quella della mia connessione che in molti casi
riesco perfettamente a saturare (20-25 KB/s).
In questo modo riesco a scavalcare le limitazioni di megaupload
passando per un proxy.
Purtroppo però ci sono diversi problemi:
anche scaricando col proxy si raggiunge il limite di megaupload,
infatti ne ho seganto qualcuno ben funzionante e ho provato a
riutilizzarlo in seguito dopo che lo avevo già spremuto molto qualche
giorno prima, il responso è stato limit exceeded. Probabilmente
megaupload ha qualche sistema in grado di abbinare agli ip che
scaricano il traffico consumato e probabilmente impone un limite oltre
il quale non si riesce più a scaricare, se non aspettando un bel po'
di giorni.
Poi ci sono alcuni proxy che limitano il traffico, per esempio ho
notato che hanno questo comportamento i proxy della rete
Planetlab/CoDeeN:
quasi tutti sono funzionanti, nel senso che permettono il download da
megaupload, ma dopo un certo tot di traffico scambiato, interrompono
la connessione e quando wget ritenta restituiscono Bad-request.
Tuttavia dopo una decina di minuti funzionano nuovamente fino al nuovo
raggiungimento del traffico messo a disposizione.
Chiedo scusa per questa premessa veramente lunga ma serve per spiegare
i comportamenti dei proxy.
Ora questo sisteema è indubbiamente valido ma ha il grosso
inconveniente di essere completamente manuale, perchè devo sempre
stare lì a copiaincollare gli indirizzi dei proxy...
Vorrei cercare di automatizzare il tutto con uno script.
Avevo pensato a qualcosa del genere:
edito un file di testo mettendo su ciascuna riga indirizzo:porta dei
server, copiandoli anche a mano dal sito aggiornato.
In questo modo ho una lista di valori ip:porta, chiamiamola
lista.proxy
Lo script dovrebbe fare qualcosa del genere:
0- setta i=1
1- leggi la i-esima riga di lista.proxy
2- assegna ad http_proxy il valore appena letto
3- esegui lo script prodown.sh sull'urlLink del file di megaupload
4- leggi l'output che restituisce:
4.1- se leggi "bad request" oppure "limit exceeded" oppure "service
     not avaiable". -----> incrementa i di una unità e vai al punto 1
Non dovrebbe essere tecnicamente complicato...
Poi sarebbe miglirabile, infatti si potrebbe fare in modo che provati
tutti i server ricominciasse daccapo, in modo che per esempio i server
della rete PlanetLab/CoDeen funzionino nuovamente (visto che dopo un
tot di tempo tornano disponibili).
Quindi un ulteriore miglioria potrebbe essere quella di scartare già
dopo la prima passata i server che hanno restituito LimitExceeded.
Infatti da quelli non si riesce sicuramente a scaricare, quindi è
inutile riprovare.
Questo lo si potrebbe fare memorizzando i numeri di riga da non
considerare nelle passate superiori alla prima (con un if sull'output
di wget "if output=limitexceeded then...memorizza il valore di i su un
vettore o da qualche altra parte."  e mettere un'istruzione
condizionale sulla "i", del tipo "se i è ugulae a un numero che fa
parte del vettore creato alla prima passata, allora incremaenta i e vai 
al punto 1).
Oppure si potrebbe scartare le righe non buone scrivendo una nuova
lista:
se l'output di wget /= Limit Exceeded allora echo valore_riga >>
nuova.lista.txt....
Cosa ne pensate?
Potrebbe funzionare?
Il problema è che non ho bene in mente come prendere e valutare
l'output di wget....
Sapreste darmi qualche dritta?
A presto scusate ancora per la lunghezza del post.

 l'output di wget....
in bash? 
wget bla bla > pippo (se quei messaggi sono su stdout, senno redirigi lo
stderr con 2>pippo)
finita l'esecuzione di wget
poi limit=$(cat pippo|grep LimitExceeded|wc -l)
se $limit è diverso da zero, hai avuto in LimitExceeded
poi bad=$(cat pippo|grep "bad request"|wc -l)
etc etc per ogni possibile msg di errore
poi rm pippo :)
io continuo a consigliarti python

 io continuo a consigliarti python
mmm, non so perchè, comunque non è la prima volta che leggo
dell'utilizzo di python, spesso lo confondo col perl....non ho idea di
che differenza passi tr i tre linguaggi....ma io conosco solo un po' di
bash.
Ad ogni modo grazie mille per l'interessamento e i consigli.

 Ad ogni modo grazie mille per l'interessamento e i consigli.
prego
č buona la mail in header?

 è buona la mail in header?
No, scrivi pure a questa:
scripting CHIOCCIOLA  lavabit PUNTO com
Bè, grazie ancora.
Arrisentirci.

> scripting CHIOCCIOLA  lavabit PUNTO com
rotfl