RSS

Αρχείο Ετικετών: bash

Eξαγωγη στοιχειων/πληροφοριων απο ιστοσελιδες με bash script

Δυστυχως, αυτο που φοβουνται οι περισσοτεροι, οταν ξεκιναν να ασχολουνται με το Unix/Linux/Ubuntu, ειναι και το πιο δυνατο ατου που εχει… αναφερομαι στο τερματικο. Ειναι δυσκολο, αλλα αν το μαθεις, σου λυνονται τα χερια. Μπορεις να κανεις "περιεργα/τρελα" πραγματα, που δεν τα κανεις ουτε με το καλυτερο γραφικο περιβαλλον. Σε αυτο το tutorial, θα δουμε πως μπορουμε να εξαγουμε στοιχεια απο ιστοσελιδες που μας ενδιαφερουν. Μπορειτε πχ να εξαγετε τον καιρο μιας τοποθεσιας και να σωζετε τις πληροφοριες αυτες σε ενα αρχειο ή να τις εμφανιζετε στο desktop σας… μπορειτε να παρακολουθειτε μετοχες, top ten λιστες απο διαφορα sites και θεματα… και οτι αλλο σκεφτειτε.

Εδω, για λογους συντομιας και απλοτητας, θα φτιαξουμε ενα script το οποιο θα περνει απο μια ιστοσελιδα πληροφοριες για το ζωδιο μας. Η λογικη ειναι πανω-κατω ιδια και για αλλες περιπτωσεις, οποτε αν το θεμα σας φενεται αστειο, μην σταματησετε να διαβαζετε.

Καταρχας βρισκουμε την ιστοσελιδα που ενδιαφερει και ανοιγουμε να δουμε τον πηγαιο κωδικα της (source code). Aυτο στο firefox γινεται, πατωντας Control + U. Aφου ανοιξει το παραθυρο με τον κωδικα, τον κοιταμε προσεκτικα και ψαχνουμε να βρουμε καποιο κομματι κειμενου ή κωδικα που ειναι μοναδικο στην ιστοσελιδα και ειναι ακριβως διπλα στο κειμενο που θελουμε να εξαγουμε. Θελουμε δηλαδη να βρουμε κατι χαρακτηριστικο που να δηλωνει που ειναι το κειμενο που ψαχνουμε. Η ιστοσελιδα που θα παρουμε τα στοιχεια μας ειναι η: http://www.psychicguild.com/Daily-Horoscope/Scorpio. Ανοιξτε τον κωδικα της και θα δειτε οτι διπλα στις πληροφοριες που θελουμε να παρουμε, εχει ενα ξεχωριστο κομματι κωδικα που ειναι μοναδικος σε ολη την σελιδα: <div id="now2" style="">

Οποτε, καταρχας πρεπει να αποθηκευσουμε την σελιδα, τοπικα, στον υπολογιστη μας. Αυτο το κανουμε δινοντας την εντολη wget ετσι:

wget -O scorpio.txt http://www.psychicguild.com/Daily-Horoscope/Scorpio

Οπου scorpio.txt το ονομα του αρχειου που θελουμε να αποθηκευσουμε την σελιδα και μετα βαζουμε και την διευθυνση της ιστοσελιδας. Περιμενουμε και βλεπουμε οτι ο υπολογιστης σωζει την συγκεκριμενη ιστοσελιδα.

Για να εξαγουμε το κομματι με τις πληροφοριες, χρησιμοποιουμε την εντολη grep. Με την εντολη αυτη βρισκουμε ενα κομματι κειμενου μεσα σε ενα αρχειο. Οποτε για να εξαγουμε τις πληροφοριες μας δινουμε:

grep '<div id="now2" style="">' scorpio.txt

Αυτο θα μας τυπωσει ολη την σειρα κειμενου, μαζι με τον κωδικα HTML. Εμεις ομως θελουμε μονο το κειμενο, χωρις τον κωδικα HTML. Oποτε πρεπει να τον αφαιρεσουμε. Για να γινει αυτο, χρησιμοποιουμε την εντολη sed. H εντολη sed, αντικαθιστα ενα κομματι κειμενου, με ενα αλλο που θελουμε. Εμεις εδω θελουμε να αφαιρεσουμε τα HTML codes, τα οποια ολα, ξεκινανε και τελειωνουν με τους χαρακτηρες < και >. Ετσι θα χρησιμοποιησουμε την εντολη sed με ενα regular expression, το οποιο βρισκει τα HTML tags και θα τα αφαιρεσουμε. Δινουμε λοιπον την παρακατω εντολη:

