A relative end_date resolved to the start
of its own window. .parse_date_string() maps a range name
to the beginning of that range, and end_date was passed
through it unchanged, so a value like "last_month" returned
the first day of the period rather than the last and silently shortened
every such report. Absolute YYYY-MM-DD input was always
correct, which is why this was not obvious.
Two revenue metrics used names the API had renamed:
adEarnings and impressionBasedCpm are the
pre-v2 spellings of estimatedAdRevenue and
cpm, so requests carrying them did not return the intended
columns.
The retry helper called force(expr) inside its loop.
expr is a promise, so forcing it again memoises the first
result and a retry replayed a stale value rather than re-issuing the
request. It also signalled “retry” by returning NULL, which
was indistinguishable from a genuine NULL result. The
caller’s expression is now re-evaluated each attempt and the retry
signal is a distinct sentinel.
Only HTTP 200 counted as success, but groups.delete
and groupItems.delete return 204 with an empty body, so a
successful delete was handled as a failure. Any 2xx is now a success.
The error path also called $ on a body that comes back as
raw(0) when empty, which is an error on an atomic vector;
an empty error body now reports the status instead.
checkmate dependency for
robust parameter validationrlang dependency for modern
error handling with abort() and structured error
classesget_channel_overview() - Comprehensive channel
performance metricsget_top_videos() - Best performing videos with
sortingget_audience_demographics() - Age/gender audience
breakdownget_geographic_performance() - Performance by
country/regionget_daily_performance() - Time series data for trend
analysisget_revenue_report() - Monetization metrics (requires
monetary scope)"last_30_days",
"this_month", "yesterday", etc.resolve_date_range() function for date
calculationsget_common_date_ranges() to discover available
optionsget_available_metrics() and
get_available_dimensions() for discoveryyt_to_dataframe() - Convert API responses to clean
data.framesyt_to_tibble() - Modern tibble supportyt_export_csv() - Easy CSV export with automatic
namingyt_extract_summary() - Statistical summariesyt_quick_plot() - One-line visualizationsdiagnose_tubern() - Complete system health checkcheck_api_quota() - API usage monitoringget_report() with additional parameter
validationyoutube/analytics/v1 to
youtubeanalytics.googleapis.com/v2start-date → startDateend-date → endDatemax-results → maxResultsstart-index → startIndexinclude-historical-channel-data →
includeHistoricalChannelDatayoutube.readonly scope to OAuth
authenticationanalytics and
monetary-analytics scopesget_report(): Fixed parameter mapping and improved
documentationlist_groups(): Enhanced parameter handling and
examplesadd_groups(): Updated documentation with correct
examples