2011-07-14 2 views
3

Я использую код этой страницы http://code.google.com/apis/contacts/docs/1.0/developers_guide_js.html, чтобы получить список контактов gmail. На самом деле он работает нормально, но я получаю данные имя, адрес и т.д., как простая строка, «\ п» в качестве разделителя, например:Как импортировать данные из контактов gmail, используя javascript API контактов Google, в более подробном формате?

<script type="text/javascript"> 
    var contactsService; 
    var scope = 'https://www.google.com/m8/feeds'; 

    function setupContactsService() { 
     //contactsService = new google.gdata.contacts.ContactsService('exampleCo-exampleApp-1.0'); 
     contactsService = new google.gdata.contacts.ContactsService('GoogleInc-jsguide-1.0'); 
    } 

    function getMyContacts() { 
     var contactsFeedUri = 'https://www.google.com/m8/feeds/contacts/default/full'; //?max-results=9999&alt=json&v=3.0 
     var query = new google.gdata.contacts.ContactQuery(contactsFeedUri); 

     setupContactsService(); 

     contactsService.getContactFeed(query, handleContactsFeed, handleError); 

    } 

    var handleContactsFeed = function(result) { 
     var entries = result.feed.entry; 

     for (var i = 0; i < entries.length; i++) { 
     var entry = entries[i]; 
     var addrs = entry.getPostalAddresses(); 
     var name = entry.getTitle(); 

     // logging 
     console.log(addrs[0]); 
     console.log(name); 

     } 
    } 

    function handleError(e) { 
     alert(e.cause ? e.cause.statusText : e.message); 
    } 
</script> 

это дает мне объект, где имя и адрес значения просты строки.

Могу ли я получить какие-то данные в формате ассоциативного массива, где адрес будет содержать отдельные значения улицы, почтового индекса, города, страны; и имя отдельные значения имени, фамилии и т.д.

, как:

{ 
    "type": "address", 
    "value": 
     { 
     "street": "Starret 1234", 
     "city": "City name", 
     "stateOrProvince": "ca", 
     "postalCode": "73000", 
     "country": "USA" 
    } 
}, 
{ 
    "type": "name", 
    "value": 
    { 
     "firstName": "Allen", 
     "lastName" : "Iverson", 
     ..... 
    } 
} 

Заранее спасибо!

ответ

6

Кажется, я нашел ответ, для получения более подробной информации и форматирования вам нужно добавить дополнительный параметр для контактовFeedUri для google.gdata.contacts.ContactQuery.

Этот дополнительный параметр: v = 3,0 Так что в моем случае функция будет выглядеть так:

function getMyContacts() { 
     var contactsFeedUri = 'https://www.google.com/m8/feeds/contacts/default/full?v=3.0&alt=json'; 
     var query = new google.gdata.contacts.ContactQuery(contactsFeedUri); 

     setupContactsService(); 

     contactsService.getContactFeed(query, handleContactsFeed, handleError); 

    } 

И получить необходимые данные я создаю простой OBJ, который может быть полезным для кого-то:

function contactEntry(entry) { 
     this.entry = entry; 
     this.testEntry = function() { 
      alert('test entry') 
     }; 
     this.getFirstName = function() { 
      if ((entry.gd$name == null) || (entry.gd$name.gd$givenName == null) || (entry.gd$name.gd$givenName.$t == null)) { 
       return ''; 
      } else { 
       return entry.gd$name.gd$givenName.$t; 
      } 
     }; 
     this.getLastName = function() { 
      if ((entry.gd$name == null) || (entry.gd$name.gd$familyName == null) || (entry.gd$name.gd$familyName.$t == null)) { 
       return ''; 
      } else { 
       return entry.gd$name.gd$familyName.$t; 
      } 
     }; 
     this.getAdditionalName = function() { 
      if ((entry.gd$name == null) || (entry.gd$name.gd$AdditionalName == null) || (entry.gd$name.gd$AdditionalName.$t == null)) { 
       return ''; 
      } else { 
       return entry.gd$name.gd$familyName.$t; 
      } 
     }; 
     this.getEmail = function() { 
      if ((entry.gd$email == null) || (entry.gd$email.length == 0) || (entry.gd$email[0].address == null)) { 
       return ''; 
      } else { 
       return entry.gd$email[0].address; 
      } 
     }; 
     this.getStreet = function() { 
      if (!this._addrExists() || (entry.gd$structuredPostalAddress[0].gd$street == null)) { 
       return ''; 
      } else { 
       return entry.gd$structuredPostalAddress[0].gd$street.$t; 
      } 
     }; 
     this.getCity = function() { 
      if (!this._addrExists() || (entry.gd$structuredPostalAddress[0].gd$city == null)) { 
       return ''; 
      } else { 
       return entry.gd$structuredPostalAddress[0].gd$city.$t; 
      } 
     }; 
     this.getCountry = function() { 
      if (!this._addrExists() || (entry.gd$structuredPostalAddress[0].gd$country == null)) { 
       return ''; 
      } else { 
       return entry.gd$structuredPostalAddress[0].gd$country.$t; 
      } 
     }; 
     this.getPostcode = function() { 
      if (!this._addrExists() || (entry.gd$structuredPostalAddress[0].gd$postcode == null)) { 
       return ''; 
      } else { 
       return entry.gd$structuredPostalAddress[0].gd$postcode.$t; 
      } 
     }; 
     this.getPhone = function() { 
      if ((entry.gd$phoneNumber == null) || (entry.gd$phoneNumber.length == 0) || (entry.gd$phoneNumber[0].$t == null)) { 
       return ''; 
      } else { 
       return entry.gd$phoneNumber[0].$t 
      } 
     }; 
     this.getOrganization = function() { 
      if ((entry.gd$organization == null) || (entry.gd$organization.length == 0) || (entry.gd$organization[0].getOrgName() == null)) { 
       return ''; 
      } else { 
       return entry.gd$organization[0].getOrgName().getValue(); 
      } 
     }; 
     this.getBirthday = function() { 
      if ((entry.gContact$birthday == null) || (entry.gContact$birthday.when == null)) { 
       return ''; 
      } else { 
       return entry.gContact$birthday.when; 
      } 
     }; 
     this.getEvent = function() { 
      if ((entry.gContact$event == null) || (entry.gContact$event.length == 0) || (entry.gContact$event[0].gd$when == null)) { 
       return ''; 
      } else { 
       return entry.gContact$event[0].gd$when.startTime; 
      } 
     }; 
     // protected methods 
     this._addrExists = function() { 
      if ((entry.gd$structuredPostalAddress == null) || (entry.gd$structuredPostalAddress.length == 0)) { 
       return false; 
      } 

      return true; 
     }; 
    } 

Он может быть использован таким образом:

var handleContactsFeed = function(result) { 

     var entries = result.feed.entry; 

     var contact = new contactEntry(entries[0]); 

       var address = {}; 
     address['fname'] = contact.getFirstName(); 
     address['lname'] = contact.getLastName() + (contact.getAdditionalName() != '' ? ' ' + contact.getAdditionalName() : ''); 
     address['address'] = contact.getStreet(); 
     address['city'] = contact.getCity(); 
     address['country'] = contact.getCountry(); 
     address['zip']  = contact.getPostcode(); 
     address['phone'] = contact.getPhone(); 
     address['mail'] = contact.getEmail(); 
     address['organization'] = contact.getOrganization(); 
     address['birthday'] = contact.getBirthday(); 
     address['event'] = contact.getEvent(); 
    } 
+0

этот пример unfortuanely не хватает много уплотнительных f бит реализации. – NiKo

Смежные вопросы