sed -e 's/<[a-zA-Z\/][^>]*>//g' scorpio.txt

Στην οθονη θα μας τυπωθει το κειμενο της ιστοσελιδας χωρις τα HTML tags. Αλλα… μας τυπωνει ολη την ιστοσελιδα…και οχι μονο το κομματι που θελουμε. Αυτο γινετε γιατι με την προηγουμενη εντολη (την grep) παρολο που μας τυπωσε στην οθονη το κειμενο που θελαμε, στο αρχειο scorpio.txt δεν εγινε καμμια μεταβολη. Δεν σωσαμε τιποτα, απλα το εμφανισαμε στην οθονη μας. Πως λοιπον τωρα με την εντολη sed θα αντικαταστισουμε τα HTML tags μονο στο κομματι που θελουμε;;; Θα χρησιμοποιησουμε pipes! Tο pipe ειναι, ας πουμε, μια εντολη η οποια περνει την εξοδο μιας εντολης (το κειμενο που εμφανιζει δηλαδη) και το στελνει ως εισαγωγη στην επομενη εντολη.

Για να αντικαταστησουμε τα HTML tags μονο στο κομματι του αρχειου που θελουμε δινουμε την παρακατω εντολη:

grep '<div id="now2" style="">' scorpio.txt | sed -e 's/<[a-zA-Z\/][^>]*>//g'

Τι κανουμε… πρωτα βρισκουμε το σημειο του κειμενου με την εντολη grep και μετα με το pipe (ο χαρακτηρας | ) περναμε την εξοδο της grep σαν εισοδο στην sed. Eτσι τωρα η sed δεν χρειαζετε να τις πουμε το ονομα του αρχειου οπως πριν (sed -e 's/<[a-zA-Z\/][^>]*>//g' scorpio.txt). Ετσι μας δινετε τωρα σαν εξοδο, το κομματι κειμενου που θελουμε, χωρις τα HTML tags.

