[Risolto] Prelevare informazioni da un sito (Bash)

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
fiamma
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 256
Iscrizione: lunedì 31 marzo 2008, 21:05

[Risolto] Prelevare informazioni da un sito (Bash)

Messaggio da fiamma »

Ciao a tutti
avrei intenzione di scrivere uno script Bash per catalogare film.
Come in tutti i programmi di questo tipo vorrei mettere la possibilita di prelevare le informazioni dei film da un sito (in questo caso IMDb)

Conoscete comandi in bash di questo tipo?
Ho dato una lettura al man di wget ma non sembra fare al caso mio.

Grazie
Ultima modifica di fiamma il sabato 4 ottobre 2008, 17:16, modificato 1 volta in totale.
Avatar utente
fiamma
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 256
Iscrizione: lunedì 31 marzo 2008, 21:05

Re: Prelevare informazioni da un sito (Bash)

Messaggio da fiamma »

Ho capito che prima devo scaricare la pagina e poi cercare le info nel codice html.............. la vedo dura, molto dura
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Prelevare informazioni da un sito (Bash)

Messaggio da crap0101 »

be, in bash non saprei come fare, comunque dopo aver scaricato la pagina la parsi con awk e qualcos' altro ricercando delle parole chiave che ti interessano
Runtime:
111 min  | Japan:112 min
Director:

Quentin Tarantino
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Avatar utente
fiamma
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 256
Iscrizione: lunedì 31 marzo 2008, 21:05

Re: Prelevare informazioni da un sito (Bash)

Messaggio da fiamma »

Esatto, dovrei prelevare il nome del regista e altre info, ma non mi è chiaro cosa far fare a awk o simili.

Il parsing (o come si scrive) in cosa consiste?
Avatar utente
fiamma
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 256
Iscrizione: lunedì 31 marzo 2008, 21:05

Re: Prelevare informazioni da un sito (Bash)

Messaggio da fiamma »

Risolto!

Non sarà la fine del mondo come procedimento ma funziona;

#!/bin/bash

lynx -dump  http://us.imdb.com/title/tt0401792/ > index.txt

sed -i s/'\[[0-9]\+\]'/''/g index.txt # Cancella [32]

sed -i '/^$/d' index.txt #rimuove le righe vuote

grep -v http* index.txt > prova

##Title

grep -w 'IMDb >' prova > p
sed -i s/'IMDb >'//g p


##Director

if grep -w -q 'Director:' prova
then
grep -A 1 'Director:' prova >> p
else
echo "" >> p
fi
if grep -w -q 'Directors:' prova
then
grep -A 2 'Directors' prova >> p
else
echo "" >> p
fi


##Writer

if grep -w -q Writer prova
then
grep -A 1 Writer prova >> p | sed -i s/'more'//g p
else
echo "" >> p
fi
if grep -w -q Writers prova
then
grep -A 2 Writers prova >> p | sed -i s/'more'//g p
else
echo "" >> p
fi


##Genre

if grep -w -q Genre prova
then
grep -A 1 Genre prova >> p | sed -i s/'more'//g p
else
echo "" >> p
fi


##Date

if grep -w -q 'Release Date' prova
then
grep -A 1 'Release Date' prova >> p | sed -i s/'more'//g p
else
echo "" >> p
fi


##Runtime

if grep -w -q Runtime prova
then
grep -A 1 Runtime prova >> p
else
echo "" >> p
fi


##Country

if grep -w -q Country prova
then
grep -A 1 Country prova >> p
else
echo "" >> p
fi


##Rating

if grep -w -q 'User Rating:' prova
then
grep -A 1 'User Rating:' prova >> p | sed -i s/'IMDb User Rating:'//g p
else
echo "" >> p
fi

sed -i '/^$/d' p

Ovviamente funziona solo con IMDb.
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: [Risolto] Prelevare informazioni da un sito (Bash)

Messaggio da crap0101 »

!bello  :)
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
prampa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 652
Iscrizione: lunedì 26 febbraio 2007, 14:04

