javascript - 如何使用 javascript Google Contact API 以更详细的格式导入 gmail 联系人数据?

标签 javascript import gmail format

我正在使用此页面中的代码 http://code.google.com/apis/contacts/docs/1.0/developers_guide_js.html获取 gmail 联系人列表。实际上它工作正常,但我得到名称、地址等数据,就像一个简单的字符串,以“\n”作为分隔符,例如:

<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",
        .....
    }
}

提前致谢!

最佳答案

似乎我找到了答案,为了获得更详细和格式化的信息,需要为 google.gdata.contacts.ContactQuery 添加额外的参数到 contactsFeedUri。

这个附加参数是:?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);

    }

为了获取必要的数据,我创建了一个简单的对象,它对某些人可能很有用:

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();
    }

关于javascript - 如何使用 javascript Google Contact API 以更详细的格式导入 gmail 联系人数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6691921/

相关文章:

java - 有条件的进口

python - 导入错误: cannot import name 'my_function' from 'abc'

email - 是否有网址打开全屏(弹出)中具有特定邮件ID的Gmail撰写窗口

javascript - 立即停止 setInterval

javascript - 命令超时 | Discord.js

javascript - Mailto:IE 限制为 2048 个字符

google-api - Java 版 gmail API 的一部分是否缺失?

javascript - 访问javascript字典时将键作为变量

matlab - 仅当文件包含表格中的某些数字时才导入文件

GMail 撰写电子邮件替换变量