Balans - Win Gadget (IndexError)

 
0
 
Python
ava
CaptainNemo | 21.05.2011, 02:48
Приветствую, уважаемые коллеги. К сожалению, с Python я раньше не сталкивался, но давно мечтал заделать себе под Win 7 Гаджет отображающий баланс на мобиле. Случайно увидел у знакомого такое сделанное под Linux на онове вот такого кода:


#!/usr/bin/env python
# -*- coding: cp1251 -*-
import urllib,httplib,urllib2,cookielib,re,string
#import os
from BeautifulSoup import BeautifulSoup

numMTS=' '
pasMTS=' '
code=' '
#
reqStr='https://....'
cookie = cookielib.CookieJar()
urllib2.install_opener(urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)))
req = urllib2.Request(reqStr)
response = urllib2.urlopen(req)
req = urllib2.Request('https://.....')
response = urllib2.urlopen(req)
the_page = response.read()
response.close()
soup = BeautifulSoup(''.join(the_page))
s=soup.findAll('table',"user")
tbl=s[1]
t=tbl.findAll('td',limit=2)[1].string
q=string.strip(t)
print 'Баланс +375'.decode('utf8')+code+numMTS+':',q


Короче, на работе у меня получилось получать данные по балансу в консоль Python (из под Win-7 32 bit), а когда пришел домой и хотел завершить начатое (дома Win 7 64 bit) этот код перестал работать. Вылетает ошибка:


Traceback (most recent call last):
File "C:\Python27\mts.py", line ..
tbl=s[1]
IndexError: list index out of range


Не могу понять в чем причина...
Предчувствую, что проблемы с кодировкой, т.к. я пошагово пробовал в консоли выполнять все строки кода, и увидел, что все кирилические символы отображаются как кракозябры, а переменная s принимает значение s=[], хотя, возможно я не прав...


вопросы:
1)как исправить ошибку, описанную в предыдущем абзаце
2) получится ли у меня использовать этот код python в разметке gadget.html, вот так

<script " type="text/python">
код Python....
</script>

что бы оформить вывод в Гаджет. Или такой номер не пройдет?

Любому совету буду рад. smile


Kommentare (8)
ava
Stolzen | 21.05.2011, 09:19 #
Цитата (CaptainNemo @ 21.5.2011, 02:48 findReferencedText)
s=soup.findAll('table',"user")

Чему тут переменная s равна?

Сделайте "print s", интересно, что там - наверное, пусто, раз такая ошибка возникает


Цитата (CaptainNemo @ 21.5.2011, 02:48 findReferencedText)
reqStr='https://....'

Цитата (CaptainNemo @ 21.5.2011, 02:48 findReferencedText)
req = urllib2.Request('https://.....')


А можно путь целиком? Или хотя бы xml ответ, чтобы понять, как его можно парсить.

später ergänzt:
Цитата (CaptainNemo @ 21.5.2011, 02:48 findReferencedText)
2) получится ли у меня использовать этот код python в разметке gadget.html, вот так
 

<script " type="text/python">

код Python....
  </script>



что бы оформить вывод в Гаджет. Или такой номер не пройдет?


Не пройдет
ava
CaptainNemo | 21.05.2011, 10:15 #
Stolzen,



Сделайте "print s", интересно, что там - наверное, пусто, раз такая ошибка возникает


При трассировании кода через IronPython 64-bit Console (хотел бы подчеркнуть, что на работе запускал код на выполнение с двух 32-bit машин и всё прекрасно работало) пишет s=[], в результате на шаге tbl=s[1] вылетает описанная мною выше ошибка

Цитата


А можно путь целиком? Или хотя бы xml ответ, чтобы понять, как его можно парсить.



Да, я прилепил файл с исходником

Цитата


2) получится ли у меня использовать этот код python в разметке gadget.html, вот так
 

<script " type="text/python">

код Python....
  </script>



что бы оформить вывод в Гаджет. Или такой номер не пройдет?

Цитата



Не пройдет





И никак не получится прикрутить вывод баланса в гаджет хотябы для одного из типов Gadget? Я вчера вечером пытался так, действительно, не получилось. Но потом было наткнулся вот на
эту страницу и появилась надежда, что такое возможно. Жаль, конечно, если так не сработает....

