<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ubunlog &#187; Scripts</title>
	<atom:link href="http://ubunlog.com/tag/scripts/feed/" rel="self" type="application/rss+xml" />
	<link>http://ubunlog.com</link>
	<description>Tutoriales, escritorios linuxeros,software,noticias. Ubuntu, Linux y Android</description>
	<lastBuildDate>Thu, 03 May 2012 11:41:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Cómo distribuir nuestro software en Ubuntu y otras distros</title>
		<link>http://ubunlog.com/como-distribuir-nuestro-software-en-ubuntu-y-otras-distros/</link>
		<comments>http://ubunlog.com/como-distribuir-nuestro-software-en-ubuntu-y-otras-distros/#comments</comments>
		<pubDate>Mon, 16 May 2011 07:30:14 +0000</pubDate>
		<dc:creator>Luciano Lagassa</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Scripts]]></category>

		<guid isPermaLink="false">http://ubunlog.com/?p=7697</guid>
		<description><![CDATA[Si son programadores o no y quieren un método de instalar esa aplicación o script, aquí les dejo varios métodos. Paquete DEB con Fuentes (Solo para debian y Derivados) Este método es para cuando tenemos el código fuente de la &#8230; <a href="http://ubunlog.com/como-distribuir-nuestro-software-en-ubuntu-y-otras-distros/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-7700" src="http://ubunlog.com/wp-content/uploads/2011/05/deb.png" alt="Cómo distribuir nuestro software en Ubuntu y otras distros" width="67" height="67" title="Cómo distribuir nuestro software en Ubuntu y otras distros" />Si son programadores o no y quieren un método de instalar esa aplicación o script, aquí les dejo varios métodos.<br />
<strong>Paquete DEB con Fuentes </strong>(Solo para debian y Derivados)</p>
<p>Este método es para cuando tenemos el código fuente de la aplicación.</p>
<p>Primero instalamos el programa que hace la magia <strong>&#8220;checkinstall&#8221;</strong>, en una terminal ejecutamos</p>
<pre class="brush:shell">sudo aptitude install checkinstall</pre>
<p>Para el ejemplo usaremos la librería <strong>&#8220;LAME&#8221;</strong>, descargan el fuente desde <a target="_blank" title="Lame" rel="nofollow" href="http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz/download" target="_blank">aquí</a>, creamos una carpeta y colocamos el archivo <strong>lame-3.98.4.tar.gz </strong>y desde terminal como root entramos a dicha carpeta y ejecutamos estas lineas.</p>
<pre class="brush:shell">tar -xzvf lame-3.98.4.tar.gz
cd lame-3.98.4
./configure
make
checkinstall
cp *.deb ../
cd ..
rm -R lame-3.98.4
chmod 777 lame-3.98.4*.deb</pre>
<p>Nos genera el paquete deb, este método instala el paquete generado al finalizar.</p>
<p><span id="more-7697"></span></p>
<p><strong>Paquete DEB Manual</strong> (Solo para debian y Derivados)</p>
<p>Este método es para nuestros scripts o aplicaciones precompiladas</p>
<p>Estructura de un Paquete DEB</p>
<pre class="brush:shell">|Setup                   (Carpeta General)
|
|-DEBIAN                 (Carpeta donde están los archivos de Configuración)
|--control               (Archivo de configuración)
|--preinst               (Archivo o Script que se ejecuta antes de Instalar)
|--postinst              (Archivo o Script que se ejecuta luego de Instalar)
|--prerm                 (Archivo o Script que se ejecuta antes de desinstalar)
|--postrm                (Archivo o Script que se ejecuta luego de desinstalar)
|
|-usr                    (Carpeta donde están los archivos de tu aplicación)
|-usr/bin                (Carpeta donde están los binarios o scripts)
|-usr/share/pixmaps      (Carpeta donde están los iconos)
|-usr/share/applications (Carpeta donde están los lanzadores)</pre>
<p>Ejemplo de archivo &#8220;control&#8221;</p>
<pre class="brush:shell">Package: TUPAQUETE
Version: VERSION
Architecture: amd64 (i386 o all)
Maintainer: AUTOR
Section: partner/web
Priority: optional
Description: TEXTO</pre>
<p>Generando un Paquete DEB</p>
<pre class="brush:shell">sudo chmod -R root:root setup/
sudo chmod -R 755 setup/
sudo dpkg -b setup/ paquete.deb
chmod 777 paquete.deb
chown -R setup</pre>
<p>Con estos datos ya se puede generar un paquete deb para nuestra aplicación, como ejemplo vamos a hacer un script bash simple</p>
<p>Creamos una carpeta de nombre <strong>&#8220;ubunlog&#8221;</strong> y dentro de esta otra de nombre <strong>&#8220;setup&#8221;</strong><br />
luego dentro de la ultima carpeta creamos dos carpetas una de nombre <strong>&#8220;DEBIAN&#8221;</strong> y otra <strong>&#8220;usr&#8221;</strong>.</p>
<p>Este es el archivo de control</p>
<pre class="brush:shell">Package: ubunlog-web
Version: 0.11.5.13
Architecture: all
Maintainer: TU NOMBRE
Section: partner/web
Priority: optional
Description: Tutoriales, escritorios linuxeros,software,noticias y todo sobre Ubuntu</pre>
<p>Lo guardamos dentro de la carpeta <strong>&#8220;DEBIAN&#8221;</strong> que creamos antes como &#8220;control&#8221;</p>
<p>Este código es del archivo postinst</p>
<pre class="brush:shell">#!/bin/sh
chmod 755 /usr/bin/ubunlog-web
chmod +x /usr/bin/ubunlog-web
chmod 755 /usr/share/pixmaps/ubunlog-web.png
chmod 755 /usr/share/applications/ubunlog-web.desktop
chmod +x /usr/share/applications/ubunlog-web.desktop</pre>
<p>Este lo guardamos en la misma carpeta que antes como &#8220;postinst&#8221;</p>
<p>Ahora creamos las carpetas para el script, el lanzador y el icono, dentro de la carpeta <strong>&#8220;setup&#8221;</strong> creamos una carpeta de nombre <strong>&#8220;usr&#8221;</strong></p>
<p>Como ven tenemos dos carpetas una <strong>&#8220;DEBIAN&#8221;</strong> y otra <strong>&#8220;usr&#8221; </strong>que creamos hace segundos, dentro de esta ultima creamos carpetas una <strong>&#8220;bin&#8221;</strong> y otra <strong>&#8220;share&#8221;</strong></p>
<p>Este es el código del script</p>
<pre class="brush:shell">#!/bin/sh
firefox http://ubunlog.com/ &amp;</pre>
<p>lo guardamos en la carpeta <strong>&#8220;bin&#8221;</strong> con el nombre <strong>&#8220;ubunlog-web&#8221;</strong>.</p>
<p>Ahora vamos a la carpeta <strong>&#8220;share&#8221;</strong> en esta creamos una carpeta de nombre <strong>&#8220;pixmaps&#8221;</strong> y  guardamos con el nombre <strong>&#8220;ubunlog-web.png&#8221;</strong> esta imagen la bajamos de <a target="_blank" title="logo" rel="nofollow" href="http://dropdo.com/2g5/ubunlog-logo" target="_blank">aquí</a></p>
<p>Solo nos queda crear el lanzador, para esto creamos una ultima carpeta dentro de <strong>share</strong> de nombre <strong>&#8220;applications&#8221;</strong></p>
<p>Este es el código del mismo</p>
<pre class="brush:shell">[Desktop Entry]
Encoding=UTF-8
Name=Ubunlog Web Blog
Comment=Tutoriales, escritorios linuxeros,software,noticias y todo sobre Ubuntu
GenericName=Tutoriales, escritorios linuxeros,software,noticias y todo sobre Ubuntu
Exec=ubunlog-web
Terminal=false
Type=Application
Icon=ubunlog-web
Categories=Application;Network;Internet;
StartupWMClass=ubunlog-web
StartupNotify=true</pre>
<p>Lo guardan en la carpeta <strong>&#8220;applications&#8221;</strong> como <strong>&#8220;ubunlog-web.desktop&#8221;</strong></p>
<p>Ya tenemos todo listo solo queda <strong>generar el paquete deb</strong>, le pide contraseña de root, pero no instala nada.</p>
<pre class="brush:shell">sudo chmod -R root:root setup/
sudo chmod -R 755 setup/
sudo dpkg -b setup/ ubunlog-web_0.11.5.13_all.deb
chmod 777 ubunlog-web_0.11.5.13_all.deb
chown -R setup</pre>
<p>Si tiene todo bien ya tiene el paquete &#8220;ubunlog-web_0.11.5.13_all.deb&#8221;.</p>
<p><strong>Autoextraible Manual</strong> (Solo probado en Ubuntu, Funciona en Cualquier Distro)</p>
<p>Este método es para generar archivos  con el script makeself (http://megastep.org/makeself/)</p>
<p>Descargan desde la web, es un archivo .run, le dan permisos y lo ejecutamos,</p>
<p>Como se usa.</p>
<pre class="brush:shell">makeself.sh CARPETA/ORIGEN/ RESULTADO.RUN "TEXTO" ./setup.sh</pre>
<p>Como verán &#8220;<strong>CARPETA/ORIGEN/&#8221;</strong> son los archivos y carpetas de nuestra aplicación o script <strong>&#8220;RESULTADO.RUN&#8221;</strong> es el archivo resultante o archivo Autoextraible<br />
<strong>&#8220;TEXTO&#8221;</strong> es el mensaje que se muestra al ejecutar el archivo Autoextraible, y se pone entre comillas.<br />
<strong>&#8220;./setup.sh&#8221; </strong>es el script que ejecuta al descomprimir el archivo Autoextraible, no olviden darle permisos.</p>
<p>Para que sea mas entendible usaremos el mismo ejemplo del paquete deb pero adaptado a este.</p>
<p>Creamos una carpeta de nombre <strong>&#8220;ubunlog&#8221;</strong> y copiamos la carpeta que genero makeself, renombrenla como <strong>&#8220;makeself&#8221;</strong><br />
En la carpeta <strong>&#8220;ubunlog&#8221;</strong> creen otra de nombre <strong>setup</strong> y dentro de esta colocan los archivos siguientes.</p>
<p>Script Instalador</p>
<pre class="brush:shell">#!/bin/sh
cp ubunlog-web /usr/bin/
chmod 755 /usr/bin/ubunlog-web
chmod +x /usr/bin/ubunlog-web
cp ubunlog-web.png /usr/share/pixmaps/
chmod 755 /usr/share/pixmaps/ubunlog-web.png
cp ubunlog-web.desktop /usr/share/applications/
chmod 755 /usr/share/applications/ubunlog-web.desktop
chmod +x /usr/share/applications/ubunlog-web.desktop</pre>
<p>Lo guardan como setup.sh</p>
<p>Nuestro Script</p>
<pre class="brush:shell">#!/bin/sh
firefox http://ubunlog.com/ &amp;</pre>
<p>Lo guardan como &#8220;ubunlog-web&#8221; el icono lo guardamos con el nombre <strong>&#8220;ubunlog-web.png&#8221;</strong> esta imagen la bajamos de <a target="_blank" title="logo" rel="nofollow" href="http://dropdo.com/2g5/ubunlog-logo" target="_blank">aquí</a></p>
<p>El Lanzador</p>
<pre class="brush:shell">[Desktop Entry]
Encoding=UTF-8
Name=Ubunlog Web Blog
Comment=Tutoriales, escritorios linuxeros,software,noticias y todo sobre Ubuntu
GenericName=Tutoriales, escritorios linuxeros,software,noticias y todo sobre Ubuntu
Exec=ubunlog-web
Terminal=false
Type=Application
Icon=ubunlog-web
Categories=Application;Network;Internet;
StartupWMClass=ubunlog-web
StartupNotify=true</pre>
<p>Lo guardan como <strong>&#8220;ubunlog-web.desktop&#8221;</strong></p>
<p>Ahora generamos el archivo Autoextraible</p>
<pre class="brush:shell">chmod 755 setup/
chmod +x setup/setup.sh
sh ../makeself/makeself.sh setup ubunlog-web.run "Ubunlog - Tutoriales, escritorios linuxeros,software,noticias y todo sobre Ubuntu" ./setup.sh</pre>
<p>Ya tenemos el archivo autoextraible.</p>
<p>Espero que les ayude en algo esta</p>
<p>Gracias por sus Comentarios, Si hay algún ERROR es producto de su imaginación, jajajaj</p>
<div  class="related_post_title"><h2>Post Relacionados</h2></div><ul class="related_post"><li><a href="http://ubunlog.com/gcstar-organizador-de-colecciones/" title="Gcstar, organizador de colecciones">Gcstar, organizador de colecciones</a></li><li><a href="http://ubunlog.com/ubuntu-one-en-xubuntu-11-10/" title="Ubuntu One en Xubuntu 11.10">Ubuntu One en Xubuntu 11.10</a></li><li><a href="http://ubunlog.com/oracle-virtualbox-4-0-final/" title="Oracle VirtualBox 4.0 final">Oracle VirtualBox 4.0 final</a></li><li><a href="http://ubunlog.com/synapse-nuevo-lanzador-de-aplicaciones-para-linux/" title="Synapse, nuevo lanzador de aplicaciones para Linux">Synapse, nuevo lanzador de aplicaciones para Linux</a></li><li><a href="http://ubunlog.com/orifli-sencillo-photouploader-para-flickr/" title="Orifli, sencillo photouploader para Flickr">Orifli, sencillo photouploader para Flickr</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ubunlog.com/como-distribuir-nuestro-software-en-ubuntu-y-otras-distros/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Scripts para Nautilus</title>
		<link>http://ubunlog.com/scripts-para-nautilus/</link>
		<comments>http://ubunlog.com/scripts-para-nautilus/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 10:12:25 +0000</pubDate>
		<dc:creator>Ubunlog</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Nautilus]]></category>
		<category><![CDATA[Scripts]]></category>

		<guid isPermaLink="false">http://www.ubunlog.com.ar/blog/?p=743</guid>
		<description><![CDATA[Buscando por la web, scripts para Nautilus, me encontré con la web de Javielinux, que se ha encargado de hacer una variedad interesantes de scripts, para ejecutar desde el explorador de archivos de Gnome. De que se trata esto de &#8230; <a href="http://ubunlog.com/scripts-para-nautilus/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Buscando por la web, scripts para Nautilus, me encontré con la web de <a target="_blank" href="http://nautilus-scripts.javielinux.com/index.php" target="_blank">Javielinux</a>, que se ha encargado de hacer una variedad interesantes de scripts, para ejecutar desde el explorador de archivos de Gnome.</p>
<p>De que se trata esto de los scripts de Nautilus? como bien dice en su web el creador de los mismos, son pequeñas aplicaciones que podemos ejecutar desde el explorador, así, con solo hacer click derecho del mouse sobre, por ejemplo una imágen y selecionar desde el menú contextual que se despliega la opción <strong>Scripts/Imágen</strong> podremos rápidamente agregar efectos de sombra,polaroid,collage, rotar, convertir entre formatos entre otras cosas.</p>
<p><a target="_blank" href="http://i540.photobucket.com/albums/gg330/ubunlog/captura003.png"><img class="aligncenter" src="http://i540.photobucket.com/albums/gg330/ubunlog/captura003.png" alt="Scripts para Nautilus" width="393" height="280" title="Scripts para Nautilus" /></a></p>
<p>La variedad de scripts,es extensa e interesante, los hay para convertir audios, para extraer audio o video, para manejar pdf, ejecutar líneas de comandos y varios etc.</p>
<p><a target="_blank" href="http://i540.photobucket.com/albums/gg330/ubunlog/captura004.png"><img class="aligncenter" src="http://i540.photobucket.com/albums/gg330/ubunlog/captura004.png" alt="Scripts para Nautilus" width="592" height="287" title="Scripts para Nautilus" /></a></p>
<p><a target="_blank" href="http://i540.photobucket.com/albums/gg330/ubunlog/captura005.png"><img class="aligncenter" src="http://i540.photobucket.com/albums/gg330/ubunlog/captura005.png" alt="Scripts para Nautilus" width="388" height="264" title="Scripts para Nautilus" /></a></p>
<p><a target="_blank" href="http://i540.photobucket.com/albums/gg330/ubunlog/captura006.png"><img class="aligncenter" src="http://i540.photobucket.com/albums/gg330/ubunlog/captura006.png" alt="Scripts para Nautilus" width="491" height="270" title="Scripts para Nautilus" /></a></p>
<p>Para quienes usamos Ubuntu 8.10 la instalación de los mismos es sencilla, solo descargar <a target="_blank" href="http://nautilus-scripts.javielinux.com/download/javi-nautilus-scripts_2.0-1ubuntu1_all_.deb" target="_blank">este paquete .deb</a> y doble click para instalarlo.</p>
<p>Si quieres hacerlo manualmente, debes tener instalado <strong>python-nautilus </strong>que se encuentra en los repositorios, bajar <a target="_blank" href="http://nautilus-scripts.javielinux.com/download/nautilus-scripts.tar.gz" target="_blank">este archivo</a> y descomprimirlo en la carpeta /home/tu_usuario/.gnome2/nautilus-scripts , asegurarte que los scripts tienen permiso de ejecución y si todo está bien con hacer click derecho del mouse verás una imágen como la de más arriba.</p>
<p>Más Información <a target="_blank" href="http://nautilus-scripts.javielinux.com/index.php" target="_blank">La Web de javielinux</a></p>
<p><strong><br />
</strong></p>
<div  class="related_post_title"><h2>Post Relacionados</h2></div><ul class="related_post"><li><a href="http://ubunlog.com/nautilus-doble-panel-karmic-9-10/" title="Nautilus doble panel &#8211; Karmic 9.10">Nautilus doble panel &#8211; Karmic 9.10</a></li><li><a href="http://ubunlog.com/nautilus-abrir-como-administrador/" title="Nautilus, abrir como administrador">Nautilus, abrir como administrador</a></li><li><a href="http://ubunlog.com/mi-escritorio-agosto/" title="Mi escritorio, Agosto">Mi escritorio, Agosto</a></li><li><a href="http://ubunlog.com/conky-mi-configuracion/" title="Conky, Mi configuración">Conky, Mi configuración</a></li><li><a href="http://ubunlog.com/despues-de-instalar/" title="Después de instalar">Después de instalar</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ubunlog.com/scripts-para-nautilus/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Gcstar, organizador de colecciones</title>
		<link>http://ubunlog.com/gcstar-organizador-de-colecciones/</link>
		<comments>http://ubunlog.com/gcstar-organizador-de-colecciones/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 11:10:00 +0000</pubDate>
		<dc:creator>Ubunlog</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[8.04]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[catalogador]]></category>
		<category><![CDATA[Final]]></category>
		<category><![CDATA[getdeb]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[Juegos]]></category>
		<category><![CDATA[Libros]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Scripts]]></category>

		<guid isPermaLink="false">http://www.ubunlog.com.ar/gcstar-organizador-de-colecciones/</guid>
		<description><![CDATA[Si sos un enfermo de tener cuanta película haya dando vueltas, como yo, seguramente te habrás preguntado más de una vez como organizar, llevar un listado, saber donde, en que dvd-r grabaste el capitulo final de la tercera temporada de &#8230; <a href="http://ubunlog.com/gcstar-organizador-de-colecciones/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-VYiCAmf5-U/SOqxvVpH-0I/AAAAAAAAAE0/jQuYU4E60AQ/s1600-h/pantallazo-1.png"></a><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-VYiCAmf5-U/SOqxvl7r25I/AAAAAAAAAE8/bVviytqf5is/s1600-h/pantallazo-2.png"></a><br />Si sos un enfermo de tener cuanta película haya dando vueltas, como yo, seguramente te habrás preguntado más de una vez como organizar, llevar un listado, saber donde, en que dvd-r grabaste el capitulo final de la tercera temporada de Lost por ejemplo, para no tener que revolver entre los 200 dvd que tenes tirados en esa caja de zapatos <img src='http://ubunlog.com/wp-includes/images/smilies/icon_smile.gif' alt="Gcstar, organizador de colecciones" class='wp-smiley' title="Gcstar, organizador de colecciones" /> </p>
<p>Bien, he aquí tu salvación amigo, Gcstar es un catalogador, en mi caso de películas, pero tambien podes llevar un inventario de:
<ul> 
<li>Comics</li>
<p> 
<li>Juegos de mesa</li>
<p> 
<li>Libros</li>
<p> 
<li>Música</li>
<p> 
<li>Series de Tv (episodios)</li>
<p> 
<li>Vinos (!!)</li>
<p> 
<li>Video Juegos</li>
<p> 
<li>Numismática</li>
<p></ul>
<p>Gcstar es la versión de GNU/Linux de <a target="_blank" href="http://www.antp.be/software/moviecatalog/" target="_blank">Ant Movie Catalog</a>, un excelente catalogador de peliculas, también de codigo abierto, pero solo para el SO de Microsoft, puede inclusive importar listas de AMC, tranquilamente.</p>
<p>Que hace Gcstar con tu colección de peliculas, bueno, podés catalogarlas por ejemplo por peliculas ya vistas, llevar un control de a quien le prestaste alguna peli, bajar de sitios de bases de datos la ficha tecnica de las mismas, sinopsis, caratula, actores, duración etc. una completa maravilla <img src='http://ubunlog.com/wp-includes/images/smilies/icon_smile.gif' alt="Gcstar, organizador de colecciones" class='wp-smiley' title="Gcstar, organizador de colecciones" />  la única contra con respecto a Ant Movie Catalog son los pocos scripts en español que vienen habilitados, desde donde podemos bajar los datos de las películas, el primero tiene muchisimos, en cambio Gcstar tiene 3 o 4 , pero son suficientes, al menos en mi caso el script de Film Affinity resolvió todas las peliculas que consulté, recomiendo que lo pruebes.</p>
<p>Gcstar se encuentra en los repositorios de Ubuntu 8.04 por lo que la instalacíon no podría ser mas fácil.</p>
<p><strong>Administración-&gt;Gestor de paquetes Synaptic </strong>buscamos Gcstar y seleccionamos para instalar, luego los ejecutamos desde el menu Aplicaciones.</p>
<p>La versión de repositorios no es la versión mas actual, si querés una versión más reciente, podes recurrir a <a target="_blank" href="http://www.getdeb.net/" target="_blank">Getdeb</a> y bajar la <a target="_blank" href="http://www.getdeb.net/app/GCstar" target="_blank">version 1.4.0</a> en paquete .deb listo para instalar.
<p style="text-align: center;"><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-VYiCAmf5-U/SOqxvSigKsI/AAAAAAAAAEs/fZMXpBnDwfQ/s1600-h/pantallazo.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_-VYiCAmf5-U/SOqxvSigKsI/AAAAAAAAAEs/fZMXpBnDwfQ/s400/pantallazo.png" alt="Gcstar, organizador de colecciones" id="BLOGGER_PHOTO_ID_5254207341269625538" border="0" title="Gcstar, organizador de colecciones" /></a><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-VYiCAmf5-U/SOqxvVpH-0I/AAAAAAAAAE0/jQuYU4E60AQ/s1600-h/pantallazo-1.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_-VYiCAmf5-U/SOqxvVpH-0I/AAAAAAAAAE0/jQuYU4E60AQ/s400/pantallazo-1.png" alt="Gcstar, organizador de colecciones" id="BLOGGER_PHOTO_ID_5254207342102707010" border="0" title="Gcstar, organizador de colecciones" /></a><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-VYiCAmf5-U/SOqxvl7r25I/AAAAAAAAAE8/bVviytqf5is/s1600-h/pantallazo-2.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_-VYiCAmf5-U/SOqxvl7r25I/AAAAAAAAAE8/bVviytqf5is/s400/pantallazo-2.png" alt="Gcstar, organizador de colecciones" id="BLOGGER_PHOTO_ID_5254207346475522962" border="0" title="Gcstar, organizador de colecciones" /></a></p>
<p style="text-align: center;"></p>
<div  class="related_post_title"><h2>Post Relacionados</h2></div><ul class="related_post"><li><a href="http://ubunlog.com/que-es-eso-de-linux-porque-usar-linux/" title="Que es eso de linux? Porqué usar linux?">Que es eso de linux? Porqué usar linux?</a></li><li><a href="http://ubunlog.com/gcstar-142/" title="GCstar 1.4.2">GCstar 1.4.2</a></li><li><a href="http://ubunlog.com/tuxinfo-n%c2%ba10/" title="TuxInfo Nº10">TuxInfo Nº10</a></li><li><a href="http://ubunlog.com/linux-mint-5-elyssa-lanzada/" title="Linux Mint 5 &#8220;Elyssa&#8221;, lanzada">Linux Mint 5 &#8220;Elyssa&#8221;, lanzada</a></li><li><a href="http://ubunlog.com/mark-shuttleworth-la-garza-levanta-vuelo/" title="Mark Shuttleworth: La Garza levanta vuelo">Mark Shuttleworth: La Garza levanta vuelo</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ubunlog.com/gcstar-organizador-de-colecciones/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mi escritorio, Agosto</title>
		<link>http://ubunlog.com/mi-escritorio-agosto/</link>
		<comments>http://ubunlog.com/mi-escritorio-agosto/#comments</comments>
		<pubDate>Fri, 01 Aug 2008 11:04:00 +0000</pubDate>
		<dc:creator>Ubunlog</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[conky]]></category>
		<category><![CDATA[Escritorio]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Iconos]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Tema]]></category>

		<guid isPermaLink="false">http://www.ubunlog.com.ar/mi-escritorio-agosto/</guid>
		<description><![CDATA[Tema Gtk:Creamy black panel Conky: Basado en este Iconos: Eikon Wallpaper:Q_s_Magic_Bus_by_webtrance Si te interesa mostrar tu escritorio mandame un mail con una captura y los datos configuración a ubunblog(arroba)gmail.com Post RelacionadosMi escritorio, NoviembreMi escritorio, OctubreMi escritorio, JulioConky, Mi configuraciónMi escritorio &#8230; <a href="http://ubunlog.com/mi-escritorio-agosto/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Tema Gtk:<a target="_blank" href="http://www.gnome-look.org/content/show.php/Creamy?content=69315" target="_blank">Creamy black panel</a></p>
<p>Conky: <a target="_blank" href="http://www.gnome-look.org/content/show.php/Another+conky+scripts?content=58555" target="_blank">Basado en este </a></p>
<p>Iconos: <a target="_blank" href="http://www.mediafire.com/?mh0tv32l42j" target="_blank">Eikon</a></p>
<p>Wallpaper:Q_s_Magic_Bus_by_webtrance </p>
<p>Si te interesa mostrar tu escritorio mandame un mail con una captura y los datos configuración a ubunblog(arroba)gmail.com</p>
<div  class="related_post_title"><h2>Post Relacionados</h2></div><ul class="related_post"><li><a href="http://ubunlog.com/mi-escritorio-noviembre/" title="Mi escritorio, Noviembre">Mi escritorio, Noviembre</a></li><li><a href="http://ubunlog.com/mi-escritorio-octubre/" title="Mi escritorio, Octubre">Mi escritorio, Octubre</a></li><li><a href="http://ubunlog.com/mi-escritorio-julio/" title="Mi escritorio, Julio">Mi escritorio, Julio</a></li><li><a href="http://ubunlog.com/conky-mi-configuracion/" title="Conky, Mi configuración">Conky, Mi configuración</a></li><li><a href="http://ubunlog.com/mi-escritorio-junio/" title="Mi escritorio Junio">Mi escritorio Junio</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ubunlog.com/mi-escritorio-agosto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conky, Mi configuración</title>
		<link>http://ubunlog.com/conky-mi-configuracion/</link>
		<comments>http://ubunlog.com/conky-mi-configuracion/#comments</comments>
		<pubDate>Fri, 20 Jun 2008 10:07:00 +0000</pubDate>
		<dc:creator>Ubunlog</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Alpha]]></category>
		<category><![CDATA[conky]]></category>
		<category><![CDATA[Consola]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Tema]]></category>
		<category><![CDATA[UNR]]></category>

		<guid isPermaLink="false">http://www.ubunlog.com.ar/conky-mi-configuracion/</guid>
		<description><![CDATA[Fecfactor me pedía ayer que publicara la configuración de el conky que muestro en la captura a continuación Como pueden ver se trata de 3 conkys, que son ejecutados mediante un script, la configuración del mismo esta basada en este &#8230; <a href="http://ubunlog.com/conky-mi-configuracion/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Fecfactor me pedía ayer que publicara la configuración de el conky que muestro en  la captura a continuación</p>
<p>Como pueden ver se trata de 3 conkys, que son ejecutados mediante un script, la configuración del mismo esta basada en <a target="_blank" href="http://ubuntuforums.org/showthread.php?t=809615&amp;highlight=conky" target="_blank">este post </a>que publicó el usuario Bruce M. en los foros de <a target="_blank" href="http://ubuntu-ar.org/" target="_blank">Ubuntu-Ar </a>con algunas modificaciones en el conky de el correo, que en mi caso es para Gmail.</p>
<p>En el post de referencia está muy bien explicado por Bruce, pero también como ayuda memoria para mí, voy a copiar los pasos a seguir y el codigo de mis conkys para quien quiera lo tenga.</p>
<p><span id="more-227"></span></p>
<p>Bien, necesitamos por supuesto tener instalado conky, curl y python asi que tipeamos en una consola:<br />
<blockquote>sudo apt-get install conky curl python</p></blockquote>
<p>La fuente de weather.ttf y de arrows.ttf <a target="_blank" href="http://ubuntuforums.org/showthread.php?t=760527" target="_blank">está aquí</a>. La fuente de moon.ttf <a target="_blank" href="http://www.dafont.com/moon-phases.font" target="_blank">está aquí</a> una vez bajadas hay que copiarlas a /usr/share/fonts</p>
<p>Vamos a crear ahora nuestro script llamado ~./startconky<br />
<blockquote>gksudo gedit ~/.startconky</p></blockquote>
<p>dentro del archivo vacio pegamos lo siguiente<br />
<blockquote>#!/bin/bash<br />sleep 0 &amp; # 0 good for Xfce &#8211; use 20 to 30 for Gnome<br />conky -c ~/Conky/conkymain &amp;<br />#sleep 0 &amp; # 0 good for Xfce &#8211; use 1 for Gnome<br />conky -c ~/Conky/conkyforecast &amp;<br />#sleep 0 &amp; # 0 good for Xfce &#8211; use 1 for Gnome<br />conky -c ~/Conky/conkymail &amp;</p></blockquote>
<p>Ahora creamos el archivo conkymain en la carpeta ~/Conky sino tenemos la carpeta Conky habrá que crearla.<br />
<blockquote>gedit ~/Conky/conkymain</p></blockquote>
<p>yo uso la fuente Calibri, si no la tenés reemplazala por la que quieras.</p>
<p>Pegamos dentro lo que sigue<br />
<blockquote>background no<br />own_window yes<br />own_window_transparent yes<br />own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager<br />own_window_colour black<br />double_buffer yes<br />use_spacer left<br />use_xft    yes<br />font calibri:size=9<br />xftfont calibri:size=9<br />xftalpha 0.5<br />update_interval 5.0<br />uppercase no  # set to yes if you want all text to be in uppercase<br />stippled_borders 3<br />border_margin 9<br />border_width 10<br />default_color white<br />default_outline_color black<br />default_shade_color black<br />color0 cyan<br />color1 lightblue<br />color2 orange<br />color3 yellow<br />color4 wheat<br />color5 white<br />color6 white<br />color7 white<br />color8 white<br />color9 white<br />alignment top_right  # or top_left, bottom_left, bottom_right<br />gap_x 10<br />gap_y 35<br />text_buffer_size 128 # use 1024 for the forecast<br />no_buffers yes  # Subtract file system buffers from used memory?<br />draw_borders no<br />draw_outline yes  # amplifies text if yes<br />draw_shades yes  # shadecolor black</p>
<p>TEXT<br />${font calibri:size=12}${alignc}${color1}$sysname $kernel on $machine}$color$font<br />${font calibri:size=12}${alignc}${color2}${exec whoami} @ $nodename$color$font<br />${color0}${hr 1}$color<br />${font calibri:size=20}${alignc}${time %H:%M}$font<br />${font calibri:size=12}${color1}${alignc}${time %A, %d %b. %Y}$color$font<br />${color3}UpTime:${alignr 2}$uptime$color<br />${color0}${hr 1}$color<br />${voffset 5}${color2}CPU:${alignc}$color$running_processes ${color1} /$color $processes${alignr 2}${color2}${cpubar cpu0 14,80}$color<br />${color1}${voffset -16}${alignr 5}$cpu%$color<br />${voffset 2}${color1}Load Avg (${color3}Min${color1}):${alignr 2}${color3}1: $color${loadavg 1}   ${color3}5: $color${loadavg 2}   ${color3}15: $color${loadavg 3}<br />${voffset 5}${color2}RAM:$color $mem ${color2} /$color$memmax${alignr 2}${color2}${membar 14,80}$color<br />${color1}${voffset -16}${alignr 5}$memperc%$color<br />${voffset 2}${color1}Buffered: $color${buffers}${alignr 2}${color1}Cached:$color ${cached}<br />${voffset 5}${color2}SWAP: $color$swap ${color2}/ $color${swapmax}${alignr 2}${color2}${swapbar 14,80}$color<br />${color1}${voffset -16}${alignr 5}$swapperc%<br />${color0}${hr 1}$color<br />${voffset 5}${color2}HD Info${color1} -$color Free${color1} &#8211; Used &#8211; ${color2} Total<br />${voffset 5}${color1}Root: $color${fs_free_perc /}%${alignr 2}${fs_free /}${color2}/${color1}${fs_used /}$color/${color2}${fs_size /}$color<br />${color1}Home: $color${fs_free_perc /home/usuario}%${alignr 2}${fs_free /home/usuario}${color2}/${color1}${fs_used /home/usuario}$color/${color2}${fs_size /home/usuario}$color<br />${color0}${hr 1}$color<br />${color1}Desde:$color Buenos Aires, Argentina<br />${color1}Lat: ${color2}34°35&#8242;S          ${color1}Long: ${color2}58°21&#8242;W            ${color1}Alt: ${color2}25 m$color<br />${voffset 5}${color2}${font calibri:size=12}hoy:$font ${color3}${execi 3600 python ~/Conky/scripts/conkyForecast.py &#8211;location=ARBA0009 &#8211;datatype=CC}$color${alignr 2}${color1}ST: ${color2}${execi 3600 python ~/Conky/scripts/conkyForecast.py &#8211;location=ARBA0009 &#8211;datatype=LT}<br />${color3}${font Weather:size=50}${execi 3600 python ~/Conky/scripts/conkyForecast.py &#8211;location=ARBA0009 &#8211;datatype=WF}$font$color<br />${alignr 50}${voffset -55}${font calibri:size=25}${execi 3600 python ~/Conky/scripts/conkyForecast.py &#8211;location=ARBA0009 &#8211;datatype=HT}$font<br />${alignc 20}${voffset -30}${font Arrows:size=20}${color4}${execi 3600 python ~/Conky/scripts/conkyForecast.py &#8211;location=ARBA0009 &#8211;datatype=BF}$color$font<br />${alignc 10}${voffset 5}${color4}Viento: ${execi 3600 python ~/Conky/scripts/conkyForecast.py &#8211;location=ARBA0009 &#8211;datatype=WS}$color<br />${color1}Humedad: ${color3}${execi 3600 python ~/Conky/scripts/conkyForecast.py &#8211;location=ARBA0009 &#8211;datatype=HM}${alignr 2}${color1}Precipitación: ${color3}${execi 3600 python ~/Conky/scripts/conkyForecast.py &#8211;location=ARBA0009 &#8211;datatype=PC}$color<br />${alignc}${color1}Presión: ${color3}${execi 3600 python ~/Conky/scripts/conkyForecast.py &#8211;location=ARBA0009 &#8211;datatype=BR} &#8211; ${color3}${execi 3600 python ~/Conky/scripts/conkyForecast.py &#8211;location=ARBA0009 &#8211;datatype=BD}$color<br />${color4}${hr}$color<br />${color1}Salida del Sol: ${color3}${execi 3600 python ~/Conky/scripts/conkyForecast.py &#8211;location=ARBA0009 &#8211;datatype=SR}${alignr 2}${color1}Ocaso: ${color3}${execi 3600 python ~/Conky/scripts/conkyForecast.py &#8211;location=ARBA0009 &#8211;datatype=SS}$color<br />${voffset 15}${color1}Luna:${color4}${alignr 2}${color3}${execi 3600 python ~/Conky/scripts/conkyForecast.py &#8211;location=ARBA0009 &#8211;datatype=MP}$color<br />${voffset -20}${offset 80}${color4}${font moon phases:size=20}${execi 3600 python ~/Conky/scripts/conkyForecast.py &#8211;location=ARBA0009 &#8211;datatype=MF}$font$color<br />${color0}${hr}$color<br />${voffset 5}${color2}IP:${alignc}$color${addr eth0}<br />${color1}Down: $color${downspeed eth0}k/s ${alignr 2}${color1}Up: $color${upspeed eth0}k/s<br />${color1}Total: $color${totaldown eth0} ${alignr 2}${color1}Total: $color${totalup eth0}<br />${color1}Inbound: $color${tcp_portmon 1 32767 count}          ${color1}Outbound: $color${tcp_portmon 32768 61000 count}${alignr 2}${color1}Total: $color${tcp_portmon 1 65535 count}<br />${voffset 5}${color2}Connections: $color${tcp_portmon 32768 61000 count} ${alignr 2} ${color2}Service/Port $color<br />${voffset 5}${tcp_portmon 32768 61000 rhost 0} ${alignr 2} ${tcp_portmon 32768 61000 rservice 0}<br />${tcp_portmon 32768 61000 rhost 1} ${alignr 2} ${tcp_portmon 32768 61000 rservice 1}<br />${tcp_portmon 32768 61000 rhost 2} ${alignr 2} ${tcp_portmon 32768 61000 rservice 2}<br />${tcp_portmon 32768 61000 rhost 3} ${alignr 2} ${tcp_portmon 32768 61000 rservice 3}<br />${tcp_portmon 32768 61000 rhost 4} ${alignr 2} ${tcp_portmon 32768 61000 rservice 4}<br />${tcp_portmon 32768 61000 rhost 5} ${alignr 2} ${tcp_portmon 32768 61000 rservice 5}$color</p></blockquote>
<p>creamos el archivo  ~/Conky/conkyforecast<br />
<blockquote>gedit ~/Conky/conkyforecast</p></blockquote>
<p>y pegamos dentro lo siguiente<br />
<blockquote>background no<br />own_window yes<br />own_window_transparent yes<br />own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager<br />own_window_colour black<br />double_buffer yes<br />use_spacer left<br />use_xft    yes<br />font calibri:size=8<br />xftfont calibri:size=8<br />xftalpha 0.5<br />update_interval 5.0<br />uppercase no  # set to yes if you want all text to be in uppercase<br />stippled_borders 3<br />border_margin 9<br />border_width 10<br />default_color white<br />default_outline_color black<br />default_shade_color black<br />color0 cyan<br />color1 lightblue<br />color2 orange<br />color3 yellow<br />color4 wheat<br />color5 white<br />color6 white<br />color7 white<br />color8 white<br />color9 white<br />alignment bottom_left  # or top_left, bottom_left, bottom_right<br />gap_x 10<br />gap_y 35<br />text_buffer_size 1024 # use 1024 for the forecast<br />no_buffers yes  # Subtract file system buffers from used memory?<br />draw_borders no<br />draw_outline yes  # amplifies text if yes<br />draw_shades yes  # shadecolor black</p>
<p>TEXT<br />${color4}${font calibri:size=11}Pronostico Extendido$font$color<br />${color0}${hr}$color<br />${color4}${font calibri:size=9}${execi 3600 python ~/Conky/scripts/conkyForecast.py &#8211;location=ARBA0009 &#8211;template=/home/usuario/Conky/scripts/myweather.template}$font$color</p></blockquote>
<p>creamos el archivo  ~/Conky/conkymail<br />
<blockquote>gedit  ~/Conky/conkymail</p></blockquote>
<p>pegamos dentro del archivo lo siguiente<br />
<blockquote>background no<br />own_window yes<br />own_window_transparent yes<br />own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager<br />own_window_colour black<br />double_buffer yes<br />use_spacer left<br />use_xft    yes<br />font calibri:size=8<br />xftfont calibri:size=8<br />xftalpha 0.5<br />update_interval 5.0<br />uppercase no  # set to yes if you want all text to be in uppercase<br />stippled_borders 3<br />border_margin 9<br />border_width 10<br />default_color white<br />default_outline_color black<br />default_shade_color black<br />color0 cyan<br />color1 lightblue<br />color2 orange<br />color3 yellow<br />color4 wheat<br />color5 white<br />color6 white<br />color7 white<br />color8 white<br />color9 white<br />alignment bottom_left  # or top_left, bottom_left, bottom_right<br />gap_x 565<br />gap_y 35<br />text_buffer_size 128 # use 1024 for the forecast<br />no_buffers yes  # Subtract file system buffers from used memory?<br />draw_borders no<br />draw_outline yes  # amplifies text if yes<br />draw_shades yes  # shadecolor black</p>
<p>TEXT<br />${font calibri:size=11}${alignc}${color4}Gmail<br />${color0}${hr}$color<br />${font calibri:size=11}${color4}Tenemos  ${color3}${execi 300 python ~/Conky/scripts/mail/conkyEmail.py}${color4}  email(s)$font</p></blockquote>
<p>Creamos un archivo en ~/Conky/scripts/conkyForecast.py (hay que crear la carpeta scripts)<br />
<blockquote>gedit ~/Conky/scripts/conkyForecast.py</p></blockquote>
<p>
<blockquote>#!/usr/bin/python<br /># -*- coding: utf-8 -*-<br />###############################################################################<br /># conkyForecast.py is a (not so) simple (anymore) python script to gather<br /># details of the current weather for use in conky.<br />#<br />#  Author: Kaivalagi<br /># Created: 13/04/2008<br /># Modifications:<br />#    14/04/2008    Allow day ranges for forecast data<br />#    14/04/2008    Check for connectivity to xoap service<br />#    18/04/2008    Allow the setting of spaces for ranged output<br />#    18/04/2008    Allow Night and Day forecast output<br />#    18/04/2008    Support locale for condition code text &#8220;CC&#8221; option, awaiting spanish language translation<br />#    18/04/2008    Use pickling for class data rather than opening xml, this bypasses the need to interrogate cached data<br />#    19/04/2008    Added spanish condition text &#8211; Thanks Bruce M<br />#    19/04/2008    Added isnumeric check on all numeric output with units suffix<br />#    19/04/2008    Altered pickle file naming to include location code<br />#    19/04/2008    Added spanish week days conversion via locale<br />#    20/04/2008    Added decent command argument parser<br />#    20/04/2008    Added &#8211;shortweekday option, if given the day of week data type is shortened to 3 characters<br />#    21/04/2008    Fixed locale options for forecast output<br />#    21/04/2008    Added &#8211;template option to allow custom output using a single exec call <img src='http://ubunlog.com/wp-includes/images/smilies/icon_smile.gif' alt="Conky, Mi configuración" class='wp-smiley' title="Conky, Mi configuración" /> <br />#    21/04/2008    Added &#8211;hideunits option to remove, for example, mph and C from output<br />#    23/04/2008    Removed &#8211;imperial option from template, this MUST be set as a standard option on the script call and not used in the template file.<br />#    23/04/2008    Readded &#8211;imperial option to template, enabling metric or imperial values per datatype. Note when using templates command line option will not work.<br />#    23/04/2008    Added output notifying user if the location given is bad<br />#    24/04/2008    Added handling for no connectivity, will revert to cached data now (erroring if no cache exists). Tests by trying to open xoap.weather.com<br />#    24/04/2008    Fixed Celsius to fahrenheit conversion<br />#    06/05/2008    Updated url used after webservice was updated<br />#    09/05/2008    Consolidated current condition and forecast data fetch into one call<br />#    09/05/2008    Added Sunrise and sunset to datatypes, these are specific to both current conditions and forecast data<br />#    09/05/2008    Added moon phase, barometer reading and barometer description to datatypes, these are only specific to current conditions and so are N/A in forecasted output<br />#    09/05/2008    Added unit conversions for barometer from mb to inches (imperial)<br />#   09/05/2008  Updated spanish condition text &#8211; Thanks Bruce M<br />#   10/05/2008  Added french locale data &#8211; Thanks benpaka<br />#   12/05/2008  Added new BF (bearing font) datatype to provide an arrow character (use with Arrow.ttf font) instead of NSEW output from WD (wind direction)<br />#   12/05/2008  Updated WD output to be locale specific, currently supports default english and spanish &#8211; Thanks Bruce M<br />#    18/05/2008    Added new MF (moon font) datatype to provide a moon font character (characters incorrect and no dedicated font yet).<br />#    21/05/2008    For current conditions the &#8211;datatype=LT option now displays &#8220;feels like&#8221; temperature rather than the current temperature<br />#<br /># TODO:<br /># Consolidate pkl files into one file/class<br /># Add a weather font based moon phase output based on moon icon data<br /># ??? Any more requirements out there?</p>
<p>import sys, os, socket, urllib2, datetime, time<br />from xml.dom import minidom<br />from stat import *<br />from optparse import OptionParser<br />import locale<br />import gettext<br />import pickle<br />from math import *</p>
<p>APP=&#8221;conkyForecast.py&#8221;<br />DIR=os.path.dirname (__file__) + &#8216;/locale&#8217;<br />gettext.bindtextdomain(APP, DIR)<br />gettext.textdomain(APP)<br />_ = gettext.gettext</p>
<p>class CommandLineParser:</p>
<p>parser = None</p>
<p>def __init__(self):</p>
<p>self.parser = OptionParser()<br />self.parser.add_option(&#8220;-l&#8221;,&#8221;&#8211;location&#8221;, dest=&#8221;location&#8221;, default=&#8221;UKXX0103&#8243;, type=&#8221;string&#8221;, metavar=&#8221;CODE&#8221;, help=u&#8221;location code for weather data [default: %default],Use the following url to determine your location code by city name: http://xoap.weather.com/search/search?where=Norwich&#8221;)<br />self.parser.add_option(&#8220;-d&#8221;,&#8221;&#8211;datatype&#8221;,dest=&#8221;datatype&#8221;, default=&#8221;HT&#8221;, type=&#8221;string&#8221;, metavar=&#8221;DATATYPE&#8221;, help=u&#8221;[default: %default] The data type options are: DW (Day Of Week), WF (Weather Font Output), LT (Forecast:Low Temp,Current:Feels Like Temp), HT (Forecast:High Temp,Current:Current Temp), CC (Current Conditions), CT (Conditions Text), PC (Precipitation Chance), HM (Humidity), WD (Wind Direction), WS (Wind Speed), WG (Wind Gusts), CN (City Name), SR (sunrise), SS (sunset), MP (moon phase), MF (moon font), BR (barometer reading), BD (barometer description). Not applicable at command line when using templates.&#8221;)<br />self.parser.add_option(&#8220;-s&#8221;,&#8221;&#8211;startday&#8221;,dest=&#8221;startday&#8221;, type=&#8221;int&#8221;, metavar=&#8221;NUMBER&#8221;, help=u&#8221;define the starting day number, if omitted current conditions are output. Not applicable at command line when using templates.&#8221;)<br />self.parser.add_option(&#8220;-e&#8221;,&#8221;&#8211;endday&#8221;,dest=&#8221;endday&#8221;, type=&#8221;int&#8221;, metavar=&#8221;NUMBER&#8221;, help=u&#8221;define the ending day number, if omitted only starting day data is output. Not applicable at command line when using templates.&#8221;)<br />self.parser.add_option(&#8220;-S&#8221;,&#8221;&#8211;spaces&#8221;,dest=&#8221;spaces&#8221;, type=&#8221;int&#8221;, default=1, metavar=&#8221;NUMBER&#8221;, help=u&#8221;[default: %default] Define the number of spaces between ranged output. Not applicable at command line when using templates.&#8221;)<br />self.parser.add_option(&#8220;-t&#8221;,&#8221;&#8211;template&#8221;,dest=&#8221;template&#8221;, type=&#8221;string&#8221;, metavar=&#8221;FILE&#8221;, help=u&#8221;define a template file to generate output in one call. A displayable item in the file is in the form {&#8211;datatype=HT &#8211;startday=1}. The following are possible options within each item: &#8211;datatype,&#8211;startday,&#8211;endday,&#8211;night,&#8211;shortweekday,&#8211;imperial,&#8211;hideunits,&#8211;spaces . Note that the short forms of the options are not currently supported! None of these options are applicable at command line when using templates.&#8221;)<br />self.parser.add_option(&#8220;-L&#8221;,&#8221;&#8211;locale&#8221;,dest=&#8221;locale&#8221;, type=&#8221;string&#8221;, help=u&#8221;override the system locale for language output (en=english, es=spanish, fr=french, more to come)&#8221;)<br />self.parser.add_option(&#8220;-i&#8221;,&#8221;&#8211;imperial&#8221;,dest=&#8221;imperial&#8221;, default=False, action=&#8221;store_true&#8221;, help=u&#8221;request imperial units, if omitted output is in metric. Not applicable at command line when using templates.&#8221;)<br />self.parser.add_option(&#8220;-n&#8221;,&#8221;&#8211;night&#8221;,dest=&#8221;night&#8221;, default=False, action=&#8221;store_true&#8221;, help=u&#8221;switch output to night data, if omitted day output will be output. Not applicable at command line when using templates.&#8221;)<br />self.parser.add_option(&#8220;-w&#8221;,&#8221;&#8211;shortweekday&#8221;,dest=&#8221;shortweekday&#8221;, default=False, action=&#8221;store_true&#8221;, help=u&#8221;Shorten the day of week data type to 3 characters. Not applicable at command line when using templates.&#8221;)<br />self.parser.add_option(&#8220;-u&#8221;,&#8221;&#8211;hideunits&#8221;,dest=&#8221;hideunits&#8221;, default=False, action=&#8221;store_true&#8221;, help=u&#8221;Hide units such as mph or C, degree symbols (°) are still shown. Not applicable at command line when using templates.&#8221;)<br />self.parser.add_option(&#8220;-v&#8221;,&#8221;&#8211;verbose&#8221;,dest=&#8221;verbose&#8221;, default=False, action=&#8221;store_true&#8221;, help=u&#8221;request verbose output, no a good idea when running through conky!&#8221;)<br />self.parser.add_option(&#8220;-r&#8221;,&#8221;&#8211;refetch&#8221;,dest=&#8221;refetch&#8221;, default=False, action=&#8221;store_true&#8221;, help=u&#8221;fetch data regardless of data expiry&#8221;)</p>
<p>def parse_args(self):<br />(options, args) = self.parser.parse_args()<br />return (options, args)</p>
<p>def print_help(self):<br />return self.parser.print_help()</p>
<p>class WeatherData:<br />def __init__(self, day_of_week, low, high, condition_code, condition_text, precip, humidity, wind_dir, wind_speed, wind_gusts, city, sunrise, sunset, moon_phase, moon_icon, bar_read, bar_desc):<br />self.day_of_week = u&#8221;"+day_of_week<br />self.low = u&#8221;"+low<br />self.high = u&#8221;"+high<br />self.condition_code = u&#8221;"+condition_code<br />self.condition_text = u&#8221;"+condition_text<br />self.precip = u&#8221;"+precip<br />self.humidity = u&#8221;"+humidity<br />self.wind_dir = u&#8221;"+wind_dir<br />self.wind_speed = u&#8221;"+wind_speed<br />self.wind_gusts = u&#8221;"+wind_gusts<br />self.city = u&#8221;"+city<br />self.sunrise = u&#8221;"+sunrise<br />self.sunset = u&#8221;"+sunset<br />self.moon_phase = u&#8221;"+moon_phase<br />self.moon_icon = u&#8221;"+moon_icon<br />self.bar_read = u&#8221;"+bar_read<br />self.bar_desc = u&#8221;"+bar_desc</p>
<p>class WeatherText:</p>
<p>conditions_text = {<br />&#8220;0&#8243;: _(u&#8221;Tornado&#8221;),<br />&#8220;1&#8243;: _(u&#8221;Tropical Storm&#8221;),<br />&#8220;2&#8243;: _(u&#8221;Hurricane&#8221;),<br />&#8220;3&#8243;: _(u&#8221;Severe Thunderstorms&#8221;),<br />&#8220;4&#8243;: _(u&#8221;Thunderstorms&#8221;),<br />&#8220;5&#8243;: _(u&#8221;Mixed Rain and Snow&#8221;),<br />&#8220;6&#8243;: _(u&#8221;Mixed Rain and Sleet&#8221;),<br />&#8220;7&#8243;: _(u&#8221;Mixed Precipitation&#8221;),<br />&#8220;8&#8243;: _(u&#8221;Freezing Drizzle&#8221;),<br />&#8220;9&#8243;: _(u&#8221;Drizzle&#8221;),<br />&#8220;10&#8243;: _(u&#8221;Freezing Rain&#8221;),<br />&#8220;11&#8243;: _(u&#8221;Showers&#8221;),<br />&#8220;12&#8243;: _(u&#8221;Showers&#8221;),<br />&#8220;13&#8243;: _(u&#8221;Snow Flurries&#8221;),<br />&#8220;14&#8243;: _(u&#8221;Light Snow Showers&#8221;),<br />&#8220;15&#8243;: _(u&#8221;Blowing Snow&#8221;),<br />&#8220;16&#8243;: _(u&#8221;Snow&#8221;),<br />&#8220;17&#8243;: _(u&#8221;Hail&#8221;),<br />&#8220;18&#8243;: _(u&#8221;Sleet&#8221;),<br />&#8220;19&#8243;: _(u&#8221;Dust&#8221;),<br />&#8220;20&#8243;: _(u&#8221;Fog&#8221;),<br />&#8220;21&#8243;: _(u&#8221;Haze&#8221;),<br />&#8220;22&#8243;: _(u&#8221;Smoke&#8221;),<br />&#8220;23&#8243;: _(u&#8221;Blustery&#8221;),<br />&#8220;24&#8243;: _(u&#8221;Windy&#8221;),<br />&#8220;25&#8243;: _(u&#8221;Cold&#8221;),<br />&#8220;26&#8243;: _(u&#8221;Cloudy&#8221;),<br />&#8220;27&#8243;: _(u&#8221;Mostly Cloudy&#8221;),<br />&#8220;28&#8243;: _(u&#8221;Mostly Cloudy&#8221;),<br />&#8220;29&#8243;: _(u&#8221;Partly Cloudy&#8221;),<br />&#8220;30&#8243;: _(u&#8221;Partly Cloudy&#8221;),<br />&#8220;31&#8243;: _(u&#8221;Clear&#8221;),<br />&#8220;32&#8243;: _(u&#8221;Clear&#8221;),<br />&#8220;33&#8243;: _(u&#8221;Fair&#8221;),<br />&#8220;34&#8243;: _(u&#8221;Fair&#8221;),<br />&#8220;35&#8243;: _(u&#8221;Mixed Rain and Hail&#8221;),<br />&#8220;36&#8243;: _(u&#8221;Hot&#8221;),<br />&#8220;37&#8243;: _(u&#8221;Isolated Thunderstorms&#8221;),<br />&#8220;38&#8243;: _(u&#8221;Scattered Thunderstorms&#8221;),<br />&#8220;39&#8243;: _(u&#8221;Scattered Thunderstorms&#8221;),<br />&#8220;40&#8243;: _(u&#8221;Scattered Showers&#8221;),<br />&#8220;41&#8243;: _(u&#8221;Heavy Snow&#8221;),<br />&#8220;42&#8243;: _(u&#8221;Scattered Snow Showers&#8221;),<br />&#8220;43&#8243;: _(u&#8221;Heavy Snow&#8221;),<br />&#8220;44&#8243;: _(u&#8221;Partly Cloudy&#8221;),<br />&#8220;45&#8243;: _(u&#8221;Thunder Showers&#8221;),<br />&#8220;46&#8243;: _(u&#8221;Snow Showers&#8221;),<br />&#8220;47&#8243;: _(u&#8221;Isolated Thunderstorms&#8221;),<br />&#8220;na&#8221;: _(u&#8221;N/A&#8221;),<br />&#8220;-&#8221;: _(u&#8221;N/A&#8221;)<br />}</p>
<p>conditions_text_es = {<br />&#8220;0&#8243;: _(u&#8221;Tornado&#8221;),<br />&#8220;1&#8243;: _(u&#8221;Tormenta Tropical&#8221;),<br />&#8220;2&#8243;: _(u&#8221;Huracá¡n&#8221;),<br />&#8220;3&#8243;: _(u&#8221;Tormentas Fuertes&#8221;),<br />&#8220;4&#8243;: _(u&#8221;Tormentas&#8221;),<br />&#8220;5&#8243;: _(u&#8221;Lluvia y Nieve Mezclada&#8221;),<br />&#8220;6&#8243;: _(u&#8221;Lluvia y Aguanieve Mezclada&#8221;),<br />&#8220;7&#8243;: _(u&#8221;Aguanieve&#8221;),<br />&#8220;8&#8243;: _(u&#8221;Llovizna Helada&#8221;),<br />&#8220;9&#8243;: _(u&#8221;Llovizna&#8221;),<br />&#8220;10&#8243;: _(u&#8221;Lluvia Engelante&#8221;), # o lluvia helada<br />&#8220;11&#8243;: _(u&#8221;Chaparrones&#8221;),<br />&#8220;12&#8243;: _(u&#8221;Chaparrones&#8221;),<br />&#8220;13&#8243;: _(u&#8221;Nieve Ligera&#8221;),<br />&#8220;14&#8243;: _(u&#8221;Nieve Ligera&#8221;),<br />&#8220;15&#8243;: _(u&#8221;Ventisca de Nieve&#8221;),<br />&#8220;16&#8243;: _(u&#8221;Nieve&#8221;),<br />&#8220;17&#8243;: _(u&#8221;Granizo&#8221;),<br />&#8220;18&#8243;: _(u&#8221;Aguanieve&#8221;),<br />&#8220;19&#8243;: _(u&#8221;Polvo&#8221;),<br />&#8220;20&#8243;: _(u&#8221;Niebla&#8221;),<br />&#8220;21&#8243;: _(u&#8221;Bruma&#8221;),<br />&#8220;22&#8243;: _(u&#8221;Humo&#8221;),<br />&#8220;23&#8243;: _(u&#8221;Tempestad&#8221;),<br />&#8220;24&#8243;: _(u&#8221;Ventoso&#8221;),<br />&#8220;25&#8243;: _(u&#8221;Fráo&#8221;),<br />&#8220;26&#8243;: _(u&#8221;Muy Nublado&#8221;),<br />&#8220;27&#8243;: _(u&#8221;Principalmente Nublado&#8221;),<br />&#8220;28&#8243;: _(u&#8221;Principalmente Nublado&#8221;),<br />&#8220;29&#8243;: _(u&#8221;Parcialmente Nublado&#8221;),<br />&#8220;30&#8243;: _(u&#8221;Parcialmente Nublado&#8221;),<br />&#8220;31&#8243;: _(u&#8221;Despejado&#8221;),<br />&#8220;32&#8243;: _(u&#8221;Despejado&#8221;),<br />&#8220;33&#8243;: _(u&#8221;Algo Nublado&#8221;),<br />&#8220;34&#8243;: _(u&#8221;Algo Nublado&#8221;),<br />&#8220;35&#8243;: _(u&#8221;Lluvia con Granizo&#8221;),<br />&#8220;36&#8243;: _(u&#8221;Calor&#8221;),<br />&#8220;37&#8243;: _(u&#8221;Tormentas Aisladas&#8221;),<br />&#8220;38&#8243;: _(u&#8221;Tormentas Dispersas&#8221;),<br />&#8220;39&#8243;: _(u&#8221;Tormentas Dispersas&#8221;),<br />&#8220;40&#8243;: _(u&#8221;Chubascos Dispersos&#8221;),<br />&#8220;41&#8243;: _(u&#8221;Nieve Pesada&#8221;),<br />&#8220;42&#8243;: _(u&#8221;Nevadas Débiles y Dispersas&#8221;),<br />&#8220;43&#8243;: _(u&#8221;Nevada Intensa&#8221;),<br />&#8220;44&#8243;: _(u&#8221;Nubes Dispersas&#8221;),<br />&#8220;45&#8243;: _(u&#8221;Tormentas&#8221;),<br />&#8220;46&#8243;: _(u&#8221;Nevadas Dispersas&#8221;),<br />&#8220;47&#8243;: _(u&#8221;Tormentas Aisladas&#8221;),<br />&#8220;na&#8221;: _(u&#8221;N/A&#8221;),<br />&#8220;-&#8221;: _(u&#8221;N/A&#8221;)<br />}</p>
<p>conditions_text_fr = {<br />&#8220;0&#8243;: _(u&#8221;Tornade&#8221;),<br />&#8220;1&#8243;: _(u&#8221;Tempête Tropicale&#8221;),<br />&#8220;2&#8243;: _(u&#8221;Ouragan&#8221;),<br />&#8220;3&#8243;: _(u&#8221;Orages Violents&#8221;),<br />&#8220;4&#8243;: _(u&#8221;Orageux&#8221;),<br />&#8220;5&#8243;: _(u&#8221;Pluie et Neige&#8221;),<br />&#8220;6&#8243;: _(u&#8221;Pluie et Neige Mouillée&#8221;),<br />&#8220;7&#8243;: _(u&#8221;Variable avec averses&#8221;),<br />&#8220;8&#8243;: _(u&#8221;Bruine Givrante&#8221;),<br />&#8220;9&#8243;: _(u&#8221;Bruine&#8221;),<br />&#8220;10&#8243;: _(u&#8221;Pluie Glacante&#8221;),<br />&#8220;11&#8243;: _(u&#8221;Averses&#8221;),<br />&#8220;12&#8243;: _(u&#8221;Averses&#8221;),<br />&#8220;13&#8243;: _(u&#8221;Légère Neige&#8221;),<br />&#8220;14&#8243;: _(u&#8221;Forte Neige&#8221;),<br />&#8220;15&#8243;: _(u&#8221;Tempête de Neige&#8221;),<br />&#8220;16&#8243;: _(u&#8221;Neige&#8221;),<br />&#8220;17&#8243;: _(u&#8221;Grêle&#8221;),<br />&#8220;18&#8243;: _(u&#8221;Pluie/Neige&#8221;),<br />&#8220;19&#8243;: _(u&#8221;Nuage de poussière&#8221;),<br />&#8220;20&#8243;: _(u&#8221;Brouillard&#8221;),<br />&#8220;21&#8243;: _(u&#8221;Brume&#8221;),<br />&#8220;22&#8243;: _(u&#8221;Fumée&#8221;),<br />&#8220;23&#8243;: _(u&#8221;Tres Venteux&#8221;),<br />&#8220;24&#8243;: _(u&#8221;Venteux&#8221;),<br />&#8220;25&#8243;: _(u&#8221;Froid&#8221;),<br />&#8220;26&#8243;: _(u&#8221;Nuageux&#8221;),<br />&#8220;27&#8243;: _(u&#8221;Tres Nuageux&#8221;),<br />&#8220;28&#8243;: _(u&#8221;Tres Nuageux&#8221;),<br />&#8220;29&#8243;: _(u&#8221;Nuages Disséminés&#8221;),<br />&#8220;30&#8243;: _(u&#8221;Nuages Disséminés&#8221;),<br />&#8220;31&#8243;: _(u&#8221;Beau&#8221;),<br />&#8220;32&#8243;: _(u&#8221;Beau&#8221;),<br />&#8220;33&#8243;: _(u&#8221;Belles Éclaircies&#8221;),<br />&#8220;34&#8243;: _(u&#8221;Belles Éclaircies&#8221;),<br />&#8220;35&#8243;: _(u&#8221;Pluie avec Grêle&#8221;),<br />&#8220;36&#8243;: _(u&#8221;Chaleur&#8221;),<br />&#8220;37&#8243;: _(u&#8221;Orages Isolés&#8221;),<br />&#8220;38&#8243;: _(u&#8221;Orages Localisés&#8221;),<br />&#8220;39&#8243;: _(u&#8221;Orages Localisés&#8221;),<br />&#8220;40&#8243;: _(u&#8221;Averses Localisées&#8221;),<br />&#8220;41&#8243;: _(u&#8221;Neige Lourde&#8221;),<br />&#8220;42&#8243;: _(u&#8221;Tempête de Neige Localisées&#8221;),<br />&#8220;43&#8243;: _(u&#8221;Neige Lourde&#8221;),<br />&#8220;44&#8243;: _(u&#8221;Nuages Disséminés&#8221;),<br />&#8220;45&#8243;: _(u&#8221;Orages&#8221;),<br />&#8220;46&#8243;: _(u&#8221;Tempête de Neige&#8221;),<br />&#8220;47&#8243;: _(u&#8221;Orages Isolés&#8221;),<br />&#8220;na&#8221;: _(u&#8221;N/A&#8221;),<br />&#8220;-&#8221;: _(u&#8221;N/A&#8221;)<br />}</p>
<p>conditions_weather_font = {<br />&#8220;0&#8243;: _(u&#8221;W&#8221;),<br />&#8220;1&#8243;: _(u&#8221;V&#8221;),<br />&#8220;2&#8243;: _(u&#8221;W&#8221;),<br />&#8220;3&#8243;: _(u&#8221;s&#8221;),<br />&#8220;4&#8243;: _(u&#8221;p&#8221;),<br />&#8220;5&#8243;: _(u&#8221;k&#8221;),<br />&#8220;6&#8243;: _(u&#8221;k&#8221;),<br />&#8220;7&#8243;: _(u&#8221;g&#8221;),<br />&#8220;8&#8243;: _(u&#8221;g&#8221;),<br />&#8220;9&#8243;: _(u&#8221;g&#8221;),<br />&#8220;10&#8243;: _(u&#8221;h&#8221;),<br />&#8220;11&#8243;: _(u&#8221;g&#8221;),<br />&#8220;12&#8243;: _(u&#8221;g&#8221;),<br />&#8220;13&#8243;: _(u&#8221;k&#8221;),<br />&#8220;14&#8243;: _(u&#8221;k&#8221;),<br />&#8220;15&#8243;: _(u&#8221;k&#8221;),<br />&#8220;16&#8243;: _(u&#8221;k&#8221;),<br />&#8220;17&#8243;: _(u&#8221;k&#8221;),<br />&#8220;18&#8243;: _(u&#8221;k&#8221;),<br />&#8220;19&#8243;: _(u&#8221;e&#8221;),<br />&#8220;20&#8243;: _(u&#8221;e&#8221;),<br />&#8220;21&#8243;: _(u&#8221;a&#8221;),<br />&#8220;22&#8243;: _(u&#8221;d&#8221;),<br />&#8220;23&#8243;: _(u&#8221;d&#8221;),<br />&#8220;24&#8243;: _(u&#8221;d&#8221;),<br />&#8220;25&#8243;: _(u&#8221;d&#8221;),<br />&#8220;26&#8243;: _(u&#8221;e&#8221;),<br />&#8220;27&#8243;: _(u&#8221;e&#8221;),<br />&#8220;28&#8243;: _(u&#8221;e&#8221;),<br />&#8220;29&#8243;: _(u&#8221;c&#8221;),<br />&#8220;30&#8243;: _(u&#8221;c&#8221;),<br />&#8220;31&#8243;: _(u&#8221;a&#8221;),<br />&#8220;32&#8243;: _(u&#8221;a&#8221;),<br />&#8220;33&#8243;: _(u&#8221;b&#8221;),<br />&#8220;34&#8243;: _(u&#8221;b&#8221;),<br />&#8220;35&#8243;: _(u&#8221;k&#8221;),<br />&#8220;36&#8243;: _(u&#8221;a&#8221;),<br />&#8220;37&#8243;: _(u&#8221;f&#8221;),<br />&#8220;38&#8243;: _(u&#8221;f&#8221;),<br />&#8220;39&#8243;: _(u&#8221;f&#8221;),<br />&#8220;40&#8243;: _(u&#8221;g&#8221;),<br />&#8220;41&#8243;: _(u&#8221;k&#8221;),<br />&#8220;42&#8243;: _(u&#8221;k&#8221;),<br />&#8220;43&#8243;: _(u&#8221;k&#8221;),<br />&#8220;44&#8243;: _(u&#8221;b&#8221;),<br />&#8220;45&#8243;: _(u&#8221;g&#8221;),<br />&#8220;46&#8243;: _(u&#8221;k&#8221;),<br />&#8220;47&#8243;: _(u&#8221;f&#8221;),<br />&#8220;na&#8221;: _(u&#8221;"),<br />&#8220;-&#8221;: _(u&#8221;")<br />}</p>
<p>conditions_moon_font = {<br />&#8220;0&#8243;: _(u&#8221;1&#8243;),<br />&#8220;1&#8243;: _(u&#8221;N&#8221;),<br />&#8220;2&#8243;: _(u&#8221;O&#8221;),<br />&#8220;3&#8243;: _(u&#8221;P&#8221;),<br />&#8220;4&#8243;: _(u&#8221;Q&#8221;),<br />&#8220;5&#8243;: _(u&#8221;R&#8221;),<br />&#8220;6&#8243;: _(u&#8221;S&#8221;),<br />&#8220;7&#8243;: _(u&#8221;T&#8221;),<br />&#8220;8&#8243;: _(u&#8221;U&#8221;),<br />&#8220;9&#8243;: _(u&#8221;V&#8221;),<br />&#8220;10&#8243;: _(u&#8221;W&#8221;),<br />&#8220;11&#8243;: _(u&#8221;X&#8221;),<br />&#8220;12&#8243;: _(u&#8221;Y&#8221;),<br />&#8220;13&#8243;: _(u&#8221;Z&#8221;),<br />&#8220;14&#8243;: _(u&#8221;0&#8243;),<br />&#8220;15&#8243;: _(u&#8221;0&#8243;),<br />&#8220;16&#8243;: _(u&#8221;A&#8221;),<br />&#8220;17&#8243;: _(u&#8221;B&#8221;),<br />&#8220;18&#8243;: _(u&#8221;C&#8221;),<br />&#8220;19&#8243;: _(u&#8221;D&#8221;),<br />&#8220;20&#8243;: _(u&#8221;E&#8221;),<br />&#8220;21&#8243;: _(u&#8221;F&#8221;),<br />&#8220;22&#8243;: _(u&#8221;G&#8221;),<br />&#8220;23&#8243;: _(u&#8221;H&#8221;),<br />&#8220;24&#8243;: _(u&#8221;I&#8221;),<br />&#8220;25&#8243;: _(u&#8221;J&#8221;),<br />&#8220;26&#8243;: _(u&#8221;K&#8221;),<br />&#8220;27&#8243;: _(u&#8221;L&#8221;),<br />&#8220;28&#8243;: _(u&#8221;M&#8221;),<br />&#8220;29&#8243;: _(u&#8221;1&#8243;),<br />&#8220;na&#8221;: _(u&#8221;"),<br />&#8220;-&#8221;: _(u&#8221;")<br />}</p>
<p>day_of_week = {<br />&#8220;Today&#8221;: _(u&#8221;Today&#8221;),<br />&#8220;Monday&#8221;: _(u&#8221;Monday&#8221;),<br />&#8220;Tuesday&#8221;: _(u&#8221;Tuesday&#8221;),<br />&#8220;Wednesday&#8221;: _(u&#8221;Wednesday&#8221;),<br />&#8220;Thursday&#8221;: _(u&#8221;Thursday&#8221;),<br />&#8220;Friday&#8221;: _(u&#8221;Friday&#8221;),<br />&#8220;Saturday&#8221;: _(u&#8221;Saturday&#8221;),<br />&#8220;Sunday&#8221;: _(u&#8221;Sunday&#8221;)<br />}</p>
<p>day_of_week_short = {<br />&#8220;Today&#8221;: _(u&#8221;Now&#8221;),<br />&#8220;Monday&#8221;: _(u&#8221;Mon&#8221;),<br />&#8220;Tuesday&#8221;: _(u&#8221;Tue&#8221;),<br />&#8220;Wednesday&#8221;: _(u&#8221;Wed&#8221;),<br />&#8220;Thursday&#8221;: _(u&#8221;Thu&#8221;),<br />&#8220;Friday&#8221;: _(u&#8221;Fri&#8221;),<br />&#8220;Saturday&#8221;: _(u&#8221;Sat&#8221;),<br />&#8220;Sunday&#8221;: _(u&#8221;Sun&#8221;)<br />}</p>
<p>day_of_week_es = {<br />&#8220;Today&#8221;: _(u&#8221;hoy&#8221;),<br />&#8220;Monday&#8221;: _(u&#8221;lunes&#8221;),<br />&#8220;Tuesday&#8221;: _(u&#8221;martes&#8221;),<br />&#8220;Wednesday&#8221;: _(u&#8221;miércoles&#8221;),<br />&#8220;Thursday&#8221;: _(u&#8221;jueves&#8221;),<br />&#8220;Friday&#8221;: _(u&#8221;viernes&#8221;),<br />&#8220;Saturday&#8221;: _(u&#8221;sábado&#8221;),<br />&#8220;Sunday&#8221;: _(u&#8221;domingo&#8221;)<br />}</p>
<p>day_of_week_short_es = {<br />&#8220;Today&#8221;: _(u&#8221;hoy&#8221;),<br />&#8220;Monday&#8221;: _(u&#8221;lun&#8221;),<br />&#8220;Tuesday&#8221;: _(u&#8221;mar&#8221;),<br />&#8220;Wednesday&#8221;: _(u&#8221;mié&#8221;),<br />&#8220;Thursday&#8221;: _(u&#8221;jue&#8221;),<br />&#8220;Friday&#8221;: _(u&#8221;vie&#8221;),<br />&#8220;Saturday&#8221;: _(u&#8221;sáb&#8221;),<br />&#8220;Sunday&#8221;: _(u&#8221;dom&#8221;)<br />}</p>
<p>day_of_week_fr = {<br />&#8220;Today&#8221;: _(u&#8221;Aujourd&#8217;hui&#8221;),<br />&#8220;Monday&#8221;: _(u&#8221;Lundi&#8221;),<br />&#8220;Tuesday&#8221;: _(u&#8221;Mardi&#8221;),<br />&#8220;Wednesday&#8221;: _(u&#8221;Mercredi&#8221;),<br />&#8220;Thursday&#8221;: _(u&#8221;Jeudi&#8221;),<br />&#8220;Friday&#8221;: _(u&#8221;Vendredi&#8221;),<br />&#8220;Saturday&#8221;: _(u&#8221;Samedi&#8221;),<br />&#8220;Sunday&#8221;: _(u&#8221;Dimanche&#8221;)<br />}</p>
<p>day_of_week_short_fr = {<br />&#8220;Today&#8221;: _(u&#8221;Auj&#8221;),<br />&#8220;Monday&#8221;: _(u&#8221;Lun&#8221;),<br />&#8220;Tuesday&#8221;: _(u&#8221;Mar&#8221;),<br />&#8220;Wednesday&#8221;: _(u&#8221;Mer&#8221;),<br />&#8220;Thursday&#8221;: _(u&#8221;Jeu&#8221;),<br />&#8220;Friday&#8221;: _(u&#8221;Ven&#8221;),<br />&#8220;Saturday&#8221;: _(u&#8221;Sam&#8221;),<br />&#8220;Sunday&#8221;: _(u&#8221;Dim&#8221;)<br />}</p>
<p>bearing_arrow_font = {<br />&#8220;N&#8221;: _(u&#8221;i&#8221;),<br />&#8220;NNE&#8221;: _(u&#8221;j&#8221;),<br />&#8220;NE&#8221;: _(u&#8221;k&#8221;),<br />&#8220;ENE&#8221;: _(u&#8221;l&#8221;),<br />&#8220;E&#8221;: _(u&#8221;m&#8221;),<br />&#8220;ESE&#8221;: _(u&#8221;n&#8221;),<br />&#8220;SE&#8221;: _(u&#8221;o&#8221;),<br />&#8220;SSE&#8221;: _(u&#8221;p&#8221;),<br />&#8220;S&#8221;: _(u&#8221;a&#8221;),<br />&#8220;SSW&#8221;: _(u&#8221;b&#8221;),<br />&#8220;SW&#8221;: _(u&#8221;c&#8221;),<br />&#8220;WSW&#8221;: _(u&#8221;d&#8221;),<br />&#8220;W&#8221;: _(u&#8221;e&#8221;),<br />&#8220;WNW&#8221;: _(u&#8221;f&#8221;),<br />&#8220;NW&#8221;: _(u&#8221;g&#8221;),<br />&#8220;NNW&#8221;: _(u&#8221;h&#8221;),<br />&#8220;N/A&#8221;: _(u&#8221; &#8220;)<br />}</p>
<p>bearing_text_es = {<br />&#8220;N&#8221;: _(u&#8221;N&#8221;),<br />&#8220;NNE&#8221;: _(u&#8221;NNE&#8221;),<br />&#8220;NE&#8221;: _(u&#8221;NE&#8221;),<br />&#8220;ENE&#8221;: _(u&#8221;ENE&#8221;),<br />&#8220;E&#8221;: _(u&#8221;E&#8221;),<br />&#8220;ESE&#8221;: _(u&#8221;ESE&#8221;),<br />&#8220;SE&#8221;: _(u&#8221;SE&#8221;),<br />&#8220;SSE&#8221;: _(u&#8221;SSE&#8221;),<br />&#8220;S&#8221;: _(u&#8221;S&#8221;),<br />&#8220;SSW&#8221;: _(u&#8221;SSO&#8221;),<br />&#8220;SW&#8221;: _(u&#8221;SO&#8221;),<br />&#8220;WSW&#8221;: _(u&#8221;WOW&#8221;),<br />&#8220;W&#8221;: _(u&#8221;O&#8221;),<br />&#8220;WNW&#8221;: _(u&#8221;ONO&#8221;),<br />&#8220;NW&#8221;: _(u&#8221;NO&#8221;),<br />&#8220;NNW&#8221;: _(u&#8221;NNO&#8221;),<br />&#8220;N/A&#8221;: _(u&#8221;N\A&#8221;)<br />}</p>
<p>bearing_text_fr = {<br />&#8220;N&#8221;: _(u&#8221;N&#8221;),<br />&#8220;NNE&#8221;: _(u&#8221;NNE&#8221;),<br />&#8220;NE&#8221;: _(u&#8221;NE&#8221;),<br />&#8220;ENE&#8221;: _(u&#8221;ENE&#8221;),<br />&#8220;E&#8221;: _(u&#8221;E&#8221;),<br />&#8220;ESE&#8221;: _(u&#8221;ESE&#8221;),<br />&#8220;SE&#8221;: _(u&#8221;SE&#8221;),<br />&#8220;SSE&#8221;: _(u&#8221;SSE&#8221;),<br />&#8220;S&#8221;: _(u&#8221;S&#8221;),<br />&#8220;SSW&#8221;: _(u&#8221;SSO&#8221;),<br />&#8220;SW&#8221;: _(u&#8221;SO&#8221;),<br />&#8220;WSW&#8221;: _(u&#8221;WOW&#8221;),<br />&#8220;W&#8221;: _(u&#8221;O&#8221;),<br />&#8220;WNW&#8221;: _(u&#8221;ONO&#8221;),<br />&#8220;NW&#8221;: _(u&#8221;NO&#8221;),<br />&#8220;NNW&#8221;: _(u&#8221;NNO&#8221;),<br />&#8220;N/A&#8221;: _(u&#8221;N\A&#8221;)<br />}</p>
<p>class GlobalWeather:</p>
<p>current_conditions = []<br />day_forecast = []<br />night_forecast = []</p>
<p>locale = &#8220;en&#8221;</p>
<p>options = None<br />weatherxmldoc = &#8220;&#8221;</p>
<p>TEMP_FILEPATH_CURRENT = &#8220;/tmp/conkyForecast-c-LOCATION.pkl&#8221;<br />TEMP_FILEPATH_DAYFORECAST = &#8220;/tmp/conkyForecast-df-LOCATION.pkl&#8221;<br />TEMP_FILEPATH_NIGHTFORECAST = &#8220;/tmp/conkyForecast-nf-LOCATION.pkl&#8221;<br />EXPIRY_MINUTES = 30<br />DEFAULT_SPACING = u&#8221; &#8220;</p>
<p>def __init__(self,options):</p>
<p>self.options = options</p>
<p>if self.options.locale == None:<br />try:<br />#self.locale = locale.getdefaultlocale()[0][0:2]<br />self.locale = &#8220;es&#8221; #uncomment this line to force Spanish locale<br />#self.locale = &#8220;fr&#8221; #uncomment this line to force French locale<br />except:<br />print &#8220;locale not set&#8221;<br />else:<br />#self.locale = self.options.locale<br />self.locale = &#8220;es&#8221; #uncomment this line to force Spanish locale<br />#self.locale = &#8220;fr&#8221; #uncomment this line to force French locale</p>
<p>if self.options.verbose == True:<br />print &gt;&gt; sys.stdout, &#8220;locale set to &#8220;,self.locale</p>
<p>def getText(self,nodelist):<br />rc = &#8220;&#8221;<br />for node in nodelist:<br />if node.nodeType == node.TEXT_NODE:<br />rc = rc + node.data<br />return rc</p>
<p>def getSpaces(self,spaces):<br />string = u&#8221;"<br />if spaces == None:<br />string = self.DEFAULT_SPACING<br />else:<br />for i in range(0, spaces+1):<br />string = string + u&#8221; &#8220;<br />return string</p>
<p>def isNumeric(self,string):<br />try:<br />dummy = float(string)<br />return True<br />except:<br />return False</p>
<p>def isConnectionAvailable(self):<br /># ensure we can access weather.com&#8217;s server by opening the url<br />try:<br />usock = urllib2.urlopen(&#8216;http://xoap.weather.com&#8217;)<br />usock.close()<br />return True<br />except:<br />return False</p>
<p>def getBearingText(self,bearing):<br />bearing = float(bearing)<br />if bearing &lt; 11.25:<br />return u&#8221;N&#8221;<br />elif bearing &lt; 33.75:<br />return u&#8221;NNE&#8221;<br />elif bearing &lt; 56.25:<br />return u&#8221;NE&#8221;<br />elif bearing &lt; 78.75:<br />return u&#8221;ENE&#8221;<br />elif bearing &lt; 101.25:<br />return u&#8221;E&#8221;<br />elif bearing &lt; 123.75:<br />return u&#8221;ESE&#8221;<br />elif bearing &lt; 146.25:<br />return u&#8221;SE&#8221;<br />elif bearing &lt; 168.75:<br />return u&#8221;SSE&#8221;<br />elif bearing &lt; 191.25:<br />return u&#8221;S&#8221;<br />elif bearing &lt; 213.75:<br />return u&#8221;SSW&#8221;<br />elif bearing &lt; 236.25:<br />return u&#8221;SW&#8221;<br />elif bearing &lt; 258.75:<br />return u&#8221;WSW&#8221;<br />elif bearing &lt; 281.25:<br />return u&#8221;W&#8221;<br />elif bearing &lt; 303.75:<br />return u&#8221;WNW&#8221;<br />elif bearing &lt; 326.25:<br />return u&#8221;NW&#8221;<br />elif bearing &lt; 348.75:<br />return u&#8221;NNW&#8221;<br />else:<br />return &#8220;N/A&#8221;</p>
<p>def convertCelsiusToFahrenheit(self,temp):<br />return str(int(floor(((float(temp)*9.0)/5.0)+32)))</p>
<p>def convertKilometresToMiles(self,dist):<br />return str(int(floor(float(dist)*0.621371192)))</p>
<p>def convertMillibarsToInches(self,mb):<br />return str(int(floor(float(mb)/33.8582)))</p>
<p>def getTemplateList(self,template):</p>
<p>templatelist = []</p>
<p>for template_part in template.split(&#8220;{&#8220;):<br />if template_part != &#8220;&#8221;:<br />for template_part in template_part.split(&#8220;}&#8221;):<br />if template_part != &#8220;&#8221;:<br />templatelist.append(u&#8221;"+template_part)</p>
<p>return templatelist</p>
<p>def getOutputText(self,datatype,startday,endday,night,shortweekday,imperial,hideunits,spaces):<br />#try:<br />output = u&#8221;"</p>
<p># define current units for output<br />if hideunits == False:<br />if imperial == False:<br />tempunit = u&#8221;°C&#8221;<br />speedunit = u&#8221;kph&#8221;<br />pressureunit = u&#8221;mb&#8221;<br />else:<br />tempunit = u&#8221;°F&#8221;<br />speedunit = u&#8221;mph&#8221;<br />pressureunit = u&#8221;in&#8221;<br />else:<br />tempunit = u&#8221;°&#8221;<br />speedunit = u&#8221;"<br />pressureunit = u&#8221;"</p>
<p>if startday == None: # current conditions</p>
<p>if datatype == &#8220;DW&#8221;:<br />if self.locale == &#8220;es&#8221;:<br />if shortweekday == True:<br />output = WeatherText.day_of_week_short_es[self.current_conditions[0].day_of_week]<br />else:<br />output = WeatherText.day_of_week_es[self.current_conditions[0].day_of_week]<br />elif self.locale == &#8220;fr&#8221;:<br />if shortweekday == True:<br />output = WeatherText.day_of_week_short_fr[self.current_conditions[0].day_of_week]<br />else:<br />output = WeatherText.day_of_week_fr[self.current_conditions[0].day_of_week]<br />else:<br />if shortweekday == True:<br />output = WeatherText.day_of_week_short[self.current_conditions[0].day_of_week]<br />else:<br />output = WeatherText.day_of_week[self.current_conditions[0].day_of_week]<br />elif datatype == &#8220;WF&#8221;: # weather font<br />output = WeatherText.conditions_weather_font[self.current_conditions[0].condition_code]<br />elif datatype == &#8220;LT&#8221;:<br />string = self.current_conditions[0].low<br />if self.isNumeric(string) == True:<br />if imperial == True:<br />string = self.convertCelsiusToFahrenheit(string)<br />string = string + tempunit<br />output = string<br />elif datatype == &#8220;HT&#8221;:<br />string = self.current_conditions[0].high<br />if self.isNumeric(string) == True:<br />if imperial == True:<br />string = self.convertCelsiusToFahrenheit(string)<br />string = string + tempunit<br />output = string<br />elif datatype == &#8220;CC&#8221;:<br />if self.locale == &#8220;es&#8221;:<br />output = WeatherText.conditions_text_es[self.current_conditions[0].condition_code]<br />elif self.locale == &#8220;fr&#8221;:<br />output = WeatherText.conditions_text_fr[self.current_conditions[0].condition_code]<br />else:<br />output = WeatherText.conditions_text[self.current_conditions[0].condition_code]<br />elif datatype == &#8220;CT&#8221;:<br />output = self.current_conditions[0].condition_text<br />elif datatype == &#8220;PC&#8221;:<br />string = self.current_conditions[0].precip<br />if self.isNumeric(string) == True:<br />string = string + u&#8221;%&#8221;<br />output = string<br />elif datatype == &#8220;HM&#8221;:<br />string = self.current_conditions[0].humidity<br />if self.isNumeric(string) == True:<br />string = string + u&#8221;%&#8221;<br />output = string<br />elif datatype == &#8220;WD&#8221;:<br />string = self.current_conditions[0].wind_dir<br />if self.isNumeric(string) == True:<br />string = self.getBearingText(string)</p>
<p>if self.locale == &#8220;es&#8221;:<br />output = WeatherText.bearing_text_es[string]<br />elif self.locale == &#8220;fr&#8221;:<br />output = WeatherText.bearing_text_fr[string]<br />else:<br />output = string</p>
<p>elif datatype == &#8220;BF&#8221;:<br />string = self.current_conditions[0].wind_dir<br />if self.isNumeric(string) == True:<br />string = WeatherText.bearing_arrow_font[self.getBearingText(string)]<br />output = string<br />elif datatype == &#8220;WS&#8221;:<br />string = self.current_conditions[0].wind_speed<br />if self.isNumeric(string) == True:<br />if imperial == True:<br />string = self.convertKilometresToMiles(string)<br />string = string + speedunit<br />output = string<br />elif datatype == &#8220;WG&#8221;:<br />string = self.current_conditions[0].wind_gusts<br />if self.isNumeric(string) == True:<br />if imperial == True:<br />string = self.convertKilometresToMiles(string)<br />string = string + speedunit<br />output = string<br />elif datatype == &#8220;CN&#8221;:<br />output = self.current_conditions[0].city<br />elif datatype == &#8220;SR&#8221;:<br />output = self.current_conditions[0].sunrise<br />elif datatype == &#8220;SS&#8221;:<br />output = self.current_conditions[0].sunset<br />elif datatype == &#8220;MP&#8221;:<br />output = self.current_conditions[0].moon_phase<br />elif datatype == &#8220;MF&#8221;:<br />output = WeatherText.conditions_moon_font[self.current_conditions[0].moon_icon]<br />elif datatype == &#8220;BR&#8221;:<br />string = self.current_conditions[0].bar_read<br />if self.isNumeric(string) == True:<br />if imperial == True:<br />string = self.convertMillibarsToInches(string)<br />string = string + pressureunit<br />output = string<br />elif datatype == &#8220;BD&#8221;:<br />output = self.current_conditions[0].bar_desc<br />else:<br />output = &#8220;\nERROR:Unknown data type requested&#8221;</p>
<p>else: # forecast data</p>
<p>if endday == None: # if no endday was set use startday<br />endday = startday</p>
<p>if night == True: # night forecast required</p>
<p>for day_number in range(startday, endday+1):</p>
<p>if datatype == &#8220;DW&#8221;:<br />if self.locale == &#8220;es&#8221;:<br />if shortweekday == True:<br />output = output + self.getSpaces(spaces) + WeatherText.day_of_week_short_es[self.night_forecast[day_number].day_of_week]<br />else:<br />output = output + self.getSpaces(spaces) + WeatherText.day_of_week_es[self.night_forecast[day_number].day_of_week]<br />elif self.locale == &#8220;fr&#8221;:<br />if shortweekday == True:<br />output = output + self.getSpaces(spaces) + WeatherText.day_of_week_short_fr[self.night_forecast[day_number].day_of_week]<br />else:<br />output = output + self.getSpaces(spaces) + WeatherText.day_of_week_fr[self.night_forecast[day_number].day_of_week]<br />else:<br />if shortweekday == True:<br />output = output + self.getSpaces(spaces) + WeatherText.day_of_week_short[self.night_forecast[day_number].day_of_week]<br />else:<br />output = output + self.getSpaces(spaces) + WeatherText.day_of_week[self.night_forecast[day_number].day_of_week]<br />elif datatype == &#8220;WF&#8221;: # weather font<br />output = output + self.getSpaces(spaces) + WeatherText.conditions_weather_font[self.night_forecast[day_number].condition_code]<br />elif datatype == &#8220;LT&#8221;:<br />string = self.night_forecast[day_number].low<br />if self.isNumeric(string) == True:<br />if imperial == True:<br />string = self.convertCelsiusToFahrenheit(string)<br />string = string + tempunit<br />output = output + self.getSpaces(spaces) + string</p>
<p>elif datatype == &#8220;HT&#8221;:<br />string = self.night_forecast[day_number].high<br />if self.isNumeric(string) == True:<br />if imperial == True:<br />string = self.convertCelsiusToFahrenheit(string)<br />string = string + tempunit<br />output = output + self.getSpaces(spaces) + string<br />elif datatype == &#8220;CC&#8221;:<br />if self.locale == &#8220;es&#8221;:<br />output = output + self.getSpaces(spaces) + WeatherText.conditions_text_es[self.night_forecast[day_number].condition_code]<br />elif self.locale == &#8220;fr&#8221;:<br />output = output + self.getSpaces(spaces) + WeatherText.conditions_text_fr[self.night_forecast[day_number].condition_code]<br />else:<br />output = output + self.getSpaces(spaces) + WeatherText.conditions_text[self.night_forecast[day_number].condition_code]<br />elif datatype == &#8220;CT&#8221;:<br />output = output + self.getSpaces(spaces) + self.night_forecast[day_number].condition_text<br />elif datatype == &#8220;PC&#8221;:<br />string = self.night_forecast[day_number].precip<br />if self.isNumeric(string) == True:<br />string = string + u&#8221;%&#8221;<br />output = output + self.getSpaces(spaces) + string<br />elif datatype == &#8220;HM&#8221;:<br />string = self.night_forecast[day_number].humidity<br />if self.isNumeric(string) == True:<br />string = string + u&#8221;%&#8221;<br />output = output + self.getSpaces(spaces) + string<br />elif datatype == &#8220;WD&#8221;:<br />string = self.night_forecast[day_number].wind_dir<br />if self.locale == &#8220;es&#8221;:<br />output = output + self.getSpaces(spaces) + WeatherText.bearing_text_es[string]<br />elif self.locale == &#8220;fr&#8221;:<br />output = output + self.getSpaces(spaces) + WeatherText.bearing_text_fr[string]<br />else:<br />output = output + self.getSpaces(spaces) + string</p>
<p>elif datatype == &#8220;BF&#8221;:<br />output = output + self.getSpaces(spaces) + WeatherText.bearing_arrow_font[self.night_forecast[day_number].wind_dir]<br />elif datatype == &#8220;WS&#8221;:<br />string = self.night_forecast[day_number].wind_speed<br />if self.isNumeric(string) == True:<br />if imperial == True:<br />string = self.convertKilometresToMiles(string)<br />string = string + speedunit<br />output = output + self.getSpaces(spaces) + string<br />elif datatype == &#8220;WG&#8221;:<br />string = self.night_forecast[day_number].wind_gusts<br />if self.isNumeric(string) == True:<br />if imperial == True:<br />string = self.convertKilometresToMiles(string)<br />string = string + speedunit<br />output = output + self.getSpaces(spaces) + string<br />elif datatype == &#8220;CN&#8221;:<br />output = output + self.getSpaces(spaces) + self.night_forecast[day_number].city<br />elif datatype == &#8220;SR&#8221;:<br />output = output + self.getSpaces(spaces) + self.night_forecast[day_number].sunrise<br />elif datatype == &#8220;SS&#8221;:<br />output = output + self.getSpaces(spaces) + self.night_forecast[day_number].sunset<br />elif datatype == &#8220;MP&#8221;:<br />output = output + self.getSpaces(spaces) + self.night_forecast[day_number].moon_phase<br />elif datatype == &#8220;MF&#8221;:<br />output = output + self.getSpaces(spaces) + WeatherText.conditions_moon_font[self.night_forecast[day_number].moon_icon]<br />elif datatype == &#8220;BR&#8221;:<br />output = output + self.getSpaces(spaces) + self.night_forecast[day_number].bar_read<br />elif datatype == &#8220;BD&#8221;:<br />output = output + self.getSpaces(spaces) + self.night_forecast[day_number].bar_desc<br />else:<br />output = &#8220;\nERROR:Unknown data type requested&#8221;<br />break</p>
<p>else: # day forecast wanted</p>
<p>for day_number in range(startday, endday+1):</p>
<p>if datatype == &#8220;DW&#8221;:<br />if self.locale == &#8220;es&#8221;:<br />if shortweekday == True:<br />output = output + self.getSpaces(spaces) + WeatherText.day_of_week_short_es[self.day_forecast[day_number].day_of_week]<br />else:<br />output = output + self.getSpaces(spaces) + WeatherText.day_of_week_es[self.day_forecast[day_number].day_of_week]<br />elif self.locale == &#8220;fr&#8221;:<br />if shortweekday == True:<br />output = output + self.getSpaces(spaces) + WeatherText.day_of_week_short_fr[self.day_forecast[day_number].day_of_week]<br />else:<br />output = output + self.getSpaces(spaces) + WeatherText.day_of_week_fr[self.day_forecast[day_number].day_of_week]<br />else:<br />if shortweekday == True:<br />output = output + self.getSpaces(spaces) + WeatherText.day_of_week_short[self.day_forecast[day_number].day_of_week]<br />else:<br />output = output + self.getSpaces(spaces) + WeatherText.day_of_week[self.day_forecast[day_number].day_of_week]<br />elif datatype == &#8220;WF&#8221;: # weather font<br />output = output + self.getSpaces(spaces) + WeatherText.conditions_weather_font[self.day_forecast[day_number].condition_code]<br />elif datatype == &#8220;LT&#8221;:<br />string = self.day_forecast[day_number].low<br />if self.isNumeric(string) == True:<br />if imperial == True:<br />string = self.convertCelsiusToFahrenheit(string)<br />string = string + tempunit<br />output = output + self.getSpaces(spaces) + string<br />elif datatype == &#8220;HT&#8221;:<br />string = self.day_forecast[day_number].high<br />if self.isNumeric(string) == True:<br />if imperial == True:<br />string = self.convertCelsiusToFahrenheit(string)<br />string = string + tempunit<br />output = output + self.getSpaces(spaces) + string<br />elif datatype == &#8220;CC&#8221;:<br />if self.locale == &#8220;es&#8221;:<br />output = output + self.getSpaces(spaces) + WeatherText.conditions_text_es[self.day_forecast[day_number].condition_code]<br />elif self.locale == &#8220;fr&#8221;:<br />output = output + self.getSpaces(spaces) + WeatherText.conditions_text_fr[self.day_forecast[day_number].condition_code]<br />else:<br />output = output + self.getSpaces(spaces) + WeatherText.conditions_text[self.day_forecast[day_number].condition_code]<br />elif datatype == &#8220;CT&#8221;:<br />output = output + self.getSpaces(spaces) + self.day_forecast[day_number].condition_text<br />elif datatype == &#8220;PC&#8221;:<br />string = self.day_forecast[day_number].precip<br />if self.isNumeric(string) == True:<br />string = string + u&#8221;%&#8221;<br />output = output + self.getSpaces(spaces) + string<br />elif datatype == &#8220;HM&#8221;:<br />string = self.day_forecast[day_number].humidity<br />if self.isNumeric(string) == True:<br />string = string + u&#8221;%&#8221;<br />output = output + self.getSpaces(spaces) + string<br />elif datatype == &#8220;WD&#8221;:<br />string = self.day_forecast[day_number].wind_dir</p>
<p>if self.locale == &#8220;es&#8221;:<br />output = output + self.getSpaces(spaces) + WeatherText.bearing_text_es[string]<br />elif self.locale == &#8220;fr&#8221;:<br />output = output + self.getSpaces(spaces) + WeatherText.bearing_text_fr[string]<br />else:<br />output = output + self.getSpaces(spaces) + string</p>
<p>elif datatype == &#8220;BF&#8221;:<br />output = output + self.getSpaces(spaces) + WeatherText.bearing_arrow_font[self.day_forecast[day_number].wind_dir]<br />elif datatype == &#8220;WS&#8221;:<br />string = self.day_forecast[day_number].wind_speed<br />if self.isNumeric(string) == True:<br />if imperial == True:<br />string = self.convertKilometresToMiles(string)<br />string = string + speedunit<br />output = output + self.getSpaces(spaces) + string<br />elif datatype == &#8220;WG&#8221;:<br />string = self.day_forecast[day_number].wind_gusts<br />if self.isNumeric(string) == True:<br />if imperial == True:<br />string = self.convertKilometresToMiles(string)<br />string = string + speedunit<br />output = output + self.getSpaces(spaces) + string<br />elif datatype == &#8220;CN&#8221;:<br />output = output + self.getSpaces(spaces) + self.day_forecast[day_number].city<br />elif datatype == &#8220;SR&#8221;:<br />output = output + self.getSpaces(spaces) + self.day_forecast[day_number].sunrise<br />elif datatype == &#8220;SS&#8221;:<br />output = output + self.getSpaces(spaces) + self.day_forecast[day_number].sunset<br />elif datatype == &#8220;MP&#8221;:<br />output = output + self.getSpaces(spaces) + self.day_forecast[day_number].moon_phase<br />elif datatype == &#8220;MF&#8221;:<br />output = output + self.getSpaces(spaces) + WeatherText.conditions_moon_font[self.day_forecast[day_number].moon_icon]<br />elif datatype == &#8220;BR&#8221;:<br />output = output + self.getSpaces(spaces) + self.day_forecast[day_number].bar_read<br />elif datatype == &#8220;BD&#8221;:<br />output = output + self.getSpaces(spaces) + self.day_forecast[day_number].bar_desc<br />else:<br />output = u&#8221;\nERROR:Unknown data type requested&#8221;<br />break</p>
<p>output = u&#8221;"+output.strip(u&#8221; &#8220;) # lose leading/trailing spaces<br />return output</p>
<p>#except:<br />#print &#8220;getOutputText:Unexpected error: &#8220;, sys.exc_info()[0]</p>
<p>def getOutputTextFromTemplate(self,template):<br />#try:</p>
<p># keys to template data<br />DATATYPE_KEY = &#8220;&#8211;datatype=&#8221;<br />STARTDAY_KEY = &#8220;&#8211;startday=&#8221;<br />ENDDAY_KEY = &#8220;&#8211;endday=&#8221;<br />NIGHT_KEY = &#8220;&#8211;night&#8221;<br />SHORTWEEKDAY_KEY = &#8220;&#8211;shortweekday&#8221;<br />IMPERIAL_KEY = &#8220;&#8211;imperial&#8221;<br />HIDEUNITS_KEY = &#8220;&#8211;hideunits&#8221;<br />SPACES_KEY = &#8220;&#8211;spaces=&#8221;</p>
<p>output = u&#8221;"</p>
<p>optionfound = False</p>
<p>#load the file<br />try:<br />fileinput = open(self.options.template)<br />template = fileinput.read()<br />fileinput.close()<br />except:<br />output = u&#8221;Template file no found!&#8221;</p>
<p>templatelist = self.getTemplateList(template)</p>
<p># lets walk through the template list and determine the output for each item found<br />for i in range(0,len(templatelist)-1):</p>
<p>pos = templatelist[i].find(DATATYPE_KEY)<br />if pos != -1:<br />optionfound = True<br />pos = pos + len(DATATYPE_KEY)<br />datatype = templatelist[i][pos:pos+4].strip(&#8220;}&#8221;).strip(&#8220;{&#8220;).strip(&#8220;-&#8221;).strip(&#8221; &#8220;)<br />else:<br />datatype = None</p>
<p>pos = templatelist[i].find(STARTDAY_KEY)<br />if pos != -1:<br />optionfound = True<br />pos = pos + len(STARTDAY_KEY)<br />startday = int(templatelist[i][pos:pos+4].strip(&#8220;}&#8221;).strip(&#8220;{&#8220;).strip(&#8220;-&#8221;).strip(&#8221; &#8220;))<br />else:<br />startday = None</p>
<p>pos = templatelist[i].find(ENDDAY_KEY)<br />if pos != -1:<br />optionfound = True<br />pos = pos + len(ENDDAY_KEY)<br />endday = int(templatelist[i][pos:pos+4].strip(&#8220;}&#8221;).strip(&#8220;{&#8220;).strip(&#8220;-&#8221;).strip(&#8221; &#8220;))<br />else:<br />endday = None</p>
<p>pos = templatelist[i].find(NIGHT_KEY)<br />if pos != -1:<br />optionfound = True<br />night = True<br />else:<br />night = False</p>
<p>pos = templatelist[i].find(SHORTWEEKDAY_KEY)<br />if pos != -1:<br />optionfound = True<br />shortweekday = True<br />else:<br />shortweekday = False</p>
<p>pos = templatelist[i].find(IMPERIAL_KEY)<br />if pos != -1:<br />optionfound = True<br />imperial = True<br />else:<br />imperial = False</p>
<p>pos = templatelist[i].find(HIDEUNITS_KEY)<br />if pos != -1:<br />optionfound = True<br />hideunits = True<br />else:<br />hideunits = False</p>
<p>pos = templatelist[i].find(SPACES_KEY)<br />if pos != -1:<br />optionfound = True<br />pos = pos + len(SPACES_KEY)<br />spaces = int(templatelist[i][pos:pos+4].strip(&#8220;}&#8221;).strip(&#8220;{&#8220;).strip(&#8220;-&#8221;).strip(&#8221; &#8220;))<br />else:<br />spaces = 1</p>
<p>if optionfound == True:<br />templatelist[i] = self.getOutputText(datatype,startday,endday,night,shortweekday,imperial,hideunits,spaces)<br />optionfound = False</p>
<p># go through the list concatenating the output now that it&#8217;s been populated<br />for item in templatelist:<br />output = output + item</p>
<p>return output</p>
<p>#except:<br />#print &#8220;getOutputTextFromTemplate:Unexpected error: &#8220;, sys.exc_info()[0]</p>
<p>def fetchData(self):</p>
<p># always fetch metric data, use conversation functions on this data<br />file_path_current = self.TEMP_FILEPATH_CURRENT.replace(&#8220;LOCATION&#8221;,self.options.location)<br />file_path_dayforecast = self.TEMP_FILEPATH_DAYFORECAST.replace(&#8220;LOCATION&#8221;,self.options.location)<br />file_path_nightforecast = self.TEMP_FILEPATH_NIGHTFORECAST.replace(&#8220;LOCATION&#8221;,self.options.location)</p>
<p>if self.isConnectionAvailable() == False:<br />if os.path.exists(file_path_current):<br />RefetchData = False<br />else: # no connection, no cache, bang!<br />print &#8220;No internet connection is available and no cached weather data exists.&#8221;<br />elif self.options.refetch == True:<br />RefetchData = True<br />else:<br /># does the data need retrieving again?<br />if os.path.exists(file_path_current):<br />lastmodDate = time.localtime(os.stat(file_path_current)[ST_MTIME])<br />expiryDate = (datetime.datetime.today() &#8211; datetime.timedelta(minutes=self.EXPIRY_MINUTES)).timetuple()</p>
<p>if expiryDate &gt; lastmodDate:<br />RefetchData = True<br />else:<br />RefetchData = False<br />else:<br />RefetchData = True</p>
<p># fetch the current conditions data, either from the website or by &#8216;unpickling&#8217;<br />if RefetchData == True:</p>
<p># obtain current conditions data from xoap service<br />try:</p>
<p># http://xoap.weather.com/weather/local/UKXX0103?cc=*&amp;dayf=5&amp;link=xoap∏=xoap&amp;par=1061785028&amp;key=e374effbfd74930b</p>
<p>url = &#8216;http://xoap.weather.com/weather/local/&#8217; + self.options.location + &#8216;?cc=*&amp;dayf=8&amp;link=xoap∏=xoap&amp;par=1061785028&amp;key=e374effbfd74930b&amp;unit=m&#8217;<br />if self.options.verbose == True:<br />print &gt;&gt; sys.stdout, &#8220;fetching weather data from &#8220;,url</p>
<p>usock = urllib2.urlopen(url)<br />xml = usock.read()<br />usock.close()<br />self.weatherxmldoc = minidom.parseString(xml)<br />except:<br />print &#8220;fetchData:Unexpected error: &#8220;, sys.exc_info()[0]<br />print &#8220;Unable to contact weather source for current conditions&#8221;</p>
<p># tell the user if the location is bad&#8230;<br />found = xml.find(&#8220;Invalid location provided&#8221;)<br />if found != -1:<br />print &#8220;Invalid location provided&#8221;</p>
<p># interrogate weather data, load into class structure and pickle it<br />try:</p>
<p># prepare weather data lists<br />self.current_conditions = []<br />self.day_forecast = []<br />self.night_forecast = []</p>
<p># collect general data<br />weather_n = self.weatherxmldoc.documentElement<br />location_n = weather_n.getElementsByTagName(&#8216;loc&#8217;)[0]<br />city_n = location_n.getElementsByTagName(&#8216;dnam&#8217;)[0]<br />city = self.getText(city_n.childNodes)</p>
<p># collect current conditions data<br />day_of_week = u&#8221;Today&#8221;<br />precip = u&#8221;N/A&#8221;<br />sunrise_n = location_n.getElementsByTagName(&#8216;sunr&#8217;)[0]<br />sunrise = self.getText(sunrise_n.childNodes)<br />sunset_n = location_n.getElementsByTagName(&#8216;suns&#8217;)[0]<br />sunset = self.getText(sunset_n.childNodes)<br />current_condition_n = weather_n.getElementsByTagName(&#8216;cc&#8217;)[0]<br />current_desc_n = current_condition_n.getElementsByTagName(&#8216;t&#8217;)[0]<br />current_desc = self.getText(current_desc_n.childNodes)<br />current_code_n = current_condition_n.getElementsByTagName(&#8216;icon&#8217;)[0]<br />current_code = self.getText(current_code_n.childNodes)<br />current_temp_n = current_condition_n.getElementsByTagName(&#8216;tmp&#8217;)[0]<br />current_temp = self.getText(current_temp_n.childNodes)<br />current_temp_feels_n = current_condition_n.getElementsByTagName(&#8216;flik&#8217;)[0]<br />current_temp_feels = self.getText(current_temp_feels_n.childNodes)<br />bar_n = current_condition_n.getElementsByTagName(&#8216;bar&#8217;)[0]<br />bar_read_n = bar_n.getElementsByTagName(&#8216;r&#8217;)[0]<br />bar_read = self.getText(bar_read_n.childNodes)<br />bar_desc_n = bar_n.getElementsByTagName(&#8216;d&#8217;)[0]<br />bar_desc = self.getText(bar_desc_n.childNodes)<br />wind_n = current_condition_n.getElementsByTagName(&#8216;wind&#8217;)[0]<br />wind_speed_n = wind_n.getElementsByTagName(&#8216;s&#8217;)[0]<br />wind_speed = self.getText(wind_speed_n.childNodes)<br />wind_gust_n = wind_n.getElementsByTagName(&#8216;gust&#8217;)[0]<br />wind_gusts = self.getText(wind_gust_n.childNodes)<br />wind_dir_n = wind_n.getElementsByTagName(&#8216;d&#8217;)[0]<br />wind_direction = self.getText(wind_dir_n.childNodes)<br />humidity_n = current_condition_n.getElementsByTagName(&#8216;hmid&#8217;)[0]<br />humidity = self.getText(humidity_n.childNodes)<br />moon_n = current_condition_n.getElementsByTagName(&#8216;moon&#8217;)[0]<br />moon_icon_n = moon_n.getElementsByTagName(&#8216;icon&#8217;)[0]<br />moon_icon = self.getText(moon_icon_n.childNodes)<br />moon_phase_n = moon_n.getElementsByTagName(&#8216;t&#8217;)[0]<br />moon_phase = self.getText(moon_phase_n.childNodes)<br />current_conditions_data = WeatherData(day_of_week, current_temp_feels, current_temp, current_code, current_desc, precip, humidity, wind_direction, wind_speed, wind_gusts, city, sunrise, sunset, moon_phase, moon_icon, bar_read, bar_desc)<br />self.current_conditions.append(current_conditions_data)</p>
<p># collect forecast data<br />bar_read = u&#8221;N/A&#8221;<br />bar_desc = u&#8221;N/A&#8221;<br />moon_phase = u&#8221;N/A&#8221;<br />moon_icon = u&#8221;na&#8221;<br />forecast_n = weather_n.getElementsByTagName(&#8216;dayf&#8217;)[0]<br />day_nodes = forecast_n.getElementsByTagName(&#8216;day&#8217;)</p>
<p>for day in day_nodes:<br />day_of_week = day.getAttribute(&#8216;t&#8217;)<br />day_of_year = day.getAttribute(&#8216;dt&#8217;)<br />high_temp_n = day.getElementsByTagName(&#8216;hi&#8217;)[0]<br />high_temp = self.getText(high_temp_n.childNodes)<br />low_temp_n = day.getElementsByTagName(&#8216;low&#8217;)[0]<br />low_temp = self.getText(low_temp_n.childNodes)</p>
<p>sunrise_n = day.getElementsByTagName(&#8216;sunr&#8217;)[0]<br />sunrise = self.getText(sunrise_n.childNodes)<br />sunset_n = day.getElementsByTagName(&#8216;suns&#8217;)[0]<br />sunset = self.getText(sunset_n.childNodes)</p>
<p># day forecast specific data<br />daytime_n = day.getElementsByTagName(&#8216;part&#8217;)[0] # day<br />condition_code_n = daytime_n.getElementsByTagName(&#8216;icon&#8217;)[0]<br />condition_code = self.getText(condition_code_n.childNodes)<br />condition_n = daytime_n.getElementsByTagName(&#8216;t&#8217;)[0]<br />condition = self.getText(condition_n.childNodes)<br />precip_n = daytime_n.getElementsByTagName(&#8216;ppcp&#8217;)[0]<br />precip = self.getText(precip_n.childNodes)<br />humidity_n = daytime_n.getElementsByTagName(&#8216;hmid&#8217;)[0]<br />humidity = self.getText(humidity_n.childNodes)<br />wind_n = daytime_n.getElementsByTagName(&#8216;wind&#8217;)[0]<br />wind_speed_n = wind_n.getElementsByTagName(&#8216;s&#8217;)[0]<br />wind_speed = self.getText(wind_speed_n.childNodes)<br />wind_direction_n = wind_n.getElementsByTagName(&#8216;t&#8217;)[0]<br />wind_direction = self.getText(wind_direction_n.childNodes)<br />wind_gusts_n = wind_n.getElementsByTagName(&#8216;gust&#8217;)[0]<br />wind_gusts = self.getText(wind_gusts_n.childNodes)<br />day_forecast_data = WeatherData(day_of_week, low_temp, high_temp, condition_code, condition, precip, humidity, wind_direction, wind_speed, wind_gusts, city, sunrise, sunset, moon_phase, moon_icon, bar_read, bar_desc)<br />self.day_forecast.append(day_forecast_data)</p>
<p># night forecast specific data<br />daytime_n = day.getElementsByTagName(&#8216;part&#8217;)[1] # night<br />condition_code_n = daytime_n.getElementsByTagName(&#8216;icon&#8217;)[0]<br />condition_code = self.getText(condition_code_n.childNodes)<br />condition_n = daytime_n.getElementsByTagName(&#8216;t&#8217;)[0]<br />condition = self.getText(condition_n.childNodes)<br />precip_n = daytime_n.getElementsByTagName(&#8216;ppcp&#8217;)[0]<br />precip = self.getText(precip_n.childNodes)<br />humidity_n = daytime_n.getElementsByTagName(&#8216;hmid&#8217;)[0]<br />humidity = self.getText(humidity_n.childNodes)<br />wind_n = daytime_n.getElementsByTagName(&#8216;wind&#8217;)[0]<br />wind_speed_n = wind_n.getElementsByTagName(&#8216;s&#8217;)[0]<br />wind_speed = self.getText(wind_speed_n.childNodes)<br />wind_direction_n = wind_n.getElementsByTagName(&#8216;t&#8217;)[0]<br />wind_direction = self.getText(wind_direction_n.childNodes)<br />wind_gusts_n = wind_n.getElementsByTagName(&#8216;gust&#8217;)[0]<br />wind_gusts = self.getText(wind_gusts_n.childNodes)<br />night_forecast_data = WeatherData(day_of_week, low_temp, high_temp, condition_code, condition, precip, humidity, wind_direction, wind_speed, wind_gusts, city, sunrise, sunset, moon_phase, moon_icon, bar_read, bar_desc)<br />self.night_forecast.append(night_forecast_data)</p>
<p># pickle the data for next time!<br />fileoutput = open(file_path_current, &#8216;w&#8217;)<br />pickle.dump(self.current_conditions,fileoutput)<br />fileoutput.close()</p>
<p>fileoutput = open(file_path_dayforecast, &#8216;w&#8217;)<br />pickle.dump(self.day_forecast,fileoutput)<br />fileoutput.close()</p>
<p>fileoutput = open(file_path_nightforecast, &#8216;w&#8217;)<br />pickle.dump(self.night_forecast,fileoutput)<br />fileoutput.close()</p>
<p>except:<br />print &#8220;fetchData:Unexpected error: &#8220;, sys.exc_info()[0]<br />print &#8220;Unable to interrogate the weather data&#8221;</p>
<p>else: # fetch weather data from pickled class files<br />if self.options.verbose == True:<br />print &gt;&gt; sys.stdout, &#8220;fetching weather data from file: &#8220;,file_path_current</p>
<p>fileinput = open(file_path_current, &#8216;r&#8217;)<br />self.current_conditions = pickle.load(fileinput)<br />fileinput.close()</p>
<p>if self.options.verbose == True:<br />print &gt;&gt; sys.stdout, &#8220;fetching day forecast data from files: &#8220;,file_path_dayforecast, file_path_nightforecast</p>
<p>fileinput = open(file_path_dayforecast, &#8216;r&#8217;)<br />self.day_forecast = pickle.load(fileinput)<br />fileinput.close()</p>
<p>if self.options.verbose == True:<br />print &gt;&gt; sys.stdout, &#8220;fetching day forecast data from files: &#8220;,file_path_nightforecast, file_path_nightforecast</p>
<p>fileinput = open(file_path_nightforecast, &#8216;r&#8217;)<br />self.night_forecast = pickle.load(fileinput)<br />fileinput.close()</p>
<p>def outputData(self):<br />#try:</p>
<p>if self.options.template != None:</p>
<p>output = self.getOutputTextFromTemplate(self.options.template)</p>
<p>else:</p>
<p>output = self.getOutputText(self.options.datatype,self.options.startday,self.options.endday,self.options.night,self.options.shortweekday,self.options.imperial,self.options.hideunits,self.options.spaces)</p>
<p>print output.encode(&#8220;utf-8&#8243;)</p>
<p>#except:<br />#print &#8220;outputData:Unexpected error: &#8220;, sys.exc_info()[0]</p>
<p>if __name__ == &#8220;__main__&#8221;:</p>
<p>parser = CommandLineParser()<br />(options, args) = parser.parse_args()</p>
<p>if options.verbose == True:<br />print &gt;&gt; sys.stdout, &#8220;location:&#8221;,options.location<br />print &gt;&gt; sys.stdout, &#8220;imperial:&#8221;,options.imperial<br />print &gt;&gt; sys.stdout, &#8220;datatype:&#8221;,options.datatype<br />print &gt;&gt; sys.stdout, &#8220;night:&#8221;,options.night<br />print &gt;&gt; sys.stdout, &#8220;start day:&#8221;,options.startday<br />print &gt;&gt; sys.stdout, &#8220;end day:&#8221;,options.endday<br />print &gt;&gt; sys.stdout, &#8220;spaces:&#8221;,options.spaces<br />print &gt;&gt; sys.stdout, &#8220;verbose:&#8221;,options.verbose<br />print &gt;&gt; sys.stdout, &#8220;refetch:&#8221;,options.refetch</p>
<p># create new global weather object<br />weather = GlobalWeather(options)<br />weather.fetchData()<br />weather.outputData()</p></blockquote>
<p>Creamos el archivo ~/Conky/scripts/myweather.template<br />
<blockquote>gedit ~/Conky/scripts/myweather.template</p></blockquote>
<p>pegamos dentro lo siguiente:<br />
<blockquote>{&#8211;datatype=DW &#8211;startday=1}:  {&#8211;datatype=CC &#8211;startday=1}<br />{&#8211;datatype=HT &#8211;startday=1} / {&#8211;datatype=LT &#8211;startday=1}   Viento del {&#8211;datatype=WD &#8211;startday=1}  a  {&#8211;datatype=WS &#8211;startday=1}<br />Humedad: {&#8211;datatype=HM &#8211;startday=1}          Precipitacion: {&#8211;datatype=PC &#8211;startday=1}<br />Salida del Sol: {&#8211;datatype=SR &#8211;startday=1}   Ocaso: {&#8211;datatype=SS &#8211;startday=1}<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />{&#8211;datatype=DW &#8211;startday=2}:  {&#8211;datatype=CC &#8211;startday=2}<br />{&#8211;datatype=HT &#8211;startday=2} / {&#8211;datatype=LT &#8211;startday=2}   Viento del {&#8211;datatype=WD &#8211;startday=2}  a  {&#8211;datatype=WS &#8211;startday=2}<br />Humedad: {&#8211;datatype=HM &#8211;startday=2}          Precipitacion: {&#8211;datatype=PC &#8211;startday=2}<br />Salida del Sol: {&#8211;datatype=SR &#8211;startday=2}   Ocaso: {&#8211;datatype=SS &#8211;startday=2}<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />{&#8211;datatype=DW &#8211;startday=3}:  {&#8211;datatype=CC &#8211;startday=3}<br />{&#8211;datatype=HT &#8211;startday=3} / {&#8211;datatype=LT &#8211;startday=3}   Viento del {&#8211;datatype=WD &#8211;startday=3}  a  {&#8211;datatype=WS &#8211;startday=3}<br />Humedad: {&#8211;datatype=HM &#8211;startday=3}          Precipitacion: {&#8211;datatype=PC &#8211;startday=3}<br />Salida del Sol: {&#8211;datatype=SR &#8211;startday=3}   Ocaso: {&#8211;datatype=SS &#8211;startday=3}<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />{&#8211;datatype=DW &#8211;startday=4}:  {&#8211;datatype=CC &#8211;startday=4}<br />{&#8211;datatype=HT &#8211;startday=4} / {&#8211;datatype=LT &#8211;startday=4}   Viento del {&#8211;datatype=WD &#8211;startday=4}  a  {&#8211;datatype=WS &#8211;startday=4}<br />Humedad: {&#8211;datatype=HM &#8211;startday=4}          Precipitacion: {&#8211;datatype=PC &#8211;startday=4}<br />Salida del Sol: {&#8211;datatype=SR &#8211;startday=4}   Ocaso: {&#8211;datatype=SS &#8211;startday=4}</p></blockquote>
<p>Creamos el archivo ~/Conky/scripts/mail/conkyEmail.py ( hay que crear la carpeta mail)<br />
<blockquote>gedit ~/Conky/scripts/mail/conkyEmail.py</p></blockquote>
<p>y pegamos dentro lo siguiente:<br />
<blockquote>import os<br />import string</p>
<p>#Enter your username and password below within double quotes<br /># eg. username=&#8221;username&#8221; and password=&#8221;password&#8221;<br />username=&#8221;<span style="color:#ff0000;">TU_USUARIO_SINARROBA</span>&#8220;<br />password=&#8221;<span style="color:#0000ff;">TU_CLAVE</span>&#8220;</p>
<p>com=&#8221;wget -O &#8211; https://&#8221;+username+&#8221;:&#8221;+password+&#8221;@mail.google.com/mail/feed/atom &#8211;no-check-certificate&#8221;</p>
<p>temp=os.popen(com)<br />msg=temp.read()<br />index=string.find(msg,&#8221;&lt;fullcount&gt;&#8221;)<br />index2=string.find(msg,&#8221;&lt;/fullcount&gt;&#8221;)<br />fc=int(msg[index+11:index2])</p>
<p>if fc==0:<br />print &#8220;0 new&#8221;<br />else:<br />print str(fc)+&#8221; new&#8221;</p></blockquote>
<p><strong>Asique ahora tenes 7 archivos:</strong></p>
<p>En la carpeta: ~<br />&#8211;&gt; .startconky &lt;&lt;&#8211; hacer ejecutable</p>
<p>En la carpeta: ~/Conky<br />&#8211;&gt; conkymain<br />&#8211;&gt; conkyforecast<br />&#8211;&gt; conkymail</p>
<p>y en la carpeta: ~/Conky/scripts<br />&#8211;&gt; conkyForecast.py &lt;&lt;&#8211; hacer ejecutable<br />&#8211;&gt; myweather.template</p>
<p>y en la carpeta: ~/Conky/scripts/mail<br />conkyEmail.py &lt;&lt;&#8211; hacer ejecutable</p>
<p>y eso es todo, aclaraciones, donde dice /home/usuario/&#8230;va tu nombre de usuario y en la parte donde van los datos de Gmail, resalté en colores sonde hay que poner tus datos.</p>
<p>para matar el proceso de conky escribe en una consola<br />
<blockquote>killall conky</p></blockquote>
<p>para ejecutar conky escribe en una consola<br />
<blockquote>./.startconky</p></blockquote>
<p>una vez que tengas todo ajustado, si querés que conky inicie en cada sesión</p>
<p>Sistema&#8212;&gt;Preferencias&#8212;&gt;Sesiones  y en programas de inicio lo añadimos</p>
<p>en Nombre podemos escribir Conky, en Orden ./.startconky con eso se iniciará cada vez que enciendas la pc.</p>
<p>Eso es todo, espero que les sirva.</p>
<div  class="related_post_title"><h2>Post Relacionados</h2></div><ul class="related_post"><li><a href="http://ubunlog.com/mi-escritorio-agosto/" title="Mi escritorio, Agosto">Mi escritorio, Agosto</a></li><li><a href="http://ubunlog.com/arreglar-error-time-zone-argentina-tzdata/" title="Arreglar error time zone Argentina-tzdata">Arreglar error time zone Argentina-tzdata</a></li><li><a href="http://ubunlog.com/mi-escritorio-junio/" title="Mi escritorio Junio">Mi escritorio Junio</a></li><li><a href="http://ubunlog.com/instalar-codecs-multimedia-en-ubuntu-804/" title="Instalar codecs multimedia en Ubuntu 8.04">Instalar codecs multimedia en Ubuntu 8.04</a></li><li><a href="http://ubunlog.com/despues-de-instalar/" title="Después de instalar">Después de instalar</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ubunlog.com/conky-mi-configuracion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 22/53 queries in 0.226 seconds using disk: basic
Object Caching 1125/1159 objects using disk: basic

Served from: ubunlog.com @ 2012-05-25 10:21:03 -->