Re: [Risolto] Prelevare informazioni da un sito (Bash)

Messaggio da prampa »

crap0101 ha scritto: !bello  :)
quoto..bello..
tu pero' conoscevi gia' il link diretto del film. Per cercare le descrizioni di un film conoscendone solo il titolo? come si potrebbe ricercare? esiste un link dove gli passi il titolo del film e lui ti restituisce la pagina html da parsare? poi si potrebbe anche fare qualcosa di piu' carino con l'aggiunta di zenity o buc....
ciao
Avatar utente
fiamma
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 256
Iscrizione: lunedì 31 marzo 2008, 21:05

Re: [Risolto] Prelevare informazioni da un sito (Bash)

Messaggio da fiamma »

prampa ha scritto:
crap0101 ha scritto: !bello  :)
quoto..bello..
tu pero' conoscevi gia' il link diretto del film. Per cercare le descrizioni di un film conoscendone solo il titolo? come si potrebbe ricercare? esiste un link dove gli passi il titolo del film e lui ti restituisce la pagina html da parsare? poi si potrebbe anche fare qualcosa di piu' carino con l'aggiunta di zenity o buc....
ciao
Infatti stò cercando di scrivere questo script con buc.

Questa è la stringa per cercare il film http://us.imdb.com/Find?for=gomorra

Il problema è che non trova subito la pagina visto l'enorme quantitativo di dati che possiede IMDb, quindi un certo titolo corrisponde ad altri film.

Non conoscendo un rimedio aspetto con impazienza gli sviluppi di buc, magari per delle finestre "interattive" (non so se è giusto il termine)

Io adesso uso Tellico, scrivo il nome del film mi si apre una finestra con l'elenco dei nomi simili, seleziono e mi compare la scheda delle info. Se il film è giusto confermo.

Ora mi stò picchiando con sqlite per archiviare i dati.
prampa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 652
Iscrizione: lunedì 26 febbraio 2007, 14:04

Re: [Risolto] Prelevare informazioni da un sito (Bash)

Messaggio da prampa »

con buc non c'e' la possibilità di aprire nuove finestre? mi spiego meglio: ad esempio all'interno di main.buc la pressione di un pulsante potrebbe attivare il comando buc qualcosa.mc ed aprire cosi' una nuova finestra con la lista dei films? (per poter diventare "interattivo"...).
(magari recuperando i films da un sequenziale.....).
Ora mi stò picchiando con sqlite per archiviare i dati.
perche'? che problemi? chi vince?
Avatar utente
fiamma
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 256
Iscrizione: lunedì 31 marzo 2008, 21:05

Re: [Risolto] Prelevare informazioni da un sito (Bash)

Messaggio da fiamma »

prampa ha scritto: con buc non c'e' la possibilità di aprire nuove finestre? mi spiego meglio: ad esempio all'interno di main.buc la pressione di un pulsante potrebbe attivare il comando buc qualcosa.mc ed aprire cosi' una nuova finestra con la lista dei films? (per poter diventare "interattivo"...).
(magari recuperando i films da un sequenziale.....).
Ora mi stò picchiando con sqlite per archiviare i dati.
perche'? che problemi? chi vince?
Spero di vincere io!  ;)

La possibilità di aprire qualcosa.mc da main.mc c'è, e in effetti potrebbe essere un idea.

Ma come fare a far visualizzare i link dei film da scegliere?
prampa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 652
Iscrizione: lunedì 26 febbraio 2007, 14:04

Re: [Risolto] Prelevare informazioni da un sito (Bash)

Messaggio da prampa »

forse buc non offre molte possibilità di dinamicizzare...: pero' non lo conosco e non ne so di piu', anzi ne so molto poco.....
Io proverei con dialog/Xdialog (bellissima interfaccia grafica....ci sono affezionato) con uno script semplice tipo questo

Codice: Seleziona tutto

#!/bin/bash
DIALOG=Xdialog
#DIALOG=dialog
file=$HOME/file.txt
tempfile=$HOME/testo