Oμως, δεν τελειωσαμε. Αν παρατηρησετε, στο κειμενο εμφανιζονται και κατι ειδικοι χαρακτηρες και πολλα κενα (&#8217,&#8211 κτλ). Δεν ειναι ωραια να τα βλεπουμε… οποτε θα τα αφαιρεσουμε και παλι με την εντολη sed. Oποτε δινουμε:

grep '<div id="now2" style="">' scorpio.txt | sed -e 's/<[a-zA-Z\/][^>]*>//g' | sed -e 's/’//g' | sed -e 's/–//g'

Oπως βλεπετε, συνεχιζουμε και προσθετουμε pipes, μεχρι να φτασουμε το τελικο κειμενο στην μορφη που θελουμε. Ενα τελευταιο βημα που θα κανουμε, ειναι να αφαιρεσουμε το κενο που εχει στην αρχη το κειμενο μας, το οποιο ειναι απλα tabs. Aυτο γινετε με την εντολη sed ‘s/[\t]//g’ οποτε η τελικη μας εντολη θα γινει ετσι:

grep '<div id="now2" style="">' scorpio.txt | sed -e 's/<[a-zA-Z\/][^>]*>//g' | sed -e 's/’//g' | sed -e 's/–//g' | sed 's/[\t]//g'

Αν θελουμε να το σωσουμε σε ενα αρχειο, θα δωσουμε την παραπανω εντολη προσθετωντας το συμβολο > με το ονομα του αρχειου που θελουμε να σωθει καπως ετσι:

grep '<div id="now2" style="">' scorpio.txt | sed -e 's/<[a-zA-Z\/][^>]*>//g' | sed -e 's/’//g' | sed -e 's/–//g' > scorpios.txt

Αν θελουμε να το κανουμε ολο αυτο, ενα script θα γινει ετσι:

#!/bin/sh

wget -O scorpio.txt http://www.psychicguild.com/Daily-Horoscope/Scorpio

grep '<div id="now2" style="">' scorpio.txt | sed -e 's/<[a-zA-Z\/][^>]*>//g' | sed -e 's/’//g' | sed -e 's/–//g' > scorpios.txt

H βασικη αρχη και σκεψη ειναι ιδια παντου. Καθε ιστοσελιδα εχει διαφορετικη δομη, οποτε πρεπει να αλλαξετε τις εντολες αναλογα. Τα βασικα εργαλεια ειναι οι εντολες wget, sed και grep. Αλλα δεν ειναι μονο αυτες. Οσο ψαχνετε τις εντολες του τερματικου, τοσο θα τελειοποιητε τον κωδικα σας και τις ικανοτητες σας. Μπορειτε να βρειτε scripts απο το Internet και να διαβασετε τον κωδικα τους για να δειτε και αλλα παραδειγματα.

 
Leave a comment

Αναρτήθηκε από τον/την στο 07/05/2011 in Eφαρμογες / Scripts, Οδηγοι / Τutorials

 

Ετικέτες: , , , , , ,

Google Apps απο το τερματικο

Παρακατω θα βρειτε μερικα scripts ωστε να μπορειτε να χρησιμοποιητε μερικα απο τα Google Apps, μεσα απο το τερματικο. Για να τα χρησιμοποιησετε, ανοιξτε το αρχειο .bashrc που βρισκεται στον φακελο Home. Καντε paste τα παρακατω, στο τελος του αρχειου και αποθηκευστε. Αν ανοιξετε ενα νεο τερματικο, θα μπορειτε να δωσετε τις εντολες αυτες.

###### detect language of a string
function detectlanguage() { curl -s "http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=$@" | sed 's/{"responseData": {"language":"\([^"]*\)".*/\1\n/'; }

###### find a location's coordinates # usage: findlocation "Las Vegas, Nevada" = coordinates: [ -115.1728160, 36.1146460, 0 ] function findlocation() { place=`echo $1 | sed 's/ /%20/g'` ; curl -s "http://maps.google.com/maps/geo?output=json&oe=utf-8&q=$place" | grep -e "address" -e "coordinates" | sed -e 's/^ *//' -e 's/"//g' -e 's/address/Full Address/';}
###### Google search (example: google dog)
function google() {
firefox "http://www.google.com/search?&num=100&q=${@}" &
}

###### translate a word using Google
# usage: translate <phrase> <output-language>
# example: translate "hello" es = hola (will auto-detect source language)
# for a list of language codes: http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
function translate() { wget -qO- "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=$1&langpair=%7C${2:-en}" | sed 's/.*{"translatedText":"\([^"]*\)".*/\1\n/'; }

###### convert currencies
# usage: currency_convert 1 usd eur
# for currency shorthand: http://www.xe.com/currency/
function currency_convert() { wget -qO- "http://www.google.com/finance/converter?a=$1&from=$2&to=$3&hl=es" | sed '/res/!d;s/<[^>]*>//g'; }

 
Leave a comment

Αναρτήθηκε από τον/την στο 10/03/2011 in Eφαρμογες / Scripts, Hints & Tips

 

Ετικέτες: , , , ,

Φτιαξτε alias για γρηγορη εισαγωγη εντολων στο τερματικο

Τα aliases ειναι πολυ απλα συντομογραφιες εντολων που δινεται συχνα στο τερματικο. Αντι πχ. να γραφεται συνεχεια: sudo apt-get install <κατι> φτιαχνεται ενα alias με ονομα πχ install που περιεχει την εντολη: sudo apt-get install. Οποτε εσεις στη συνεχεια στο τερματικο θα γραφεται μονο: install <κατι>

Για να δημιουργηθει το alias υπαρχουν 3 τροποι.

α) Απο το τερματικο γραφετε κατευθειαν την εντολη σας, πχ:

alias install='sudo apt-get install'

Ο τροπος αυτος ειναι προσωρινος και μολις κλεισετε το τερματικο, τα alias σας θα χαθουν.

β) Ανοιγετε το αρχειο .bashrc που βρισκετε στο home directory σας. Καπου στο αρχειο μεσα θα βρειτε τα παρακατω:

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
>alias l='ls -CF'

εκει συνεχιστε να γραφετε και εσεις τα δικα σας. Ο τροπος αυτος ειναι μονιμος, οποτε καθε φορα που ανοιγετε το τερματικο, θα ισχυουν.

