3.139.107.241 |    

Navigation

Google Advertisement

Die Wettervorhersage im Internet (wetter.com) abfragen.

weather.sh
  1. #!/bin/bash
  2. # *******************************************************
  3. # file: weather.sh
  4. # date: 2005-02-21
  5. # author: Marko Schulz - <info@perlXpress.de>
  6. # description: Die Wettervorhersage im Internet abfragen.
  7. # *******************************************************
  8.  
  9. # URL der Internetseite von der das Wetter abgefragt werden soll.
  10. url="http://www.wetter.com/v2/?SID=&LANG=DE"
  11.  
  12. # *******************************************************
  13. # ersten Buchstarben eines Wortes gross schreiben...
  14.  
  15. function firstUpper() {
  16.  
  17. local string=$1
  18.  
  19. for word in $string; do
  20.     # Den ersten Buchstaben mit cut extraieren und gross schreiben.
  21.     local first="$( echo $word | cut -c1 | tr '[:lower:]' '[:upper:]' )"
  22.  
  23.     # Den Rest des Wortes klein schreiben und an [first] anhaengen.
  24.     word="$first$( echo $word | cut -c2-${#word} | tr '[:upper:]' '[:lower:]' )"
  25.  
  26.     # Nun den Satz zusammen setzen.
  27.     phrase="$phrase $word"
  28. done
  29.  
  30. echo $phrase
  31.  
  32. }
  33.  
  34. # *******************************************************
  35. # P R O G R A M M A B L A U F
  36.  
  37. # Temporaere Datei anlegen...
  38. tempout="/tmp/weather.$$"
  39.  
  40. # Wetter Datenbank anlegen, wenn diese noch nicht existiert.
  41. [ -f ${HOME}/.wetter ] && touch ${HOME}/.wetter
  42.  
  43. # Temporaere Datei wieder loeschen
  44. # wenn ein SIGHUP Signal gesendet wird.
  45. trap "rm -f $tempout" 0 1 15
  46.  
  47. # Ort als Uebergabeparameter...
  48. location=${1:-""}
  49.  
  50. # Noch kurz eine Meldung wie man das Programm verwendet,
  51. # wenn kein Ort angegeben wurde und mit exit beenden.
  52. [ -z "$location" ] && echo -e "\aUsage: $(basename $0) <LOCATION>" && exit 1
  53.  
  54. # Ort klein schreiben, damit wir beim Vergleich
  55. # nicht auf gross/klein Schreibung achten muessen.
  56. location=$( echo $location | tr '[:upper:]' '[:lower:]' )
  57.  
  58. # Zur Anzeige werden wir jeden Buchstaben eines Wortes im Satz gross schreiben.
  59. display=$( firstUpper "$location" )
  60.  
  61. echo "*********************************************************"
  62. echo "$( basename $0 ) - Zeigt Informationen zum Wetter an"
  63. echo "Copyright (c) 2005 - Marko Schulz - http://perlXpress.de"
  64. echo "*********************************************************"
  65.  
  66. # Daten aus Datenbank lesen und [name] mit [location] vergleichen. Ist der
  67. # Vergleich erfolgreich, so wird die dazugehoerige [id] ausgegeben.
  68. while read name number; do
  69.     name=$( echo $name | tr '[:upper:]' '[:lower:]' | sed 's/_/ /g' )
  70.     [ "$location" = "$name" ] && export id=$number
  71. done < ${HOME}/.wetter
  72.  
  73. if [ -z "$id" ]; then
  74. 	# Der gesuchte Ort ist noch nicht in der lokalen Wetter Datenbank vorhanden,
  75. 	# also muessen wir eine Erweiterte Sucheanfrage vornehmen.
  76. 	lynx -dump "${url}&LOC=7004&LOCFROM=0001&LOCFULL=7000&search=${location}" > $tempout
  77.  
  78. 	# Der gesuchte Ort wurde sofort gefunden.
  79. 	if grep 'Aktuell:' $tempout >/dev/null; then
  80.  
  81. 		# Aus der Neuen URL extrieren wir die ID.
  82. 		id=$( grep "$url&LOC=7000&LOCFROM=7000&type=WORLD&id=" $tempout | head -n1 | \
  83. 			sed 's/\(.*\)id=\(.*\)/\2/g' )
  84.  
  85. 		# User fragen ob er den neuen Ort in Wetter Datenbank speichern will.
  86. 		echo -e "\nMöchten Sie »\033[1m$display\033[0m« in Ihrer Wetter Datenbank aufnehmen (J/N):" && read save
  87.  
  88. 		# User Eingabe in gross Buchstaben umwandeln.
  89. 		save="$( echo $save | tr '[:lower:]' '[:upper:]' )"
  90.  
  91. 		# Leerzeichen mit Underline ersetzen...
  92. 		location=$( echo $location | sed 's/ \{1,\}/_/g' )
  93.  
  94. 		# Ist die Wetterdatenbank scheibbar und die Antwort J,
  95. 		# dann speichern wir den Eintrag in die Wetter Datenbank.
  96. 		[ -w ${HOME}/.wetter -a "$save" = "J" ] && echo -e "${location}\t${id}" >> ${HOME}/.wetter
  97.  
  98. 	else
  99.  
  100. 		# Leider war die Suche erfolglos, wir beenden das Programm mit entsprechender Meldung.
  101. 		if grep 'Ihre Suche war leider erfolglos' $tempout >/dev/null; then
  102. 			echo -e "\aIhre Suche nach »\033[1m$display\033[0m« war leider erfolglos" && exit 1
  103. 		fi
  104.  
  105. 		# Temporaere Datei auslesen und Suchergebnis ermitteln und anzeigen.
  106. 		cat $tempout | perl -e '
  107. 		my $line=1;
  108. 		my $match=0;
  109. 		my $anzahl=0;
  110. 		while (<>) {
  111. 			$_ =~ s/^\s+//g;
  112. 			if ($_ =~ /Ihre Suche nach »'$display'« ergab ([0-9]+) Treffer/i) {
  113. 				$anzahl=$1;
  114. 				$match=$line;
  115. 			}
  116. 			$line++;
  117. 			print $_ if ($line > $match && $line <= ($match+$anzahl+1));
  118. 		}
  119. 		print "\nBitte geben Sie die Zahl vor dem gewünschten Ort ein:" if ($match);'
  120.  
  121. 		# User Eingebe in [mumber] speichern.
  122. 		[ -z "$number" ] && read number
  123.  
  124. 		# Die ausgewaehlte URL ermitteln und in [newurl] speichern.
  125. 		newurl=$( sed -n '/^Verweise/,$ p' $tempout | \
  126. 			sed 's/^ \{1,\}//g' | \
  127. 			grep "^$number" | \
  128. 			sed 's/^.*http/http/' )
  129.  
  130. 		# Aus der Neuen URL extraieren wir die ID.
  131. 		id=$( echo $newurl | sed 's/\(.*\)id=\(.*\)/\2/g' )
  132.  
  133. 		# User fragen ob er den neuen Ort in Wetter Datenbank speichern will.
  134. 		echo -e "\nMöchten Sie »\033[1m$display\033[0m« in Ihrer Wetter Datenbank aufnehmen (J/N):" && read save
  135.  
  136. 		# User Eingabe in gross Buchstaben umwandeln.
  137. 		save="$( echo $save | tr '[:lower:]' '[:upper:]' )"
  138.  
  139. 		# Leerzeichen mit Underline ersetzen...
  140. 		location=$( echo $location | sed 's/ \{1,\}/_/g' )
  141.  
  142. 		# Ist die Wetterdatenbank scheibbar und die Antwort J,
  143. 		# dann speichern wir den Eintrag in die Wetter Datenbank.
  144. 		[ -w ${HOME}/.wetter -a "$save" = "J" ] && echo -e "${location}\t${id}" >> ${HOME}/.wetter
  145.  
  146. 		# Nun holen wir mit der ermittelten URL die neue
  147. 		# Seite und speichern das Ergebnis in [tempout].
  148. 		lynx -dump "$newurl" > $tempout
  149.  
  150. 	fi
  151.  
  152. else
  153.  
  154. 	# Die Wetter Seite mit lynx holen und Ergebnis in [tempout] speichern.
  155. 	lynx -dump "${url}&LOC=7000&LOCFROM=0202&type=WORLD&id=${id}" > $tempout
  156.  
  157. fi
  158.  
  159. # AUSGABE
  160. #
  161. # Ueberschrift
  162. echo -e "\nWetterübersicht für \033[1m$display\033[0m"
  163.  
  164. # Temporaere Datei einlesen und Interesannte Teile isolieren.
  165. sed -n '/^ \{1,\}Aktuell:/, /^ \{1,\}Sicht:/ p' $tempout | \
  166.  
  167. # Leerzeichen am Anfang entfernen.
  168. sed 's/^ \{1,\}//g' | \
  169.  
  170. # Das Wort Ortszeit aus der Zeile Aktuell: entfernen und ein Zeilenumbruch hinzufuegen.
  171. sed 's/^\(Aktuell:\) \(.*\) \(Ortszeit\)/\1 \2\n/g'
  172.  
  173. echo
  174.  
  175. # *******************************************************
  176. # end of this script...
Parsed in 0.005 seconds at 1153.63 KB/s

Search
 
Full text search by name and content of a snippet.

User online
There are 4 users online.

Tags Cloud

Latest snippets
str2seconds
(Bash::Function)
is_integer
(Bash::Function)
file_rotate
(Bash::Function)
confirm
(Bash::Function)
is_workingtime
(Bash::Function)
last day of last month
(Bash::Snippets)
crypt_apr1_md5
(PHP::Function)
crypt_apr1_md5
(Perl::Function)
transparent
(CSS)
rfc2822Toiso8601
(PHP::Function)