Мониторим количество новостей в Gmail и Greader Python 05.09.2010

python_google.png Мне нравится мониторить разные сервисы, службы и быть в курсе когда что-то изменится. Хорошо когда меняется что-то в позитивную сторону :) растет посещаемость, приходят интересные новости, и не очень хорошо когда какой-то сервис падает или работает с сбоями. У себя в блоге я уже не раз писал про мониторинг своего, локального, хоста так и удаленных серверов.

Сегодня будем следить за новыми поступлениями в двух, имхо, самых популярных сервисах от Google: Google Mail и Google Reader.

Мониторинг новых писем в Gmail

Запрос новых писем происходит через https://mail.google.com/mail/feed/atom, но перед запросом надо авторизоваться с помощью Basic Auth. После авторизации остается только распарсить ответ и отобразить общее количество.

import urllib, urllib2, json
import xml.etree.ElementTree as et

USERNAME = 'your_account@gmail.com'
PASSWORD = '*****'

# авторизация через Basic Auth
NS = '{http://purl.org/atom/ns#}'
auth = urllib2.HTTPBasicAuthHandler()
auth.add_password('New mail feed', 'https://mail.google.com', USERNAME, PASSWORD)
request = urllib2.build_opener(auth)
urllib2.install_opener(request)

# забираем данные и парсим их
response = urllib2.urlopen('https://mail.google.com/mail/feed/atom')
xml = et.parse(response).getroot()
total = int(xml.find('%sfullcount' % NS).text)
print total

Мониторинг новостей в Greader

Авторизация в Greader'e происходит по другой схеме, через Интерфейс ClientLogin. Все остальное остается также: делай запрос, парсим ответ, выводим результат.

# coding=utf-8
import urllib, urllib2, json, re
import xml.etree.ElementTree as et

USERNAME = 'your_account@gmail.com'
PASSWORD = '*****'

# авторизация, получаем маркер с меткой Auth
auth_url = 'https://www.google.com/accounts/ClientLogin'
auth_req_data = urllib.urlencode({'Email': USERNAME, 'Passwd': PASSWORD, 'service': 'reader', 'accountType': 'GOOGLE'})
auth_req = urllib2.Request(auth_url, data=auth_req_data)
auth_resp = urllib2.urlopen(auth_req).read()
auth_token = re.search('Auth=(\S*)', auth_resp).group(1)

# запрашиваем количество не прочитанных новостей
header = {}
header['Authorization'] = 'GoogleLogin auth=%s' % auth_token
reader_base_url = 'http://www.google.com/reader/api/0/unread-count?%s'
reader_req_data = urllib.urlencode({'all': 'true', 'output': 'json'})
reader_url = reader_base_url % (reader_req_data)
reader_req = urllib2.Request(reader_url, None, header)
reader_resp = urllib2.urlopen(reader_req).read()

elements = json.loads(reader_resp)['unreadcounts']

# парсим ответ
total = 0
for el in elements:
    if 'label' in  el['id']:
        total += el['count']
print total

Наглядное отображение полученных циферок

Для отображение можно воспользоваться conky, что я и сделал:

conky_gmail_greader.png

либо настроить извещение через notify-send.

Дополнительное чтиво:

Цитата
There are only two hard things in Computer Science: cache invalidation and naming things.
Phil Karlton
Категории
Архив