γ) Περιπου ο ιδιος με τον (β), απλως εδω θα γραψουμε τα alias σε ενα ξεχωριστο αρχειο, ωστε να τα εχουμε συγκεντρωμενα και να μπορουμε ευκολα να τα επεξεργαζομαστε ή να τα αντιγραφουμε σε ενα αλλο υπολογιστη. Ανοιξτε το πρωτα το αρχειο .bashrc και βεβαιωθειτε οτι στην γραμμη:

if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

…δεν υπαρχει μπροστα απο την εντολη, ο χαρακτηρας #. Αν υπαρχει, σβηστε το και σωστε το αρχειο. Μετα ανοιγεται το gedit και φτιαχνεται το αρχειο .bash_aliases. Μεσα στο αρχειο γραψτε ολα τα alias που θελετε και σωστε το. Μερικα alias που χρησιμοποιω ειναι τα παρακατω:

#Aliases
alias aliaslist='grep ^alias ~/.bash_aliases'
alias aliasedit='gedit ~/.bash_aliases' #edit aliases
#Apt-Get
alias install='sudo apt-get install'
alias remove='sudo apt-get remove'
alias purge='sudo apt-get remove --purge'
alias update='sudo apt-get update && sudo apt-get upgrade'
alias upgrade='sudo apt-get upgrade'
alias clean='sudo apt-get autoclean && sudo apt-get autoremove'
alias search='apt-cache search'
alias show='apt-cache show'
alias sources='gksudo gedit /etc/apt/sources.list '
alias repo='sudo add-apt-repository'
#conky
alias conkyreset='killall -SIGUSR1 conky'
alias conkyrc='gedit ~/.conkyrc'
#Plowdown
alias download='plowdown --max-retries=20 --output-directory=/home/x/Downloads/complete/'
#General
alias clean_thumb='find ~/.thumbnails -type f -atime +7 -exec rm {} \;'

 
Leave a comment

Αναρτήθηκε από τον/την στο 14/11/2010 in Hints & Tips

 

Ετικέτες: , ,

Αλλαξτε το prompt του terminal

Εαν θελετε να αλλαξετε το prompt στο terminal σε κατι πιο χρησιμο… δειτε αυτη την σελιδα, με μερικα χρησιμα και αισθητικα πιο ομορφα prompts.

http://maketecheasier.com/8-useful-and-interesting-bash-prompts/2009/09/04

Για να τα δοκιμασετε μπορειτε να τα κανετε απευθειας copy/paste στο τερματικο και αν αποφασισετε οτι σας αρεσουν, για να εφαρμοστουν μονιμα, καθε φορα που ανοιγετε το terminal… απλως ανοιγετε το αρχειο .bashrc που βρισκετε στον home folder σας, και κανετε paste την εντολη… στο τελος του αρχειου. Καντε save… και την επομενη φορα που θα ανοιξετε το τερματικο… θα δειτε το prompt της επιλογης σας.

 
Leave a comment

Αναρτήθηκε από τον/την στο 28/03/2010 in Hints & Tips

 

Ετικέτες: , , , ,

Παλι ξεχασα να γραψω το sudo!

Ποσες φορες, δεν σας εχει τυχει να γραφετε μια εντολη στο τερματικο να πατατε το enter και να σας βγαζει μυνημα οτι πρεπει να εχετε δικαιωματα root για να εκτελεστει η εντολη… δεν ειναι σπαστικο να ξαναγραφετε την εντολη η εστω με τα βελακια να κανετε back… στην αρχη της εντολης κτλ…κτλ…

Μπορειτε πολυ ευκολα να γραψετε κατευθειαν sudo και μετα διπλα θαυμαστικα, οπως φενεται παρακατω:

sudo !!

Βασικα το ολο κολπο ειναι τα διπλα θαυμαστικα, τα οποια ειναι εντολη του bash και αυτο που κανουν ειναι να “γραφουν” την τελευταια εντολη που πληκτρολογησατε, οποτε μπορειτε να τα χρησιμοποιειτε και με αλλες εντολες και οχι μονο με την sudo.

 
Leave a comment

Αναρτήθηκε από τον/την στο 25/11/2009 in Hints & Tips

 

Ετικέτες: , ,

 
Follow

Get every new post delivered to your Inbox.