Мне нравится мониторить разные сервисы, службы и быть в курсе когда что-то изменится. Хорошо когда меняется что-то в позитивную сторону :) растет посещаемость, приходят интересные новости, и не очень хорошо когда какой-то сервис падает или работает с сбоями. У себя в блоге я уже не раз писал про мониторинг своего, локального, хоста так и удаленных серверов.
Сегодня будем следить за новыми поступлениями в двух, имхо, самых популярных сервисах от 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, что я и сделал:
либо настроить извещение через notify-send.
Дополнительное чтиво: