Log in

View Full Version : Resolved associative arrays



ggalan
06-14-2011, 01:08 PM
i have this code that works for a single entry


$user = new AdWordsUser();

$user->LogDefaults();

$targetingIdeaService = $user->GetTargetingIdeaService('v201008');

$keyword = new Keyword();
$keyword->text = $kWord;
$keyword->matchType = 'EXACT';//BROAD , "Phrase"

$selector = new TargetingIdeaSelector();
$selector->requestType = 'IDEAS';
$selector->ideaType = 'KEYWORD';
$selector->requestedAttributeTypes = array('KEYWORD', 'AVERAGE_TARGETED_MONTHLY_SEARCHES');

$paging = new Paging();
$paging->startIndex = 0;
$paging->numberResults = 10;
$selector->paging = $paging;

$relatedToKeywordSearchParameter = new RelatedToKeywordSearchParameter();
$relatedToKeywordSearchParameter->keywords = array($keyword);

$keywordMatchTypeSearchParameter = new KeywordMatchTypeSearchParameter();
$keywordMatchTypeSearchParameter->keywordMatchTypes = array('EXACT');//BROAD

$selector->searchParameters =
array($relatedToKeywordSearchParameter, $keywordMatchTypeSearchParameter);

$page = $targetingIdeaService->get($selector);

if (isset($page->entries)) {

echo '<div id="output"><ul>';
foreach ($page-> entries as $targetingIdea) {
echo '<li><a href="#">';
$data = MapUtils::GetMap($targetingIdea->data);//

$keyword = $data['KEYWORD']->value;

$averageMonthlySearches = isset($data['AVERAGE_TARGETED_MONTHLY_SEARCHES']->value)
? $data['AVERAGE_TARGETED_MONTHLY_SEARCHES']->value : 0;

echo $keyword->text . '</a>';
echo ' match types:' . $keyword->matchType;
echo ' / ' . $averageMonthlySearches . ' monthly searches';
echo '</li>';
}
echo '</ul></div>';


however i would like to use a different class and pass in associative arrays like this (attempt but code does not work)


error_reporting(E_STRICT | E_ALL);

$path = dirname(__FILE__) . '/../../src';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);

require_once 'Google/Api/Ads/AdWords/Lib/AdWordsUser.php';
require_once 'Google/Api/Ads/Common/Util/MapUtils.php';

if(isset($_POST['SearchIdeasFormField']) && $kWord != '') {

try {
$user = new AdWordsUser();

$user->LogDefaults();

$targetingIdeaService = $user->GetTargetingIdeaService('v201008');

$keyword = new Keyword();
$keyword->text = $kWord;
$keyword->matchType = 'EXACT';//BROAD , "Phrase"

$selector = new TargetingIdeaSelector();
$selector->requestType = 'IDEAS';
$selector->ideaType = 'KEYWORD';
$selector->requestedAttributeTypes = array('KEYWORD'=>'AVERAGE_TARGETED_MONTHLY_SEARCHES', 'KEYWORD'=>'COMPETITION','KEYWORD'=>'SEARCH_SHARE');

$paging = new Paging();
$paging->startIndex = 0;
$paging->numberResults = 10;
$selector->paging = $paging;

$relatedToKeywordSearchParameter = new RelatedToKeywordSearchParameter();
$relatedToKeywordSearchParameter->keywords = array($keyword);

$keywordMatchTypeSearchParameter = new KeywordMatchTypeSearchParameter();
$keywordMatchTypeSearchParameter->keywordMatchTypes = array('EXACT');//BROAD

$selector->searchParameters =
array($relatedToKeywordSearchParameter, $keywordMatchTypeSearchParameter);

$page = $targetingIdeaService->get($selector);

if (isset($page->entries)) {

// THIS PART NEEDS WORK
echo '<div id="output"><ul>';
foreach ($page-> entries as $targetingIdea=>$val) {
echo '<li><a href="#">';
$data = MapUtils::GetMapEntries($val->data);//NEW CLASS

$keyword = $data['KEYWORD']->value;


$averageMonthlySearches = isset($data['AVERAGE_TARGETED_MONTHLY_SEARCHES']->value)
? $data['AVERAGE_TARGETED_MONTHLY_SEARCHES']->value : 0;

$competition = isset($data2['COMPETITION']->value)
? $data2['COMPETITION']->value : 0;

$searchShare = isset($data3['SEARCH_SHARE']->value)
? $data3['SEARCH_SHARE']->value : 0;

echo $keyword->text . '</a>';
echo ' match types:' . $keyword->matchType;
echo ' / ' . $averageMonthlySearches . ' monthly searches';
echo ' / ' . $competition . ' competition';
echo ' / ' . $searchShare . ' search share';
echo '</li>';
}
echo '</ul></div>';

} else {
print "No related keywords were found.\n";
}
} catch (Exception $e) {
print $e->getMessage();
}

}


here are the 2 class


/**
* Gets a map (associative array) from an array of map entries. A map entry
* is any object that has a key and value field.
* @param array $mapEntries an array of map entries
* @return array a map built from the keys and values of the map entries
*/
public static function GetMap(array $mapEntries) {
$result = array();
foreach ($mapEntries as $mapEntry) {
$result[$mapEntry->key] = $mapEntry->value;
}
return $result;
}

/**
* Gets an array of map entries from a map (associative array). A map entry
* is any object that has a key and value field. An optional map entry class
* name can be specified for constructing the entries, otherise the stdClass
* is used.
* @param array $map a map from key to value
* @param string $mapEntryClassName an optional class name to use when
* constructing the map entries
* @return array an array of map entries built from the key-value pairs in
* the map
*/
public static function GetMapEntries(array $map, $mapEntryClassName = NULL) {
$result = array();
foreach($map as $key => $value) {
if (isset($mapEntryClassName)) {
$entry = new $mapEntryClassName();
} else {
$entry = (object) array();
}
$entry->key = $key;
$entry->value = $value;
$result[] = $entry;
}
return $result;
}

ggalan
06-18-2011, 02:45 PM
anyone?

ggalan
06-19-2011, 05:57 PM
i got it to out values but the 3 loops make it VERY SLOW. can anyone help me out with syntax please



try {
$user = new AdWordsUser();

// Log SOAP XML request and response.
$user->LogDefaults();

// Get the TargetingIdeaService.
$targetingIdeaService = $user->GetTargetingIdeaService('v201008');
$targetingIdeaService2 = $user->GetTargetingIdeaService('v201008');
$targetingIdeaService3 = $user->GetTargetingIdeaService('v201008');

// Create seed keyword.
$keyword = new Keyword();
$keyword->text = $kWord;
$keyword->matchType = 'EXACT';

// Create selector.
$selector = new TargetingIdeaSelector();
$selector->requestType = 'IDEAS';
$selector->ideaType = 'KEYWORD';
$selector->requestedAttributeTypes = array('KEYWORD', 'AVERAGE_TARGETED_MONTHLY_SEARCHES');


$selector2 = new TargetingIdeaSelector();
$selector2->requestType = 'IDEAS';
$selector2->ideaType = 'KEYWORD';
$selector2->requestedAttributeTypes = array('KEYWORD', 'COMPETITION');

$selector3 = new TargetingIdeaSelector();
$selector3->requestType = 'IDEAS';
$selector3->ideaType = 'KEYWORD';
$selector3->requestedAttributeTypes = array('KEYWORD', 'SEARCH_SHARE');


// Set selector paging (required for targeting idea service).
$paging = new Paging();
$paging->startIndex = 0;
$paging->numberResults = 40;
$selector->paging = $paging;

$paging2 = new Paging();
$paging2->startIndex = 0;
$paging2->numberResults = 40;
$selector2->paging = $paging2;

$paging3 = new Paging();
$paging3->startIndex = 0;
$paging3->numberResults = 40;
$selector3->paging = $paging3;

// Create related to keyword search parameter.
$relatedToKeywordSearchParameter = new RelatedToKeywordSearchParameter();
$relatedToKeywordSearchParameter->keywords = array($keyword);


// Create keyword match type search parameter to ensure unique results.
$keywordMatchTypeSearchParameter = new KeywordMatchTypeSearchParameter();
$keywordMatchTypeSearchParameter->keywordMatchTypes = array('EXACT');//BROAD


$selector->searchParameters = array($relatedToKeywordSearchParameter, $keywordMatchTypeSearchParameter);
$selector2->searchParameters = array($relatedToKeywordSearchParameter, $keywordMatchTypeSearchParameter);
$selector3->searchParameters = array($relatedToKeywordSearchParameter, $keywordMatchTypeSearchParameter);

// Get related keywords.
$page = $targetingIdeaService->get($selector);
$page2 = $targetingIdeaService2->get($selector2);
$page3 = $targetingIdeaService3->get($selector3);

// Display related keywords.
if (isset($page->entries)) {

echo '<ul>';
foreach ($page->entries as $key) {
foreach ($page2->entries as $key2) {
foreach ($page3->entries as $key3) {

$data = MapUtils::GetMap($key->data);
$data2 = MapUtils::GetMap($key2->data);
$data3 = MapUtils::GetMap($key3->data);

$keyword = $data['KEYWORD']->value;

echo '<li><a id="name';
echo '" type="text" name="';
echo $keyword->text;
echo '">';
echo $keyword->text . '</a>';


$averageMonthlySearches = isset($data['AVERAGE_TARGETED_MONTHLY_SEARCHES']->value)
? $data['AVERAGE_TARGETED_MONTHLY_SEARCHES']->value : 0;
echo ' / ' . $averageMonthlySearches . ' monthly searches';

$competition = isset($data2['COMPETITION']->value)
? $data2['COMPETITION']->value : 0;
echo ' / ' . $competition . ' competition';

$searchShare = isset($data3['SEARCH_SHARE']->value) ? $data3['SEARCH_SHARE']->value : 0;
echo ' / ' . $searchShare . ' search share';

echo '</li>';
}
}
}
echo '</ul>';

} else {
print "No related keywords were found.\n";
}
} catch (Exception $e) {
print $e->getMessage();
}

ggalan
06-22-2011, 08:05 PM
the fix was too simple, the class had it so it would accept an array


$selector->requestedAttributeTypes = array('KEYWORD', 'AVERAGE_TARGETED_MONTHLY_SEARCHES', 'COMPETITION', 'SEARCH_SHARE');


not this


$selector->requestedAttributeTypes = array('KEYWORD'=>'AVERAGE_TARGETED_MONTHLY_SEARCHES', 'KEYWORD'=>'COMPETITION','KEYWORD'=>'SEARCH_SHARE');