PythonВытягиваем количество входящих сообщений на Gmail

Недавно прочитал статью на хабре. Решил сделать свой вариант, только с рапутницами и преферансом, потому что часто приходится шарахаться между виндой и линуксом, нужно было кроссплатформенное рашение. Решил что может быть интересно кому-нибудь, тем более, что последнее время были жалобы на нехватку статей. Вот листинг:

import urllib  ## импорт модулей
import re

gml = ''
adr = "https://mail.google.com/mail/feed/atom"  ## адрес гуглоленты и получение ее исходника
cont = urllib.urlopen(adr)  ## регулярное выражение для получения количества входящих
s = cont.read() 

reg = re.compile(r"<fullcount>\d+</fullcount>")  ## которое хранится между тегами <fullcount></fullcount>

gmlcnt = reg.search(s).group()
reg2 = re.compile(r"\d+")  ## образаем <fullcount></fullcount>
gml = reg2.search(gmlcnt).group()

print 'Gmail inbox:', gml  ## наверно вывод =)

while raw_input():
    pass


Вот и все. Такая вот ерунда.

Есть ещё такой менее безопасный но действенный способ:

import os
import string


username="login"
password="*****"

com="wget -O - https://"+username+":"+password+"@mail.google.com/mail/feed/atom --no-check-certificate"

temp=os.popen(com)
msg=temp.read()
index=string.find(msg,"<fullcount>")
index2=string.find(msg,"</fullcount>")
fc=int(msg[index+11:index2])

if fc==0:
   print "0"
else:
   print str(fc)+""
  • +5
  • v0id
  • 14 сентября 2009, 23:15

Комментарии (14)

  • avatar
  • LRN
  • 14 сентября 2009, 23:37
  • #
  • 0
Отступы не соблюдены. 'pass' должен быть сдвинут вправо.
Блин, был же справа, щас исправлю
Python?
а всё… туплю уже ночью))
а вообще — клёво.
прикрутить к скрипту вывод в notify, в крон и в бой)
Вот так с notify

#coding=utf-8
import urllib  ## импорт модулей
import re
import os
gml = ''
adr = "https://mail.google.com/mail/feed/atom"  ## адрес гуглоленты и получение ее исходника
cont = urllib.urlopen(adr)  ## регулярное выражение для получения количества входящих
s = cont.read() 
reg = re.compile(r"<fullcount>\d+</fullcount>")  ## которое хранится между тегами <fullcount></fullcount>
gmlcnt = reg.search(s).group()
reg2 = re.compile(r"\d+")  ## образаем <fullcount></fullcount>
gml = reg2.search(gmlcnt).group()
print 'Gmail inbox:', gml  ## наверно вывод =)
os.system('notify-send -i /***/gmail.jpg  "Gmail Inbox" "%s unread messages"' % gml)
while raw_input():
    pass


Вместо *** подставить путь до иконки Gmail
Интересно, посмотрим, попробуем.
Вот если бы еще форматирование оставалось правильным, когда когд постишь вообще цены бы опенлайфу не было. А то иногда так лень с тегами париться, тем более что я их толком не помню.
Помогите пожалуйста) Как сделать чтоб notify выводил сообщение при входящем письме а не тогда когда ты запустишь скрипт)
И можно ли как-нибудь сделать чтоб не надо было постоянно логин пароль набирать?
Чтобы автоматизировать скрипт достаточно прикрутить его к cron'у, а вот как сделать так, чтобы не вводить каждый раз логин и пасс, я пока не знаю. Единственный выход — переписать его с использованием левых модулей, в которых уже реализованно API для работы с гмылом. Я все никак не могу разобраться с логинм и паролем, руки не доходят =(, а использовать чьи-то наработки тож не хочу, люблю делать так чтобы скрипты можно было распостранять одним файлом, поэтому часто приходиться изобретать велосипеды =\
Ну с cron'ом я вроде как уже сам разобрался) Но он этот процесс где-то в фоне запускает и требует пароль и логин) Пярм в скрипте их нельзя указать? Или это не есть безопасно?
Небезопасно, я хотел сделать так, чтобы запустил, первый раз ввел логин/пасс и все, т.е. как в браузере. Что-то со стандартным вводом-выводом не могу договориться =\, да и времени пока не очень много, в универе жесть начинается.
А все же если вводить напрямую в скрипте это куда надо копать?
Какбы хз =)
Надо покопаться с запросом гугла и библиотекой urllib, вот.
Садо мазахизьм!
curl -u $user:$pwd -s «https://mail.google.com/mail/feed/atom» | grep -c ""
Ошибочка, сорри:
curl -u $user:$pwd -s "https://mail.google.com/mail/feed/atom" | grep -c "<entry>"
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.