Отображение погоды на рабочем столе

 
0
 
Python
ava
Novell | 28.09.2010, 14:41
Нашел статью здесь с примером обработки погодной информации с Yahoo. Решил по образу и подобию получить информацию с Gismeteo. Обработка полученных xml данных застопорилась. Согласно примера, в переменной после feedparser у меня находится содержимое запросов к серверу, а не полей с данными о погоде (согласно задумке smile ).
Подскажите, как обрабатывать xml данные.
Kommentare (17)
ava
pythonwin | 28.09.2010, 14:05 #
Novell, ты хочешь на свой сайт поставить значок погоды или использовать данные по погоде в GUI-программе?
ava
Novell | 28.09.2010, 14:31 #
аплет для Gnome нарисовать хочу.
ava
pythonwin | 29.09.2010, 00:04 #
Цитата (Novell @ 28.9.2010, 17:31 findReferencedText)
аплет для Gnome нарисовать хочу.

а чем gweather не устраивает?
ava
Novell | 29.09.2010, 07:17 #
для gweather:
Цитата


Сводка погоды загружает информацию о погоде с серверов национальной службы погоды США

, а я отметил:
Цитата


Решил по образу и подобию получить информацию с Gismeteo


Да и тема задумывалась не о поиске, а о создании аплета для Gnome.
ava
pythonwin | 29.09.2010, 08:28 #
Цитата (Novell @ 29.9.2010, 10:17 findReferencedText)
Сводка погоды загружает информацию о погоде с серверов национальной службы погоды США

вид можно настроить, а вот проверить показатели нужно за 25.02.2008 год и сравнить, но данных за это число на gismeteo.ru или mail.ru просто нет
http://pogoda.mail.ru/archive.html?city=18...date=2008-02-25
ava
Novell | 29.09.2010, 09:53 #
Спасибо за ссылки (видимо я сам гугль не осилил еще smile ) Нашел скрипт формирующий веб страницу. Разбираюсь в скрипте (неопытен я еще).
ava
Novell | 01.10.2010, 07:43 #
Здесь еще одна статья по теме. Полученные данные сохраняются в текстовый файл. Осталось только обособить это каркасом Gnome applet.
Скрипт не заработал сразу - ругается на отступы и пути сохранения. Прикладываю скрипт (указать свой путь к файлу выходных данных и код города).
ava
Novell | 28.06.2011, 08:34 #
Решил поставить точку в данном вопросе.
Условия изменились. Теперь упор сделан на conky.
Прилагаю код скрипта на python, который забирает страничку с сайта komimeteo.ru
В скрипте обрабатываются данные для города Печора.
Принтами печатается строка с управляющими символами для conky.
Данный скрипт публикуется, как пример работы с регулярными выражениями.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
import urllib2
_url = "http://komimeteo.ru/index.html"
skin = 'default'
u = urllib2.urlopen(_url)
page=u.read()
u.close()
res = re.findall('<table.+?>(.+?)</table>', page, re.DOTALL)
res = re.findall('<tr.+?>(.+?)</tr>', res[8], re.DOTALL)
res = re.findall('<td.+?>(.+?)</td>', res[4], re.DOTALL)
for i in range (0, len(res)):
res[i] = res[i].replace('<b>','')
res[i] = res[i].replace('</b>','')
res[i] = res[i].replace('&nbsp;','')
res[i] = res[i].replace('</p>','')
print '${alignc}',res[0].decode('utf-8')
print res[1].decode('utf-8'),
print '${alignr}',res[2].decode('utf-8')
print '${alignc}',res[3].decode('utf-8')
print res[4].decode('utf-8'),
print '${alignr}',res[5].decode('utf-8')
print '${alignc}',res[6].decode('utf-8')
print res[7].decode('utf-8'),
print '${alignr}',res[8].decode('utf-8')
print '${alignc}',res[9].decode('utf-8')

Для того, что бы использовать скрипт в conky, надо убрать все "decode('utf-8')". Видимо Conky сам умеет декодировать строки.
ava
Stolzen | 28.06.2011, 11:21 #
Novell, зачем регулярные выражения? http://stackoverflow.com/questions/1732348/#1732454

