From 4a7e6557ad38e2b9a147ffeaf9d7b26fa46acc47 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Tue, 7 Dec 2010 21:06:38 -0600 Subject: [PATCH] Expanding the API coverage including using the new contacts --- src/gvoice/backend.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/gvoice/backend.py b/src/gvoice/backend.py index 69e46e4..7950c65 100755 --- a/src/gvoice/backend.py +++ b/src/gvoice/backend.py @@ -189,6 +189,7 @@ class GVoiceBackend(object): # HACK really this redirects to the main pge and we are grabbing some javascript self._XML_CONTACTS_URL = "http://www.google.com/voice/inbox/search/contact" self._CSV_CONTACTS_URL = "http://mail.google.com/mail/contacts/data/export" + self._JSON_CONTACTS_URL = SECURE_URL_BASE + "b/0/request/user" self._XML_RECENT_URL = SECURE_URL_BASE + "inbox/recent/" self.XML_FEEDS = ( @@ -202,6 +203,8 @@ class GVoiceBackend(object): self._XML_TRASH_URL = SECURE_URL_BASE + "inbox/recent/trash" self._XML_VOICEMAIL_URL = SECURE_URL_BASE + "inbox/recent/voicemail/" self._XML_SMS_URL = SECURE_URL_BASE + "inbox/recent/sms/" + self._JSON_SMS_URL = SECURE_URL_BASE + "b/0/request/messages/" + self._JSON_SMS_COUNT_URL = SECURE_URL_BASE + "b/0/request/unread" self._XML_RECORDED_URL = SECURE_URL_BASE + "inbox/recent/recorded/" self._XML_PLACED_URL = SECURE_URL_BASE + "inbox/recent/placed/" self._XML_RECEIVED_URL = SECURE_URL_BASE + "inbox/recent/received/" @@ -212,7 +215,6 @@ class GVoiceBackend(object): self._accountNumRe = re.compile(r"""(.{14})""") self._callbackRe = re.compile(r"""\s+(.*?):\s*(.*?)\s*$""", re.M) - self._contactsBodyRe = re.compile(r"""gcData\s*=\s*({.*?});""", re.MULTILINE | re.DOTALL) self._seperateVoicemailsRegex = re.compile(r"""^\s*
""", re.MULTILINE | re.DOTALL) self._exactVoicemailTimeRegex = re.compile(r"""(.*?)""", re.MULTILINE) self._relativeVoicemailTimeRegex = re.compile(r"""(.*?)""", re.MULTILINE) @@ -498,7 +500,7 @@ class GVoiceBackend(object): @returns Iterable of (contact id, contact name) @blocks """ - page = self._get_page(self._XML_CONTACTS_URL) + page = self._get_page(self._JSON_CONTACTS_URL) return self._process_contacts(page) def get_csv_contacts(self): @@ -537,6 +539,12 @@ class GVoiceBackend(object): smss = self._merge_conversation_sources(parsedSms, smsJson) return smss + def get_unread_counts(self): + countPage = self._get_page(self._JSON_SMS_COUNT_URL) + counts = parse_json(countPage) + counts = counts["unreadCounts"] + return counts + def mark_message(self, messageId, asRead): """ @blocks @@ -607,10 +615,7 @@ class GVoiceBackend(object): yield recentCallData def _process_contacts(self, page): - contactsBody = self._contactsBodyRe.search(page) - if contactsBody is None: - raise RuntimeError("Could not extract contact information") - accountData = _fake_parse_json(contactsBody.group(1)) + accountData = parse_json(page) for contactId, contactDetails in accountData["contacts"].iteritems(): # A zero contact id is the catch all for unknown contacts if contactId != "0": @@ -978,11 +983,14 @@ def grab_debug_info(username, password): ("login", backend._loginURL), ("isdnd", backend._isDndURL), ("account", backend._XML_ACCOUNT_URL), - ("contacts", backend._XML_CONTACTS_URL), + ("html_contacts", backend._XML_CONTACTS_URL), + ("contacts", backend._JSON_CONTACTS_URL), ("csv", backend._CSV_CONTACTS_URL), ("voicemail", backend._XML_VOICEMAIL_URL), - ("sms", backend._XML_SMS_URL), + ("html_sms", backend._XML_SMS_URL), + ("sms", backend._JSON_SMS_URL), + ("count", backend._JSON_SMS_COUNT_URL), ("recent", backend._XML_RECENT_URL), ("placed", backend._XML_PLACED_URL), -- 1.7.9.5