$reportDefinition->dateRangeType = 'YESTERDAY';
does not support
$selector->dateRange = new DateRange($startDate, $endDate);
try not setting the dateRange for the selector, not that it makes
sense for INVALID_FIELD_NAME_FOR_REPORT to be the error returned, but
it's the only thing I am seeing that doesn't look right.
in order to use an absolute date range you have to use dateRangeType =
"CUSTOM_DATE", but if you want to run this report for YESTERDAY all
the time, you can generate one report using that date range type and
the date range will "slide" as time goes on. Once you have the
reportID for a sliding date range report, you no longer have to use
the report definition service, you can just make the http request for
the report and it will no longer cost you any units, so setting an
explicit date range here would just cost more in the end. There is no
good documentation about how Google will be storing reportIDs and for
how long they will be valid, and how many you can store with a single
account, so ideally the code should be able to handle the http
responses that are listed towards the bottom of this page :
http://code.google.com/apis/adwords/docs/reportingtopics.html just in
case a specific reportID is no longer valid.