В питоне же есть такая замечательная вещь, как BeautifulSoup.
ava
Novell | 28.06.2011, 13:03 #
Не увидел внятных пояснений по модулю BeautifulSoup. Поэтому пошел тем путем, который более доступен.
На следующем этапе буду смотреть в сторону данного модуля.

А пока что, по указанному выше скрипту добавлю:

res = re.sub('<.*?>','',res[0])

Эта строка позволяет избавиться от всех
res[i] = res[i].replace('<b>','')

ava
Novell | 28.06.2011, 13:57 #
В целях самообразования и в помощ другим.
Доработанный скрипт, который вытягивает погоду с яндекса. Он более универсален.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
import urllib2
_url = "http://pogoda.yandex.ru/pechora/"
skin = 'default'
u = urllib2.urlopen(_url)
page=u.read()
u.close()
res = re.findall('<table.+?>(.+?)</table>', page, re.DOTALL) #Разделяем содержимое по таблицам
res = re.findall('<tr.+?>(.+?)</tr>', res[4], re.DOTALL)#разделяем содержимое таблици 4 по строкам
res = re.sub('</div>|</span>',';',res[0])#заменяем теги на точку с запятой
res = re.sub('<.*?>','',res)#удаляем лишние теги из строковой переменной
res = res.split(';')#разделяем строку по признаку точки с запятой в список строк
for i in range(0,len(res)):
print res[i].decode('utf-8')

Переменная res по ходу выполнения скрипта несколько раз меняет свой тип.
З.Ы. smile
ava
Backward | 16.07.2011, 04:38 #
Цитата (Stolzen @ 28.6.2011, 11:21 findReferencedText)
В питоне же есть такая замечательная вещь, как BeautifulSoup

Правильнее использовать html5lib и lxml, ИМХО.

import html5lib
import requests

def main():
hdr = {"User-Agent": "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; "\
"SV1; MEGAUPLOAD 2.0)"}

r = requests.get("http://pogoda.yandex.ru/pechora", headers=hdr)
if 200 != r.status_code:
return
xml = html5lib.parse(r.content, treebuilder="lxml", namespaceHTMLElements=False)

current = xml.find(".//table[@class='b-current-weather']")
result = []
for td in current.iterfind(".//td"):
if "content-info content-info_hidden" != td.get("class"):
result.append("\n".join(x.text for x in td.iter() if x.text))
print("Сейчас:", "\n".join(x for x in result[:-1] if x))
print("=" * 79)

forecast = xml.find(".//table[@class='b-forecast-brief ']")
result = []
for i, tr in enumerate(forecast.iterfind(".//tr")):
row = list(x.text or x.tail for x in tr.iter() if x.text or x.tail)
if 0 == i:
row = list("{} {}".format(row[j], row[j+1]) for j in xrange(0, len(row), 2))
result.append(row)
print("\n\n".join("{}\n{}\n{} {}".format(*x) for x in zip(*result)))

if "__main__" == __name__:
main()


ava
Novell | 22.07.2011, 08:59 #
Цитата (Backward @ 16.7.2011, 04:38 findReferencedText)
Правильнее использовать html5lib и lxml, ИМХО.


Я скопипастил ваш код, жму выполнить и... нет такого модуля html5lib. Вот на этом предложении следует закончить рассуждения о правильности.
ava
Stolzen | 22.07.2011, 09:46 #
Цитата (Novell @ 22.7.2011, 09:59 findReferencedText)
Вот на этом предложении следует закончить рассуждения о правильности.

С помощью регулярных выражений не стоит парсить html, так как язык html - нерегулярный.

http://stackoverflow.com/questions/590747/...se-html-why-not
ava
Backward | 23.07.2011, 04:13 #
Цитата (Novell @ 22.7.2011, 08:59 findReferencedText)
... нет такого модуля html5lib. Вот на этом предложении следует закончить рассуждения о правильности.

А посетить pypi.python.org религия не позволяет?
ava
Novell | 04.08.2011, 13:55 #
Давайте откроем тему рассуждений в другой ветке. smile
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden