To query the user's profile feed, make sure your initial AuthSub token was requested with the permission parameter set to 1. The process of extracting data from the profile requires two steps, sending a query and iterating through the resulting feed.
You can send structured queries to retrieve specific records from a user's profile.
When retrieving the profile using the Health API, specifically
constructed query URLs are used to describe what (CCR) data
should be returned. The Zend_Gdata_Health_Query class helps
simplify this task by automatically constructing a query URL
based on the parameters you set.
To execute a query against the profile feed, invoke a new instance of an
Zend_Gdata_Health_Query and call the service's
getHealthProfileFeed() method:
<?php
$healthService = new Zend_Gdata_Health($client);
// example query for the top 10 medications with 2 items each
$query = new Zend_Gdata_Health_Query();
$query->setDigest("true");
$query->setGrouped("true");
$query->setMaxResultsGroup(10);
$query->setMaxResultsInGroup(2);
$query->setCategory("medication");
$profileFeed = $healthService->getHealthProfileFeed($query);
Using setDigest("true") returns all of user's CCR data
in a single Atom <entry>.
The setCategory() helper can be passed an additional
parameter to return more specific CCR information. For example, to return just
the medication Lipitor, use
setCategory("medication", "Lipitor"). The same
methodology can be applied to other categories such as conditions, allergies,
lab results, etc.
A full list of supported query parameters is available in the query parameters section of the Health API Reference Guide.
Each Google Health entry contains CCR data, however, using the
digest query parameter and setting is to
TRUE will consolidate all of the CCR elements
(that match your query) into a single Atom <entry>.
To retrieve the full CCR information from an entry, make a call to the
Zend_Gdata_Health_ProfileEntry class's
getCcr() method. That returns a
Zend_Gdata_Health_Extension_CCR:
<?php
$entries = $profileFeed->getEntries();
foreach ($entries as $entry) {
$medications = $entry->getCcr()->getMedications();
//$conditions = $entry->getCcr()->getConditions();
//$immunizations = $entry->getCcr()->getImmunizations();
// print the CCR xml (this will just be the entry's medications)
foreach ($medications as $med) {
$xmlStr = $med->ownerDocument->saveXML($med);
echo "<pre>" . $xmlStr . "</pre>";
}
}
Here, the getCcr() method is used in conjunction with a
magic helper to drill down and extract just the medication data from the entry's
CCR. The formentioned magic helper takes the form
getCATEGORYNAME(), where CATEGORYNAME
is a supported Google Health category. See the Google Health
reference Guide for the possible categories.
To be more efficient, you can also use category queries to only return the necessary CCR from the Google Health servers. Then, iterate through those results:
<?php
$query = new Zend_Gdata_Health_Query();
$query->setDigest("true");
$query->setCategory("condition");
$profileFeed = $healthService->getHealthProfileFeed($query);
// Since the query contained digest=true, only one Atom entry is returned
$entry = $profileFeed->entry[0];
$conditions = $entry->getCcr()->getConditions();
// print the CCR xml (this will just be the profile's conditions)
foreach ($conditions as $cond) {
$xmlStr = $cond->ownerDocument->saveXML($cond);
echo "<pre>" . $xmlStr . "</pre>";
}