ava
CaptainNemo | 22.05.2011, 01:37 #
Решил я этот экзампел из-под Убунты потестить. Только вот незадача - не знаю. куда парсер BeautifulSoup подкинуть, что бы импортировать в приведенный мною код модуль (прошу прощения, если матерно выражаюсь, я второй день как с питоном воюю, и терминологию еще не освоил)...


from BeautifulSoup import BeautifulSoup


На Убунте питон виден из баша, т.е. при вводе команды "python" баш открывает его ide (как я понимаю, переменные окружения сконфигурированы верно). Но я так и не понял, куда все либы надо ложить под Убунту. По логике - в Bin. Но там я не нашел никаких папок связанных с Pyhon...


Кто из-под Линукса с Python работает, подскажите, если не составит труда...
ava
Stolzen | 22.05.2011, 10:13 #
Суп в линуксе можно установить вот так:


easy_install BeautifulSoup


Ответ от сервера:


...
<h2>ВРЕМЯ СЕАНСА ИСТЕКЛО</h2>
<p><strong>Сеанс работы с системой интернет-самообслуживания завершён.</strong></p>
<p><a href="login.aspx">Повторный вход в систему</a></p>
<p><span id="sessionExpiredNote">Сеанс работы после 10 минут бездействия заканчивается. Вам необходимо будет ввести пароль снова.
</span></p><p>Войдите в систему ещё раз.</p>
...


(Он содержится в переменной the_page и soup)


Т.е. как видно, запрос обрабатывается неправильно, поэтому

s=soup.findAll('table',"user")


Не может найти тег table и выдернуть оттуда юзера - поэтому и в s пусто

später ergänzt:
Цитата (CaptainNemo @ 21.5.2011, 11:15 findReferencedText)
И никак не получится прикрутить вывод баланса в гаджет хотябы для одного из типов Gadget? Я вчера вечером пытался так, действительно, не получилось. Но потом было наткнулся вот на

эту страницу и появилась надежда, что такое возможно. Жаль, конечно, если так не сработает....

В принципе, подобный функционал можно реализовать средствами java script - его-то к виджету без проблем можно будет подключить (наверное)
ava
CaptainNemo | 23.05.2011, 21:42 #
Stolzen,
Цитата


В принципе, подобный функционал можно реализовать средствами java script


Вы имеете ввиду, используя Beautiful Soup? (кстати для общего развития мне бы интересно было узнать, откуда такое прикольное название) Не могу найти примера, как из JavaScript обращаться к Python.

Примеры то нашел, но вот ни один не сработал. То ли я тупой, то ли лыжи не едут. Вот эту страницу (ну и соседние вкладки) я постарался оочень внимательно изучить. Как я понял, там настоятельно убеждают, что никаких проблем со встраиванием Питона в веб страницу нет, достаточно, показать ссылки на их ресурсы, если работать он-лайн, либо качнуть ихние библиотеки и в разметке сослаться на них... Но я так и делал. Но ничего не сработало... Сильверлайт установлен, ссылки дал. Что еще забыл?
ava
Stolzen | 24.05.2011, 06:14 #
Я имел ввиду, написать на чистом js без python вообще.
http://forum.vingrad.ru/forum/topic-289485.html
http://www.google.ru/search?q=%D0%BF%D0%B0...+xml+javascript

Что касается прикручивания питона к js - я никогда не пробовал, как-то мельком видел - структура языка питонова (отступы, и т.п.), а по сути - джава скрипт.
ava
CaptainNemo | 24.05.2011, 10:53 #
Stolzen, Да я пробовал до этого коброй . Но там как-то всё хитро написано, что без бутылки трудно разобраться, как с ней работать. По супу есть хорошая документация . Написано всё четко и последовательно. Поэтому я и дался на питоне код писать. Думал, что решу свою задачку "малой кровью"... Но коли так, буду пробовать через Java Script.

Может подскажете где глянуть примеры, как работать с коброй? Или подскажете какой-либо хороший (ну и понятный для новичка) парсер на js
Спасибо
ava
Stolzen | 24.05.2011, 11:02 #
Можно с помощью jQuery
http://www.switchonthecode.com/tutorials/x...ing-with-jquery

По мне, так самый удобный фреймворк для js
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden