Search code examples
google-data-apigoogle-shared-contactsgoogle-people-apigoogle-data-protocol

Is there a sdk/lib to parse gdata (json) data returned by the Google Contact API v3?


I'm currently accessing google contacts via GoogleContact API v3. I use the following command:

"https://www.google.com/m8/feeds/contacts/default/full?access_token=" + token.access_token + "&alt=json&v=3&q=Susan"

It returns me a json structure response in gdata format.

{
"version": "1.0",
"encoding": "UTF-8",
"feed": {
    "xmlns": "http://www.w3.org/2005/Atom",
    "xmlns$openSearch": "http://a9.com/-/spec/opensearch/1.1/",
    "xmlns$batch": "http://schemas.google.com/gdata/batch",
    "xmlns$gd": "http://schemas.google.com/g/2005",
    "xmlns$gContact": "http://schemas.google.com/contact/2008",
    "gd$etag": "W/\"A0IGQ3gycSt7I2A9XR5WEk4.\"",
    "id": {
        "$t": "[email protected]"
    },
    "updated": {
        "$t": "2017-01-24T06:32:02.699Z"
    },
    "category": [{
        "scheme": "http://schemas.google.com/g/2005#kind",
        "term": "http://schemas.google.com/contact/2008#contact"
    }],
    "title": {
        "$t": "User1 contact"
    },
    "link": [{
        "rel": "alternate",
        "type": "text/html",
        "href": "http://www.google.com/"
    }, {
        "rel": "http://schemas.google.com/g/2005#feed",
        "type": "application/atom+xml",
        "href": "https://www.google.com/m8/feeds/contacts/darewreckk%40gmail.com/full?v=3"
    }, {
        "rel": "http://schemas.google.com/g/2005#post",
        "type": "application/atom+xml",
        "href": "https://www.google.com/m8/feeds/contacts/firstlast%40gmail.com/full?v=3"
    }, {
        "rel": "http://schemas.google.com/g/2005#batch",
        "type": "application/atom+xml",
        "href": "https://www.google.com/m8/feeds/contacts/firstlast%40gmail.com/full/batch?v=3"
    }, {
        "rel": "self",
        "type": "application/atom+xml",
        "href": "https://www.google.com/m8/feeds/contacts/firstlast%40gmail.com/full?alt=json&q=First&max-results=25&v=3"
    }],
    "author": [{
        "name": {
            "$t": "First Last"
        },
        "email": {
            "$t": "[email protected]"
        }
    }],
    "generator": {
        "version": "1.0",
        "uri": "http://www.google.com/m8/feeds",
        "$t": "Contacts"
    },
    "openSearch$totalResults": {
        "$t": "2"
    },
    "openSearch$startIndex": {
        "$t": "1"
    },
    "openSearch$itemsPerPage": {
        "$t": "25"
    },
    "entry": [{
        "gd$etag": "\"QHc9fjVSLyt7I2A9WxBXFUgKRAI.\"",
        "id": {
            "$t": "http://www.google.com/m8/feeds/contacts/firstlast%40gmail.com/base/8"
        },
        "updated": {
            "$t": "2010-01-26T23:59:21.966Z"
        },
        "app$edited": {
            "xmlns$app": "http://www.w3.org/2007/app",
            "$t": "2010-01-26T23:59:21.966Z"
        },
        "category": [{
            "scheme": "http://schemas.google.com/g/2005#kind",
            "term": "http://schemas.google.com/contact/2008#contact"
        }],
        "title": {
            "$t": "FirstName LastName"
        },
        "link": [{
            "rel": "http://schemas.google.com/contacts/2008/rel#photo",
            "type": "image/*",
            "href": "https://www.google.com/m8/feeds/photos/media/first.name%40gmail.com/8?v=3"
        }, {
            "rel": "self",
            "type": "application/atom+xml",
            "href": "https://www.google.com/m8/feeds/contacts/first.name%40gmail.com/full/8?v=3"
        }, {
            "rel": "edit",
            "type": "application/atom+xml",
            "href": "https://www.google.com/m8/feeds/contacts/first.name%40gmail.com/full/8?v=3"
        }],
        "gd$name": {
            "gd$fullName": {
                "$t": "First Last"
            },
            "gd$givenName": {
                "$t": "First"
            },
            "gd$familyName": {
                "$t": "Last"
            }
        },
        "gd$email": [{
            "rel": "http://schemas.google.com/g/2005#other",
            "address": "[email protected]",
            "primary": "true"
        }]
    }, {
        "gd$etag": "\"RX0_cTVSLyt7I2A9WxFTEUUKRwY.\"",
        "id": {
            "$t": "http://www.google.com/m8/feeds/contacts/first.last%40gmail.com/base/7cba75689bbb171"
        },
        "updated": {
            "$t": "2010-04-02T03:47:04.349Z"
        },
        "app$edited": {
            "xmlns$app": "http://www.w3.org/2007/app",
            "$t": "2010-04-02T03:47:04.349Z"
        },
        "category": [{
            "scheme": "http://schemas.google.com/g/2005#kind",
            "term": "http://schemas.google.com/contact/2008#contact"
        }],
        "title": {
            "$t": ""
        },
        "link": [{
            "rel": "http://schemas.google.com/contacts/2008/rel#photo",
            "type": "image/*",
            "href": "LinkUrl"
        }, {
            "rel": "self",
            "type": "application/atom+xml",
            "href": "SelfUrl3"
        }, {
            "rel": "edit",
            "type": "application/atom+xml",
            "href": "EditUrl3"
        }],
        "gd$email": [{
            "rel": "http://schemas.google.com/g/2005#other",
            "address": "[email protected]",
            "primary": "true"
        }]
    }]
}

}

Currently, I have the response and create my own method to access each filed. Is there an already defined library that will convert this into a more readable object?

For example, "gd$name" I'm guessing is the google data representation of a name. Is there a way to convert it to a gData contact object that gives me the name field without me having to write my own gData parser?

Thanks Derek


Solution

  • The API reference can be found here: https://developers.google.com/google-apps/contacts/v3/

    A .NET SDK (client library) can be found here: https://www.nuget.org/packages/Google.GData.Contacts/

    Examples of how to use the client library can be found in the API reference.