$DIALOG --inputbox "inserisci il titolo del film" 10 50 2> $tempfile
rval="$?"
if [ "$rval" = "0" ]; then
    echo `cat $tempfile`
(A)
    for f in `cut -d: -f1 $file`; do
       lista="$lista $f $f"
    done
    $DIALOG --title "lista" --menu "seleziona" 0 0 0 $lista 2> $tempfile
    rval="$?"
    if [ "$rval" = "0" ]; then
        echo `cat $tempfile`
(B)
    else
        echo "scelto cancel..."
    fi
else
    echo "scelto cancel..."
fi
rm -f $tempfile
lo script chiede il nome del film da ricercare, poi nel punto (A) occorre inserire il codice bash per richiedere il film a imdb e interpretare la pagina html di ritorno come nel tuo esempio per estrarre l'elenco dei film: tale elenco dovrà essere memorizzato nel file $file (formato link + titolo).
Lo script visualizza poi la lista dei film e nel punto (B) inserisci lo script che hai fatto tu.
la stessa cosa anche da shell con read e select, se non vuoi l'interfaccia grafica.....
ciao
Avatar utente
fiamma
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 256
Iscrizione: lunedì 31 marzo 2008, 21:05

Re: [Risolto] Prelevare informazioni da un sito (Bash)

Messaggio da fiamma »

Se scrivo:

wget http://us.imdb.com/Find?for=the+fog

non succede nulla, e se scrivo:

lynx -dump http://us.imdb.com/Find?for=the+fog > file.txt

mi scarica la pagina senza i link dei film.

Mi sa che sono andato avanti con la fantasia.  :'(
Ultima modifica di fiamma il giovedì 9 ottobre 2008, 16:35, modificato 1 volta in totale.
Avatar utente
fiamma
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 256
Iscrizione: lunedì 31 marzo 2008, 21:05

Re: [Risolto] Prelevare informazioni da un sito (Bash)

Messaggio da fiamma »

Ok
per scaricare la pagina ho dato questo comando:

wget "http://us.imdb.com/find?s=tt&q=kill+bill"

e funizona.
prampa
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 652
Iscrizione: lunedì 26 febbraio 2007, 14:04

Re: [Risolto] Prelevare informazioni da un sito (Bash)

Messaggio da prampa »

dovrebbe funzionare anche con lynx -source alposto di -dump selezionando solo i /title/ nell'href.
Poi lo script a che punto è arrivato?
Avatar utente
fiamma
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 256
Iscrizione: lunedì 31 marzo 2008, 21:05

Re: [Risolto] Prelevare informazioni da un sito (Bash)

Messaggio da fiamma »

Lo script stà andando a rilento perchè non riesco a prelevare quello che ho evidenziato

[glow=red,2,300]Kill Bill: Vol. 1[/glow]

da questa pappardella di tag ( che ho allegato perchè non riesco ad inviare il messagio)


Un aiutino?   :-[
Allegati
file.txt
(9.41 KiB) Scaricato 31 volte
Avatar utente
fiamma
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 256
Iscrizione: lunedì 31 marzo 2008, 21:05

Re: [Risolto] Prelevare informazioni da un sito (Bash)

Messaggio da fiamma »

Ho trovato questo in giro per la rete:

cat file_4 | grep "href=" | cut -d"/" -f28

Funziona! Mi spiegate perchè?

Perchè cut toglie lo slash e -f28 legge la ventottesima riga?
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: [Risolto] Prelevare informazioni da un sito (Bash)

Messaggio da crap0101 »

fiamma ha scritto: Perchè cut toglie lo slash e -f28 legge la ventottesima riga?
perchè cut è fatto così  :) sia -d che -f28 sono opzioni di cut
man cut

      -f, --fields field-list
              Stampa solo i campi elencati nella  field-list.  I  campi  sono
              separati da un TAB per default.

      -d, --delimiter delim
              Per  -f,  i  campi  sono  separati  dal primo carattere in delim
              invece che da TAB.
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti