CINXE.COM

Python Code Samples  |  YouTube Analytics and Reporting APIs  |  Google for Developers

<!doctype html> <html lang="en" dir="ltr"> <head> <base href="https://developers.google.com/youtube/reporting/v1/code_samples/python"> <meta name="google-signin-client-id" content="721724668570-nbkv1cfusk7kk4eni4pjvepaus73b13t.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award"> <meta property="og:site_name" content="Google for Developers"> <meta property="og:type" content="website"> <meta name="theme-color" content="#ff0000"> <meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/_pwa/developers/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//www.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.googleapis.com" crossorigin> <link rel="preconnect" href="//apis.google.com" crossorigin> <link rel="preconnect" href="//www.google-analytics.com" crossorigin> <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&amp;display=swap"> <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Material+Icons&amp;family=Material+Symbols+Outlined&amp;display=block"> <link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/v3239347c48d1e3c46204782fd038ba187a6753dfa7d7a0d08a574587ae2085f5/developers/css/app.css"> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/v3239347c48d1e3c46204782fd038ba187a6753dfa7d7a0d08a574587ae2085f5/developers/images/favicon-new.png"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/v3239347c48d1e3c46204782fd038ba187a6753dfa7d7a0d08a574587ae2085f5/developers/images/touchicon-180-new.png"> <link rel="canonical" href="https://developers.google.com/youtube/reporting/v1/code_samples/python"> <link rel="search" type="application/opensearchdescription+xml" title="Google for Developers" href="https://developers.google.com/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://developers.google.com/youtube/reporting/v1/code_samples/python"> <link rel="alternate" hreflang="x-default" href="https://developers.google.com/youtube/reporting/v1/code_samples/python"> <link rel="alternate" hreflang="ar" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=ar"> <link rel="alternate" hreflang="bn" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=bn"> <link rel="alternate" hreflang="zh-Hans" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=zh-cn"> <link rel="alternate" hreflang="zh-Hant" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=zh-tw"> <link rel="alternate" hreflang="fa" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=fa"> <link rel="alternate" hreflang="fr" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=fr"> <link rel="alternate" hreflang="de" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=de"> <link rel="alternate" hreflang="he" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=he"> <link rel="alternate" hreflang="hi" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=hi"> <link rel="alternate" hreflang="id" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=id"> <link rel="alternate" hreflang="it" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=it"> <link rel="alternate" hreflang="ja" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=ja"> <link rel="alternate" hreflang="ko" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=ko"> <link rel="alternate" hreflang="pl" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=pl"> <link rel="alternate" hreflang="pt-BR" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=pt-br"> <link rel="alternate" hreflang="ru" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=ru"> <link rel="alternate" hreflang="es-419" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=es-419"> <link rel="alternate" hreflang="th" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=th"> <link rel="alternate" hreflang="tr" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=tr"> <link rel="alternate" hreflang="vi" href="https://developers.google.com/youtube/reporting/v1/code_samples/python?hl=vi"> <title>Python Code Samples &nbsp;|&nbsp; YouTube Analytics and Reporting APIs &nbsp;|&nbsp; Google for Developers</title> <meta property="og:title" content="Python Code Samples &nbsp;|&nbsp; YouTube Analytics and Reporting APIs &nbsp;|&nbsp; Google for Developers"> <meta property="og:url" content="https://developers.google.com/youtube/reporting/v1/code_samples/python"> <meta property="og:image" content="https://www.gstatic.com/devrel-devsite/prod/v3239347c48d1e3c46204782fd038ba187a6753dfa7d7a0d08a574587ae2085f5/developers/images/opengraph/youtube-theme.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="675"> <meta property="og:locale" content="en"> <meta name="twitter:card" content="summary_large_image"> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "headline": "Python Code Samples" } </script> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "name": "YouTube", "item": "https://developers.google.com/youtube" },{ "@type": "ListItem", "position": 2, "name": "Analytics and Reporting APIs", "item": "https://developers.google.com/youtube/analytics" },{ "@type": "ListItem", "position": 3, "name": "Python Code Samples", "item": "https://developers.google.com/youtube/reporting/v1/code_samples/python" }] } </script> <meta http-equiv="X-Translated-By" content="Google"> <meta http-equiv="X-Translated-To" content="ru"> <script type="text/javascript" src="https://www.gstatic.com/_/translate_http/_/js/k=translate_http.tr.en_GB.SDZVnIGteOc.O/am=DAY/d=1/rs=AN8SPfpg5c7Ir1xu4O4UYB2MrBzTy-7gWA/m=corsproxy" data-sourceurl="https://developers.google.com/youtube/reporting/v1/code_samples/python"></script> <link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" rel="stylesheet"> <script type="text/javascript" src="https://www.gstatic.com/_/translate_http/_/js/k=translate_http.tr.en_GB.SDZVnIGteOc.O/am=DAY/d=1/exm=corsproxy/ed=1/rs=AN8SPfpg5c7Ir1xu4O4UYB2MrBzTy-7gWA/m=phishing_protection" data-phishing-protection-enabled="false" data-forms-warning-enabled="true" data-source-url="https://developers.google.com/youtube/reporting/v1/code_samples/python"></script> <meta name="robots" content="none"> </head> <body class="" template="page" theme="youtube-theme" type="article" layout="docs" display-toc="" pending=""> <script type="text/javascript" src="https://www.gstatic.com/_/translate_http/_/js/k=translate_http.tr.en_GB.SDZVnIGteOc.O/am=DAY/d=1/exm=corsproxy,phishing_protection/ed=1/rs=AN8SPfpg5c7Ir1xu4O4UYB2MrBzTy-7gWA/m=navigationui" data-environment="prod" data-proxy-url="https://developers-google-com.translate.goog" data-proxy-full-url="https://developers-google-com.translate.goog/youtube/reporting/v1/code_samples/python?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" data-source-url="https://developers.google.com/youtube/reporting/v1/code_samples/python" data-source-language="en" data-target-language="ru" data-display-language="en-GB" data-detected-source-language="" data-is-source-untranslated="false" data-source-untranslated-url="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://developers.google.com/youtube/reporting/v1/code_samples/python&amp;anno=2" data-client="tr"></script> {# Vars for auth docs %} <link rel="stylesheet" href="/extras.css"> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <section class="devsite-wrapper"><devsite-cookie-notification-bar></devsite-cookie-notification-bar><devsite-header role="banner"> <div class="devsite-header--inner nocontent"> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"><button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"><a href="https://developers-google-com.translate.goog/youtube?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB"> <div class="devsite-product-logo-container" size="medium"><picture> <img class="devsite-product-logo" alt="YouTube" src="https://developers.google.com/static/site-assets/logo-youtube.svg" srcset="https://developers-google-com.translate.goog/static/site-assets/logo-youtube.svg?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" sizes="64px" loading="lazy"> </picture> </div></a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" aria-label="Product breadcrumb"> <li class="devsite-breadcrumb-item "><a href="https://developers-google-com.translate.goog/youtube?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="YouTube"> YouTube </a></li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div><a href="https://developers-google-com.translate.goog/youtube/analytics?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="YouTube Analytics and Reporting APIs"> Analytics and Reporting APIs </a></li> </ul></span> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> </div><devsite-search enable-signin enable-search enable-suggestions enable-query-completion project-name="YouTube Analytics and Reporting APIs" tenant-name="Google for Developers" project-scope="/youtube/analytics" url-scoped="https://developers.google.com/s/results/youtube/analytics"> <form class="devsite-search-form" action="https://developers.google.com/s/results" method="GET"> <div class="devsite-search-container"><button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> <div class="devsite-searchbox"><input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-expanded="false" aria-haspopup="listbox" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="combobox" type="text" value=""> <div class="devsite-search-image material-icons" aria-hidden="true"> </div> <div class="devsite-search-shortcut-icon-container" aria-hidden="true"><kbd class="devsite-search-shortcut-icon">/</kbd> </div> </div> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div><devsite-language-selector> <ul role="presentation"> <li role="presentation"><a role="menuitem" lang="en">English</a></li> <li role="presentation"><a role="menuitem" lang="de">Deutsch</a></li> <li role="presentation"><a role="menuitem" lang="es">Español</a></li> <li role="presentation"><a role="menuitem" lang="es_419">Español – América Latina</a></li> <li role="presentation"><a role="menuitem" lang="fr">Français</a></li> <li role="presentation"><a role="menuitem" lang="id">Indonesia</a></li> <li role="presentation"><a role="menuitem" lang="it">Italiano</a></li> <li role="presentation"><a role="menuitem" lang="pl">Polski</a></li> <li role="presentation"><a role="menuitem" lang="pt_br">Português – Brasil</a></li> <li role="presentation"><a role="menuitem" lang="vi">Tiếng Việt</a></li> <li role="presentation"><a role="menuitem" lang="tr">Türkçe</a></li> <li role="presentation"><a role="menuitem" lang="ru">Русский</a></li> <li role="presentation"><a role="menuitem" lang="he">עברית</a></li> <li role="presentation"><a role="menuitem" lang="ar">العربيّة</a></li> <li role="presentation"><a role="menuitem" lang="fa">فارسی</a></li> <li role="presentation"><a role="menuitem" lang="hi">हिंदी</a></li> <li role="presentation"><a role="menuitem" lang="bn">বাংলা</a></li> <li role="presentation"><a role="menuitem" lang="th">ภาษาไทย</a></li> <li role="presentation"><a role="menuitem" lang="zh_cn">中文 – 简体</a></li> <li role="presentation"><a role="menuitem" lang="zh_tw">中文 – 繁體</a></li> <li role="presentation"><a role="menuitem" lang="ja">日本語</a></li> <li role="presentation"><a role="menuitem" lang="ko">한국어</a></li> </ul> </devsite-language-selector> <devsite-user enable-profiles fp-auth id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> <div class="devsite-collapsible-section "> <div class="devsite-header-background"> <div class="devsite-doc-set-nav-row"><devsite-tabs class="lower-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Lower tabs"><tab> <a href="https://developers-google-com.translate.goog/youtube/analytics?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" track-metadata-eventdetail="https://developers.google.com/youtube/analytics" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - home" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Home" track-name="home"> Home </a> </tab> <tab> <a href="https://developers-google-com.translate.goog/youtube/reporting?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" track-metadata-eventdetail="https://developers.google.com/youtube/reporting" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - overview" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Overview" track-name="overview"> Overview </a> </tab> <tab> <a href="https://developers-google-com.translate.goog/youtube/reporting/guides/authorization?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" track-metadata-eventdetail="https://developers.google.com/youtube/reporting/guides/authorization" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - authorization" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Authorization" track-name="authorization"> Authorization </a> </tab> <tab> <a href="https://developers-google-com.translate.goog/youtube/reporting/v1/reports?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" track-metadata-eventdetail="https://developers.google.com/youtube/reporting/v1/reports" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - bulk reports" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Bulk Reports" track-name="bulk reports"> Bulk Reports </a> </tab> <tab> <a href="https://developers-google-com.translate.goog/youtube/analytics/data_model?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" track-metadata-eventdetail="https://developers.google.com/youtube/analytics/data_model" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - targeted queries" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Targeted Queries" track-name="targeted queries"> Targeted Queries </a> </tab> <tab class="devsite-active"> <a href="https://developers-google-com.translate.goog/youtube/reporting/v1/code_samples?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" track-metadata-eventdetail="https://developers.google.com/youtube/reporting/v1/code_samples" class="devsite-tabs-content gc-analytics-event " track-type="nav" track-metadata-position="nav - resources" track-metadata-module="primary nav" aria-label="Resources, selected" data-category="Site-Wide Custom Events" data-label="Tab: Resources" track-name="resources"> Resources </a> </tab> </nav> </devsite-tabs> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars> <div class="devsite-book-nav-filter"><span class="filter-list-icon material-icons" aria-hidden="true"></span> <input type="text" placeholder="Filter" aria-label="Type to filter" role="searchbox"> <span class="filter-clear-button hidden" data-title="Clear filter" aria-label="Clear filter" role="button" tabindex="0"></span> </div> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"><button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"><a href="https://developers-google-com.translate.goog/youtube?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB"> <div class="devsite-product-logo-container" size="medium"><picture> <img class="devsite-product-logo" alt="YouTube" src="https://developers.google.com/static/site-assets/logo-youtube.svg" srcset="https://developers-google-com.translate.goog/static/site-assets/logo-youtube.svg?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" sizes="64px" loading="lazy"> </picture> </div></a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" aria-label="Upper header breadcrumb"> <li class="devsite-breadcrumb-item "><a href="https://developers-google-com.translate.goog/youtube?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="YouTube"> YouTube </a></li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div><a href="https://developers-google-com.translate.goog/youtube/analytics?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="YouTube Analytics and Reporting APIs"> Analytics and Reporting APIs </a></li> </ul></span> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> <li class="devsite-nav-item"><a href="https://developers-google-com.translate.goog/youtube/analytics?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Home" track-name="home" track-type="navMenu" track-metadata-eventdetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip> Home </span> </a></li> <li class="devsite-nav-item"><a href="https://developers-google-com.translate.goog/youtube/reporting?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Overview" track-name="overview" track-type="navMenu" track-metadata-eventdetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip> Overview </span> </a></li> <li class="devsite-nav-item"><a href="https://developers-google-com.translate.goog/youtube/reporting/guides/authorization?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Authorization" track-name="authorization" track-type="navMenu" track-metadata-eventdetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip> Authorization </span> <span class="devsite-nav-icon material-icons" data-icon="forward"> </span> </a></li> <li class="devsite-nav-item"><a href="https://developers-google-com.translate.goog/youtube/reporting/v1/reports?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Bulk Reports" track-name="bulk reports" track-type="navMenu" track-metadata-eventdetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip> Bulk Reports </span> <span class="devsite-nav-icon material-icons" data-icon="forward"> </span> </a></li> <li class="devsite-nav-item"><a href="https://developers-google-com.translate.goog/youtube/analytics/data_model?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Targeted Queries" track-name="targeted queries" track-type="navMenu" track-metadata-eventdetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip> Targeted Queries </span> <span class="devsite-nav-icon material-icons" data-icon="forward"> </span> </a></li> <li class="devsite-nav-item"><a href="https://developers-google-com.translate.goog/youtube/reporting/v1/code_samples?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event devsite-nav-has-children devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Resources" track-name="resources" track-type="navMenu" track-metadata-eventdetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip> Resources </span> <span class="devsite-nav-icon material-icons" data-icon="forward"> </span> </a></li> </ul> </div> <div class="devsite-mobile-nav-bottom"> <ul class="devsite-nav-list" menu="_book"> <li class="devsite-nav-item"><a href="https://developers-google-com.translate.goog/youtube/reporting/v1/code_samples?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /youtube/reporting/v1/code_samples" track-type="bookNav" track-name="click" track-metadata-eventdetail="/youtube/reporting/v1/code_samples"><span class="devsite-nav-text" tooltip>Summary</span></a></li> <li class="devsite-nav-item"><a href="https://developers-google-com.translate.goog/youtube/reporting/tools?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /youtube/reporting/tools" track-type="bookNav" track-name="click" track-metadata-eventdetail="/youtube/reporting/tools"><span class="devsite-nav-text" tooltip>Overview</span></a></li> <li class="devsite-nav-item devsite-nav-break"></li> <li class="devsite-nav-item devsite-nav-heading"> <div class="devsite-nav-title devsite-nav-title-no-path"><span class="devsite-nav-text" tooltip>Code samples</span> </div></li> <li class="devsite-nav-item"><a href="https://developers-google-com.translate.goog/youtube/reporting/v1/code_samples/java?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /youtube/reporting/v1/code_samples/java" track-type="bookNav" track-name="click" track-metadata-eventdetail="/youtube/reporting/v1/code_samples/java"><span class="devsite-nav-text" tooltip>Java</span></a></li> <li class="devsite-nav-item"><a href="https://developers-google-com.translate.goog/youtube/analytics/v1/code_samples/javascript?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /youtube/analytics/v1/code_samples/javascript" track-type="bookNav" track-name="click" track-metadata-eventdetail="/youtube/analytics/v1/code_samples/javascript"><span class="devsite-nav-text" tooltip>JavaScript</span></a></li> <li class="devsite-nav-item"><a href="https://developers-google-com.translate.goog/youtube/reporting/v1/code_samples/php?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /youtube/reporting/v1/code_samples/php" track-type="bookNav" track-name="click" track-metadata-eventdetail="/youtube/reporting/v1/code_samples/php"><span class="devsite-nav-text" tooltip>PHP</span></a></li> <li class="devsite-nav-item"><a href="https://developers-google-com.translate.goog/youtube/reporting/v1/code_samples/python?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /youtube/reporting/v1/code_samples/python" track-type="bookNav" track-name="click" track-metadata-eventdetail="/youtube/reporting/v1/code_samples/python"><span class="devsite-nav-text" tooltip>Python</span></a></li> <li class="devsite-nav-item devsite-nav-heading"> <div class="devsite-nav-title devsite-nav-title-no-path"><span class="devsite-nav-text" tooltip>APIs Explorer</span> </div></li> <li class="devsite-nav-item devsite-nav-external"><a href="https://developers-google-com.translate.goog/apis-explorer/?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB#p/youtubeReporting/v1/" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://developers.google.com/apis-explorer/#p/youtubeReporting/v1/" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://developers.google.com/apis-explorer/#p/youtubeReporting/v1/"><span class="devsite-nav-text" tooltip>Targeted queries</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li> <li class="devsite-nav-item devsite-nav-external"><a href="https://developers-google-com.translate.goog/apis-explorer/?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB#p/youtubeReporting/v1/" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://developers.google.com/apis-explorer/#p/youtubeReporting/v1/" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://developers.google.com/apis-explorer/#p/youtubeReporting/v1/"><span class="devsite-nav-text" tooltip>Bulk reports</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li> <li class="devsite-nav-item devsite-nav-break"></li> <li class="devsite-nav-item devsite-nav-heading"> <div class="devsite-nav-title devsite-nav-title-no-path"><span class="devsite-nav-text" tooltip>Client Libraries</span> </div></li> <li class="devsite-nav-item devsite-nav-external"><a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://github.com/google/google-api-go-client" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://github.com/google/google-api-go-client" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://github.com/google/google-api-go-client"><span class="devsite-nav-text" tooltip>Go</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li> <li class="devsite-nav-item devsite-nav-external"><a href="https://developers-google-com.translate.goog/api-client-library/java?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /api-client-library/java" track-type="bookNav" track-name="click" track-metadata-eventdetail="/api-client-library/java"><span class="devsite-nav-text" tooltip>Java</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li> <li class="devsite-nav-item devsite-nav-external"><a href="https://developers-google-com.translate.goog/api-client-library/javascript/start/start-js?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /api-client-library/javascript/start/start-js" track-type="bookNav" track-name="click" track-metadata-eventdetail="/api-client-library/javascript/start/start-js"><span class="devsite-nav-text" tooltip>JavaScript</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li> <li class="devsite-nav-item devsite-nav-external"><a href="https://developers-google-com.translate.goog/api-client-library/dotnet/get_started?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /api-client-library/dotnet/get_started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/api-client-library/dotnet/get_started"><span class="devsite-nav-text" tooltip>.NET</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li> <li class="devsite-nav-item devsite-nav-external"><a href="https://developers-google-com.translate.goog/api-client-library/php?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /api-client-library/php" track-type="bookNav" track-name="click" track-metadata-eventdetail="/api-client-library/php"><span class="devsite-nav-text" tooltip>PHP</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li> <li class="devsite-nav-item devsite-nav-external"><a href="https://developers-google-com.translate.goog/api-client-library/python?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /api-client-library/python" track-type="bookNav" track-name="click" track-metadata-eventdetail="/api-client-library/python"><span class="devsite-nav-text" tooltip>Python</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li> <li class="devsite-nav-item devsite-nav-external"><a href="https://developers-google-com.translate.goog/api-client-library/ruby/start/get_started?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /api-client-library/ruby/start/get_started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/api-client-library/ruby/start/get_started"><span class="devsite-nav-text" tooltip>Ruby</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" class="devsite-main-content" has-book-nav has-sidebar> <div class="devsite-sidebar"> <div class="devsite-sidebar-content"><devsite-toc class="devsite-nav" role="navigation" aria-label="On this page" depth="2" scrollbars></devsite-toc> <devsite-recommendations-sidebar class="nocontent devsite-nav"> </devsite-recommendations-sidebar> </div> </div><devsite-content> <article class="devsite-article"> <style> .yt-reporting-api-report-name { color: red; font: 500 16px/32px Roboto,sans-serif; } .yt-reporting-api-section .kd-tabbutton { max-width: 340px; } section.yt-reporting-api-section header.kd-tabbutton { text-transform: lowercase; } article.yt-reporting-api-report div { padding: 10px 10px; } article.yt-reporting-api-report div.current-report { background: #e0f2f1; color: #00897b; font-weight: bold } article.yt-reporting-api-report div.deprecated-report { background: #fff3e0; color: #dd2c00; } article.yt-reporting-api-report div.obsolete-report { background: #fbe9e7; color: #d50000; } </style> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "><a href="https://developers-google-com.translate.goog/?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail=""> Home </a></li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div><a href="https://developers-google-com.translate.goog/products?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail=""> Products </a></li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div><a href="https://developers-google-com.translate.goog/youtube?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="3" track-type="globalNav" track-name="breadcrumb" track-metadata-position="3" track-metadata-eventdetail="YouTube"> YouTube </a></li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div><a href="https://developers-google-com.translate.goog/youtube/analytics?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="4" track-type="globalNav" track-name="breadcrumb" track-metadata-position="4" track-metadata-eventdetail="YouTube Analytics and Reporting APIs"> Analytics and Reporting APIs </a></li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div><a href="https://developers-google-com.translate.goog/youtube/reporting/v1/code_samples?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="5" track-type="globalNav" track-name="breadcrumb" track-metadata-position="5" track-metadata-eventdetail=""> Resources </a></li> </ul><devsite-thumb-rating position="header"> </devsite-thumb-rating> </div> <h1 class="devsite-page-title" tabindex="-1">Python Code Samples</h1><devsite-feature-tooltip ack-key="AckCollectionsBookmarkTooltipDismiss" analytics-category="Site-Wide Custom Events" analytics-action-show="Callout Profile displayed" analytics-action-close="Callout Profile dismissed" analytics-label="Create Collection Callout" class="devsite-page-bookmark-tooltip nocontent" dismiss-button="true" id="devsite-collections-dropdown" dismiss-button-text="Dismiss" close-button-text="Got it"> <devsite-bookmark></devsite-bookmark> <span slot="popout-heading"> Stay organized with collections </span> <span slot="popout-contents"> Save and categorize content based on your preferences. </span> </devsite-feature-tooltip> <div class="devsite-page-title-meta"> <devsite-view-release-notes></devsite-view-release-notes> </div><devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded> </devsite-toc> <devsite-recommendations-dropdown class="nocontent"></devsite-recommendations-dropdown> <div class="devsite-article-body clearfix "> <p>The following code samples, which use the <a href="https://developers-google-com.translate.goog/api-client-library/python/start/get_started?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB">Google APIs Client Library for <span class="notranslate">Python</span></a>, are available for the <span class="notranslate">YouTube Reporting API</span> and <span class="notranslate">YouTube Analytics API</span>. You can download these code samples from the <code translate="no" dir="ltr">python</code> folder of the <a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://github.com/youtube/api-samples">YouTube APIs code sample repository on GitHub</a>.</p> <ul> <li><p>Bulk reports (YouTube Reporting API)</p> <ol style="list-style-type: none"> <li><a href="https://developers-google-com.translate.goog/youtube/reporting/v1/code_samples/python?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB#create_a_reporting_job">Create a reporting job</a> (<code translate="no" dir="ltr"><a href="https://developers-google-com.translate.goog/youtube/reporting/v1/reference/rest/v1/reportTypes/list?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB">reportTypes.list</a></code>, <code translate="no" dir="ltr"><a href="https://developers-google-com.translate.goog/youtube/reporting/v1/reference/rest/v1/jobs/create?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB">jobs.create</a></code>)</li> <li><a href="https://developers-google-com.translate.goog/youtube/reporting/v1/code_samples/python?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB#retrieve_reports">Retrieve reports</a> (<code translate="no" dir="ltr"><a href="https://developers-google-com.translate.goog/youtube/reporting/v1/reference/rest/v1/jobs/list?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB">jobs.list</a></code>, <code translate="no" dir="ltr"><a href="https://developers-google-com.translate.goog/youtube/reporting/v1/reference/rest/v1/jobs.reports/list?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB">jobs.reports.list</a></code>)</li> </ol></li> <li><p>Targeted query reports (YouTube Analytics API)</p> <ol style="list-style-type: none"> <li><a href="https://developers-google-com.translate.goog/youtube/reporting/v1/code_samples/python?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB#retrieve_daily_channel_statistics">Retrieve daily channel statistics</a> (<code translate="no" dir="ltr"><a href="https://developers-google-com.translate.goog/youtube/analytics/v1/reports/query?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB">reports.query</a></code>)</li> </ol></li> </ul> <h2 id="bulk-reports" data-text="Bulk reports" tabindex="-1">Bulk reports</h2> <h3 id="retrieve_reports" data-text="Retrieve reports" tabindex="-1">Retrieve reports</h3> <p>This code sample demonstrates how to retrieve reports created by a specific job. It calls the <code translate="no" dir="ltr">jobs.list</code> method to retrieve reporting jobs. It then calls the <code translate="no" dir="ltr">reports.list</code> method with the <code translate="no" dir="ltr">jobId</code> parameter set to a specific job id to retrieve reports created by that job. Finally, the sample prints out the download URL for each report.</p> <div></div><devsite-code> <pre class="devsite-click-to-copy notranslate" dir="ltr" is-upgraded syntax="Python"><span class="devsite-syntax-ch">#!/usr/bin/python</span> <span class="devsite-syntax-c1">###</span> <span class="devsite-syntax-c1">#</span> <span class="devsite-syntax-c1"># This script retrieves YouTube Reporting API reports. Use cases:</span> <span class="devsite-syntax-c1"># 1. If you specify a report URL, the script downloads that report.</span> <span class="devsite-syntax-c1"># 2. Otherwise, if you specify a job ID, the script retrieves a list of</span> <span class="devsite-syntax-c1"># available reports for that job and prompts you to select a report.</span> <span class="devsite-syntax-c1"># Then it retrieves that report as in case 1.</span> <span class="devsite-syntax-c1"># 3. Otherwise, the list retrieves a list of jobs for the user or,</span> <span class="devsite-syntax-c1"># if specified, the content owner that the user is acting on behalf of.</span> <span class="devsite-syntax-c1"># Then it prompts the user to select a job, and then executes case 2 and</span> <span class="devsite-syntax-c1"># then case 1.</span> <span class="devsite-syntax-c1"># Usage examples:</span> <span class="devsite-syntax-c1"># python retrieve_reports.py --content_owner_id=&lt;CONTENT_OWNER_ID&gt; --local_file=&lt;LOCAL_FILE&gt;</span> <span class="devsite-syntax-c1"># python retrieve_reports.py --content_owner_id=&lt;CONTENT_OWNER_ID&gt; --job_id=&lt;JOB_ID&gt; --local_file=&lt;LOCAL_FILE&gt;</span> <span class="devsite-syntax-c1"># python retrieve_reports.py --content_owner_id=&lt;CONTENT_OWNER_ID&gt; --report_url=&lt;REPORT_URL&gt; --local_file=&lt;LOCAL_FILE&gt;</span> <span class="devsite-syntax-c1">#</span> <span class="devsite-syntax-c1">###</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-nn">argparse</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-nn">os</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-nn">google.oauth2.credentials</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-nn">google_auth_oauthlib.flow</span> <span class="devsite-syntax-kn">from</span> <span class="devsite-syntax-nn">googleapiclient.discovery</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">build</span> <span class="devsite-syntax-kn">from</span> <span class="devsite-syntax-nn">googleapiclient.errors</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">HttpError</span> <span class="devsite-syntax-kn">from</span> <span class="devsite-syntax-nn">googleapiclient.http</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">MediaIoBaseDownload</span> <span class="devsite-syntax-kn">from</span> <span class="devsite-syntax-nn">google_auth_oauthlib.flow</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">InstalledAppFlow</span> <span class="devsite-syntax-kn">from</span> <span class="devsite-syntax-nn">io</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">FileIO</span> <span class="devsite-syntax-c1"># The CLIENT_SECRETS_FILE variable specifies the name of a file that contains</span> <span class="devsite-syntax-c1"># the OAuth 2.0 information for this application, including its client_id and</span> <span class="devsite-syntax-c1"># client_secret. You can acquire an OAuth 2.0 client ID and client secret from</span> <span class="devsite-syntax-c1"># the {{ Google Cloud Console }} at</span> <span class="devsite-syntax-c1"># {{ https://cloud.google.com/console }}.</span> <span class="devsite-syntax-c1"># Please ensure that you have enabled the YouTube Data API for your project.</span> <span class="devsite-syntax-c1"># For more information about using OAuth2 to access the YouTube Data API, see:</span> <span class="devsite-syntax-c1"># https://developers.google.com/youtube/v3/guides/authentication</span> <span class="devsite-syntax-c1"># For more information about the client_secrets.json file format, see:</span> <span class="devsite-syntax-c1"># https://developers.google.com/api-client-library/python/guide/aaa_client_secrets</span> <span class="devsite-syntax-n">CLIENT_SECRETS_FILE</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-s1">'client_secret.json'</span> <span class="devsite-syntax-c1"># This OAuth 2.0 access scope allows for read access to YouTube Analytics</span> <span class="devsite-syntax-c1"># monetary reports for the authenticated user's account. Any request that</span> <span class="devsite-syntax-c1"># retrieves earnings or ad performance metrics must use this scope.</span> <span class="devsite-syntax-n">SCOPES</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'https://www.googleapis.com/auth/yt-analytics-monetary.readonly'</span><span class="devsite-syntax-p">]</span> <span class="devsite-syntax-n">API_SERVICE_NAME</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-s1">'youtubereporting'</span> <span class="devsite-syntax-n">API_VERSION</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-s1">'v1'</span> <span class="devsite-syntax-c1"># Authorize the request and store authorization credentials.</span> <span class="devsite-syntax-k">def</span> <span class="devsite-syntax-nf">get_authenticated_service</span><span class="devsite-syntax-p">():</span> <span class="devsite-syntax-n">flow</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">InstalledAppFlow</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">from_client_secrets_file</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">CLIENT_SECRETS_FILE</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">SCOPES</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">credentials</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">flow</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">run_console</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-n">build</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">API_SERVICE_NAME</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">API_VERSION</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">credentials</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">credentials</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># Remove keyword arguments that are not set.</span> <span class="devsite-syntax-k">def</span> <span class="devsite-syntax-nf">remove_empty_kwargs</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">**</span><span class="devsite-syntax-n">kwargs</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-n">good_kwargs</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">{}</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-n">kwargs</span> <span class="devsite-syntax-ow">is</span> <span class="devsite-syntax-ow">not</span> <span class="devsite-syntax-kc">None</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-k">for</span> <span class="devsite-syntax-n">key</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">value</span> <span class="devsite-syntax-ow">in</span> <span class="devsite-syntax-n">kwargs</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">iteritems</span><span class="devsite-syntax-p">():</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-n">value</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">good_kwargs</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-n">key</span><span class="devsite-syntax-p">]</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">value</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-n">good_kwargs</span> <span class="devsite-syntax-c1"># Call the YouTube Reporting API's jobs.list method to retrieve reporting jobs.</span> <span class="devsite-syntax-k">def</span> <span class="devsite-syntax-nf">list_reporting_jobs</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">youtube_reporting</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-o">**</span><span class="devsite-syntax-n">kwargs</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-c1"># Only include the onBehalfOfContentOwner keyword argument if the user</span> <span class="devsite-syntax-c1"># set a value for the --content_owner argument.</span> <span class="devsite-syntax-n">kwargs</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">remove_empty_kwargs</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">**</span><span class="devsite-syntax-n">kwargs</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># Retrieve the reporting jobs for the user (or content owner).</span> <span class="devsite-syntax-n">results</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">youtube_reporting</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">jobs</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">list</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">**</span><span class="devsite-syntax-n">kwargs</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">execute</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-s1">'jobs'</span> <span class="devsite-syntax-ow">in</span> <span class="devsite-syntax-n">results</span> <span class="devsite-syntax-ow">and</span> <span class="devsite-syntax-n">results</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'jobs'</span><span class="devsite-syntax-p">]:</span> <span class="devsite-syntax-n">jobs</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">results</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'jobs'</span><span class="devsite-syntax-p">]</span> <span class="devsite-syntax-k">for</span> <span class="devsite-syntax-n">job</span> <span class="devsite-syntax-ow">in</span> <span class="devsite-syntax-n">jobs</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-nb">print</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Reporting job id: </span><span class="devsite-syntax-si">%s</span><span class="devsite-syntax-se">\n</span><span class="devsite-syntax-s1"> name: </span><span class="devsite-syntax-si">%s</span><span class="devsite-syntax-se">\n</span><span class="devsite-syntax-s1"> for reporting type: </span><span class="devsite-syntax-si">%s</span><span class="devsite-syntax-se">\n</span><span class="devsite-syntax-s1">'</span> <span class="devsite-syntax-o">%</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">job</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'id'</span><span class="devsite-syntax-p">],</span> <span class="devsite-syntax-n">job</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'name'</span><span class="devsite-syntax-p">],</span> <span class="devsite-syntax-n">job</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'reportTypeId'</span><span class="devsite-syntax-p">]))</span> <span class="devsite-syntax-k">else</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-nb">print</span> <span class="devsite-syntax-s1">'No jobs found'</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-kc">False</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-kc">True</span> <span class="devsite-syntax-c1"># Call the YouTube Reporting API's reports.list method to retrieve reports created by a job.</span> <span class="devsite-syntax-k">def</span> <span class="devsite-syntax-nf">retrieve_reports</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">youtube_reporting</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-o">**</span><span class="devsite-syntax-n">kwargs</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-c1"># Only include the onBehalfOfContentOwner keyword argument if the user</span> <span class="devsite-syntax-c1"># set a value for the --content_owner argument.</span> <span class="devsite-syntax-n">kwargs</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">remove_empty_kwargs</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">**</span><span class="devsite-syntax-n">kwargs</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># Retrieve available reports for the selected job.</span> <span class="devsite-syntax-n">results</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">youtube_reporting</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">jobs</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">reports</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">list</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-o">**</span><span class="devsite-syntax-n">kwargs</span> <span class="devsite-syntax-p">)</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">execute</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-s1">'reports'</span> <span class="devsite-syntax-ow">in</span> <span class="devsite-syntax-n">results</span> <span class="devsite-syntax-ow">and</span> <span class="devsite-syntax-n">results</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'reports'</span><span class="devsite-syntax-p">]:</span> <span class="devsite-syntax-n">reports</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">results</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'reports'</span><span class="devsite-syntax-p">]</span> <span class="devsite-syntax-k">for</span> <span class="devsite-syntax-n">report</span> <span class="devsite-syntax-ow">in</span> <span class="devsite-syntax-n">reports</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-nb">print</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Report dates: </span><span class="devsite-syntax-si">%s</span><span class="devsite-syntax-s1"> to </span><span class="devsite-syntax-si">%s</span><span class="devsite-syntax-se">\n</span><span class="devsite-syntax-s1"> download URL: </span><span class="devsite-syntax-si">%s</span><span class="devsite-syntax-se">\n</span><span class="devsite-syntax-s1">'</span> <span class="devsite-syntax-o">%</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">report</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'startTime'</span><span class="devsite-syntax-p">],</span> <span class="devsite-syntax-n">report</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'endTime'</span><span class="devsite-syntax-p">],</span> <span class="devsite-syntax-n">report</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'downloadUrl'</span><span class="devsite-syntax-p">]))</span> <span class="devsite-syntax-c1"># Call the YouTube Reporting API's media.download method to download the report.</span> <span class="devsite-syntax-k">def</span> <span class="devsite-syntax-nf">download_report</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">youtube_reporting</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">report_url</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">local_file</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-n">request</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">youtube_reporting</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">media</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">download</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-n">resourceName</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">' '</span> <span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">request</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">uri</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">report_url</span> <span class="devsite-syntax-n">fh</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">FileIO</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">local_file</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">mode</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'wb'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># Stream/download the report in a single request.</span> <span class="devsite-syntax-n">downloader</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">MediaIoBaseDownload</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">fh</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">request</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">chunksize</span><span class="devsite-syntax-o">=-</span><span class="devsite-syntax-mi">1</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">done</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-kc">False</span> <span class="devsite-syntax-k">while</span> <span class="devsite-syntax-n">done</span> <span class="devsite-syntax-ow">is</span> <span class="devsite-syntax-kc">False</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">status</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">done</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">downloader</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">next_chunk</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-n">status</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-nb">print</span> <span class="devsite-syntax-s1">'Download </span><span class="devsite-syntax-si">%d%%</span><span class="devsite-syntax-s1">.'</span> <span class="devsite-syntax-o">%</span> <span class="devsite-syntax-nb">int</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">status</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">progress</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-o">*</span> <span class="devsite-syntax-mi">100</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-nb">print</span> <span class="devsite-syntax-s1">'Download Complete!'</span> <span class="devsite-syntax-c1"># Prompt the user to select a job and return the specified ID.</span> <span class="devsite-syntax-k">def</span> <span class="devsite-syntax-nf">get_job_id_from_user</span><span class="devsite-syntax-p">():</span> <span class="devsite-syntax-n">job_id</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">raw_input</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Please enter the job id for the report retrieval: '</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-nb">print</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'You chose "</span><span class="devsite-syntax-si">%s</span><span class="devsite-syntax-s1">" as the job Id for the report retrieval.'</span> <span class="devsite-syntax-o">%</span> <span class="devsite-syntax-n">job_id</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-n">job_id</span> <span class="devsite-syntax-c1"># Prompt the user to select a report URL and return the specified URL.</span> <span class="devsite-syntax-k">def</span> <span class="devsite-syntax-nf">get_report_url_from_user</span><span class="devsite-syntax-p">():</span> <span class="devsite-syntax-n">report_url</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">raw_input</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Please enter the report URL to download: '</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-nb">print</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'You chose "</span><span class="devsite-syntax-si">%s</span><span class="devsite-syntax-s1">" to download.'</span> <span class="devsite-syntax-o">%</span> <span class="devsite-syntax-n">report_url</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-n">report_url</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-vm">__name__</span> <span class="devsite-syntax-o">==</span> <span class="devsite-syntax-s1">'__main__'</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">parser</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">argparse</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">ArgumentParser</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-n">parser</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">add_argument</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'--content_owner'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">default</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">''</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">help</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'ID of content owner for which you are retrieving jobs and reports'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">parser</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">add_argument</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'--job_id'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">default</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-kc">None</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">help</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'ID of the job for which you are retrieving reports. If not '</span> <span class="devsite-syntax-o">+</span> <span class="devsite-syntax-s1">'provided AND report_url is also not provided, then the script '</span> <span class="devsite-syntax-o">+</span> <span class="devsite-syntax-s1">'calls jobs.list() to retrieve a list of jobs.'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">parser</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">add_argument</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'--report_url'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">default</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-kc">None</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">help</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'URL of the report to retrieve. If not specified, the script '</span> <span class="devsite-syntax-o">+</span> <span class="devsite-syntax-s1">'calls reports.list() to retrieve a list of reports for the '</span> <span class="devsite-syntax-o">+</span> <span class="devsite-syntax-s1">'selected job.'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">parser</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">add_argument</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'--local_file'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">default</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'yt_report.txt'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">help</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'The name of the local file where the downloaded report will be written.'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">args</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">parser</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">parse_args</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-n">youtube_reporting</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">get_authenticated_service</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-k">try</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-c1"># If the user has not specified a job ID or report URL, retrieve a list</span> <span class="devsite-syntax-c1"># of available jobs and prompt the user to select one.</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-ow">not</span> <span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">job_id</span> <span class="devsite-syntax-ow">and</span> <span class="devsite-syntax-ow">not</span> <span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">report_url</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-n">list_reporting_jobs</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">youtube_reporting</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">onBehalfOfContentOwner</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">content_owner</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">job_id</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">get_job_id_from_user</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-c1"># If the user has not specified a report URL, retrieve a list of reports</span> <span class="devsite-syntax-c1"># available for the specified job and prompt the user to select one.</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">job_id</span> <span class="devsite-syntax-ow">and</span> <span class="devsite-syntax-ow">not</span> <span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">report_url</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">retrieve_reports</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">youtube_reporting</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">jobId</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">job_id</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">onBehalfOfContentOwner</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">content_owner</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">report_url</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">get_report_url_from_user</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-c1"># Download the selected report.</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">report_url</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">download_report</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">youtube_reporting</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">report_url</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">local_file</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">except</span> <span class="devsite-syntax-n">HttpError</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">e</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-nb">print</span> <span class="devsite-syntax-s1">'An HTTP error </span><span class="devsite-syntax-si">%d</span><span class="devsite-syntax-s1"> occurred:</span><span class="devsite-syntax-se">\n</span><span class="devsite-syntax-si">%s</span><span class="devsite-syntax-s1">'</span> <span class="devsite-syntax-o">%</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">e</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">resp</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">status</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">e</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">content</span><span class="devsite-syntax-p">)</span> <div class="devsite-github-link nocode no-select"> <a target="_top" href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://github.com/youtube/api-samples/blob/07263305b59a7c3275bc7e925f9ce6cabf774022/python/retrieve_reports.py" class="gc-analytics-event" data-category="github_link" data-label="youtube/api-samples/python/retrieve_reports.py" data-code-snippet="true" data-github-path="youtube/api-samples/python/retrieve_reports.py"><span class="devsite-syntax-n">retrieve_reports</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></a> </div></pre> </devsite-code> <h3 id="create_a_reporting_job" data-text="Create a reporting job" tabindex="-1">Create a reporting job</h3> <p>This code sample demonstrates how to create a reporting job. It calls the <code translate="no" dir="ltr">reportTypes.list</code> method to retrieve a list of available report types. It then calls the <code translate="no" dir="ltr">jobs.create</code> method to create a new reporting job.</p> <div></div><devsite-code> <pre class="devsite-click-to-copy notranslate" dir="ltr" is-upgraded syntax="Python"><span class="devsite-syntax-ch">#!/usr/bin/python</span> <span class="devsite-syntax-c1"># Create a reporting job for the authenticated user's channel or</span> <span class="devsite-syntax-c1"># for a content owner that the user's account is linked to.</span> <span class="devsite-syntax-c1"># Usage example:</span> <span class="devsite-syntax-c1"># python create_reporting_job.py --name='&lt;name&gt;'</span> <span class="devsite-syntax-c1"># python create_reporting_job.py --content-owner='&lt;CONTENT OWNER ID&gt;'</span> <span class="devsite-syntax-c1"># python create_reporting_job.py --content-owner='&lt;CONTENT_OWNER_ID&gt;' --report-type='&lt;REPORT_TYPE_ID&gt;' --name='&lt;REPORT_NAME&gt;'</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-nn">argparse</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-nn">os</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-nn">google.oauth2.credentials</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-nn">google_auth_oauthlib.flow</span> <span class="devsite-syntax-kn">from</span> <span class="devsite-syntax-nn">googleapiclient.discovery</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">build</span> <span class="devsite-syntax-kn">from</span> <span class="devsite-syntax-nn">googleapiclient.errors</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">HttpError</span> <span class="devsite-syntax-kn">from</span> <span class="devsite-syntax-nn">google_auth_oauthlib.flow</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">InstalledAppFlow</span> <span class="devsite-syntax-c1"># The CLIENT_SECRETS_FILE variable specifies the name of a file that contains</span> <span class="devsite-syntax-c1"># the OAuth 2.0 information for this application, including its client_id and</span> <span class="devsite-syntax-c1"># client_secret. You can acquire an OAuth 2.0 client ID and client secret from</span> <span class="devsite-syntax-c1"># the {{ Google Cloud Console }} at</span> <span class="devsite-syntax-c1"># {{ https://cloud.google.com/console }}.</span> <span class="devsite-syntax-c1"># Please ensure that you have enabled the YouTube Data API for your project.</span> <span class="devsite-syntax-c1"># For more information about using OAuth2 to access the YouTube Data API, see:</span> <span class="devsite-syntax-c1"># https://developers.google.com/youtube/v3/guides/authentication</span> <span class="devsite-syntax-c1"># For more information about the client_secrets.json file format, see:</span> <span class="devsite-syntax-c1"># https://developers.google.com/api-client-library/python/guide/aaa_client_secrets</span> <span class="devsite-syntax-n">CLIENT_SECRETS_FILE</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-s1">'client_secret.json'</span> <span class="devsite-syntax-c1"># This OAuth 2.0 access scope allows for read access to the YouTube Analytics monetary reports for</span> <span class="devsite-syntax-c1"># authenticated user's account. Any request that retrieves earnings or ad performance metrics must</span> <span class="devsite-syntax-c1"># use this scope.</span> <span class="devsite-syntax-n">SCOPES</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'https://www.googleapis.com/auth/yt-analytics-monetary.readonly'</span><span class="devsite-syntax-p">]</span> <span class="devsite-syntax-n">API_SERVICE_NAME</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-s1">'youtubereporting'</span> <span class="devsite-syntax-n">API_VERSION</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-s1">'v1'</span> <span class="devsite-syntax-c1"># Authorize the request and store authorization credentials.</span> <span class="devsite-syntax-k">def</span> <span class="devsite-syntax-nf">get_authenticated_service</span><span class="devsite-syntax-p">():</span> <span class="devsite-syntax-n">flow</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">InstalledAppFlow</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">from_client_secrets_file</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">CLIENT_SECRETS_FILE</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">SCOPES</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">credentials</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">flow</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">run_console</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-n">build</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">API_SERVICE_NAME</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">API_VERSION</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">credentials</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">credentials</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-c1"># Remove keyword arguments that are not set.</span> <span class="devsite-syntax-k">def</span> <span class="devsite-syntax-nf">remove_empty_kwargs</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">**</span><span class="devsite-syntax-n">kwargs</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-n">good_kwargs</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">{}</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-n">kwargs</span> <span class="devsite-syntax-ow">is</span> <span class="devsite-syntax-ow">not</span> <span class="devsite-syntax-kc">None</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-k">for</span> <span class="devsite-syntax-n">key</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">value</span> <span class="devsite-syntax-ow">in</span> <span class="devsite-syntax-n">kwargs</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">iteritems</span><span class="devsite-syntax-p">():</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-n">value</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">good_kwargs</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-n">key</span><span class="devsite-syntax-p">]</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">value</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-n">good_kwargs</span> <span class="devsite-syntax-c1"># Call the YouTube Reporting API's reportTypes.list method to retrieve report types.</span> <span class="devsite-syntax-k">def</span> <span class="devsite-syntax-nf">list_report_types</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">youtube_reporting</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-o">**</span><span class="devsite-syntax-n">kwargs</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-c1"># Provide keyword arguments that have values as request parameters.</span> <span class="devsite-syntax-n">kwargs</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">remove_empty_kwargs</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">**</span><span class="devsite-syntax-n">kwargs</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">results</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">youtube_reporting</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">reportTypes</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">list</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">**</span><span class="devsite-syntax-n">kwargs</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">execute</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-n">reportTypes</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">results</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'reportTypes'</span><span class="devsite-syntax-p">]</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-s1">'reportTypes'</span> <span class="devsite-syntax-ow">in</span> <span class="devsite-syntax-n">results</span> <span class="devsite-syntax-ow">and</span> <span class="devsite-syntax-n">results</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'reportTypes'</span><span class="devsite-syntax-p">]:</span> <span class="devsite-syntax-n">reportTypes</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">results</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'reportTypes'</span><span class="devsite-syntax-p">]</span> <span class="devsite-syntax-k">for</span> <span class="devsite-syntax-n">reportType</span> <span class="devsite-syntax-ow">in</span> <span class="devsite-syntax-n">reportTypes</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-nb">print</span> <span class="devsite-syntax-s1">'Report type id: </span><span class="devsite-syntax-si">%s</span><span class="devsite-syntax-se">\n</span><span class="devsite-syntax-s1"> name: </span><span class="devsite-syntax-si">%s</span><span class="devsite-syntax-se">\n</span><span class="devsite-syntax-s1">'</span> <span class="devsite-syntax-o">%</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">reportType</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'id'</span><span class="devsite-syntax-p">],</span> <span class="devsite-syntax-n">reportType</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'name'</span><span class="devsite-syntax-p">])</span> <span class="devsite-syntax-k">else</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-nb">print</span> <span class="devsite-syntax-s1">'No report types found'</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-kc">False</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-kc">True</span> <span class="devsite-syntax-c1"># Call the YouTube Reporting API's jobs.create method to create a job.</span> <span class="devsite-syntax-k">def</span> <span class="devsite-syntax-nf">create_reporting_job</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">youtube_reporting</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">report_type_id</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-o">**</span><span class="devsite-syntax-n">kwargs</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-c1"># Provide keyword arguments that have values as request parameters.</span> <span class="devsite-syntax-n">kwargs</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">remove_empty_kwargs</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">**</span><span class="devsite-syntax-n">kwargs</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">reporting_job</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">youtube_reporting</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">jobs</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">create</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-n">body</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-nb">dict</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-n">reportTypeId</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">report_type</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">name</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">name</span> <span class="devsite-syntax-p">),</span> <span class="devsite-syntax-o">**</span><span class="devsite-syntax-n">kwargs</span> <span class="devsite-syntax-p">)</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">execute</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-nb">print</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Reporting job "</span><span class="devsite-syntax-si">%s</span><span class="devsite-syntax-s1">" created for reporting type "</span><span class="devsite-syntax-si">%s</span><span class="devsite-syntax-s1">" at "</span><span class="devsite-syntax-si">%s</span><span class="devsite-syntax-s1">"'</span> <span class="devsite-syntax-o">%</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">reporting_job</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'name'</span><span class="devsite-syntax-p">],</span> <span class="devsite-syntax-n">reporting_job</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'reportTypeId'</span><span class="devsite-syntax-p">],</span> <span class="devsite-syntax-n">reporting_job</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'createTime'</span><span class="devsite-syntax-p">]))</span> <span class="devsite-syntax-c1"># Prompt the user to enter a report type id for the job. Then return the id.</span> <span class="devsite-syntax-k">def</span> <span class="devsite-syntax-nf">get_report_type_id_from_user</span><span class="devsite-syntax-p">():</span> <span class="devsite-syntax-n">report_type_id</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">raw_input</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Please enter the reportTypeId for the job: '</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-nb">print</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'You chose "</span><span class="devsite-syntax-si">%s</span><span class="devsite-syntax-s1">" as the report type Id for the job.'</span> <span class="devsite-syntax-o">%</span> <span class="devsite-syntax-n">report_type_id</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-n">report_type_id</span> <span class="devsite-syntax-c1"># Prompt the user to set a job name</span> <span class="devsite-syntax-k">def</span> <span class="devsite-syntax-nf">prompt_user_to_set_job_name</span><span class="devsite-syntax-p">():</span> <span class="devsite-syntax-n">job_name</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">raw_input</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Please set a name for the job: '</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-nb">print</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Great! "</span><span class="devsite-syntax-si">%s</span><span class="devsite-syntax-s1">" is a memorable name for this job.'</span> <span class="devsite-syntax-o">%</span> <span class="devsite-syntax-n">job_name</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-n">job_name</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-vm">__name__</span> <span class="devsite-syntax-o">==</span> <span class="devsite-syntax-s1">'__main__'</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">parser</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">argparse</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">ArgumentParser</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-c1"># The 'name' option specifies the name that will be used for the reporting job.</span> <span class="devsite-syntax-n">parser</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">add_argument</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'--content-owner'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">default</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">''</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">help</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'ID of content owner for which you are retrieving jobs and reports.'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">parser</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">add_argument</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'--include-system-managed'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">default</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-kc">False</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">help</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'Whether the API response should include system-managed reports'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">parser</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">add_argument</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'--name'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">default</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">''</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">help</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'Name for the reporting job. The script prompts you to set a name '</span> <span class="devsite-syntax-o">+</span> <span class="devsite-syntax-s1">'for the job if you do not provide one using this argument.'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">parser</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">add_argument</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'--report-type'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">default</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-kc">None</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">help</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'The type of report for which you are creating a job.'</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">args</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">parser</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">parse_args</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-n">youtube_reporting</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">get_authenticated_service</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-k">try</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-c1"># Prompt user to select report type if they didn't set one on command line.</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-ow">not</span> <span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">report_type</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-n">list_report_types</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">youtube_reporting</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">onBehalfOfContentOwner</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">content_owner</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">includeSystemManaged</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">include_system_managed</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">report_type</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">get_report_type_id_from_user</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-c1"># Prompt user to set job name if not set on command line.</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-ow">not</span> <span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">name</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">name</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">prompt_user_to_set_job_name</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-c1"># Create the job.</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">report_type</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">create_reporting_job</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">youtube_reporting</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">args</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">onBehalfOfContentOwner</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">args</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">content_owner</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">except</span> <span class="devsite-syntax-n">HttpError</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">e</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-nb">print</span> <span class="devsite-syntax-s1">'An HTTP error </span><span class="devsite-syntax-si">%d</span><span class="devsite-syntax-s1"> occurred:</span><span class="devsite-syntax-se">\n</span><span class="devsite-syntax-si">%s</span><span class="devsite-syntax-s1">'</span> <span class="devsite-syntax-o">%</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">e</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">resp</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">status</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">e</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">content</span><span class="devsite-syntax-p">)</span> <div class="devsite-github-link nocode no-select"> <a target="_top" href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://github.com/youtube/api-samples/blob/07263305b59a7c3275bc7e925f9ce6cabf774022/python/create_reporting_job.py" class="gc-analytics-event" data-category="github_link" data-label="youtube/api-samples/python/create_reporting_job.py" data-code-snippet="true" data-github-path="youtube/api-samples/python/create_reporting_job.py"><span class="devsite-syntax-n">create_reporting_job</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></a> </div></pre> </devsite-code> <h2 id="targeted-query-reports" data-text="Targeted query reports" tabindex="-1">Targeted query reports</h2> <h3 id="retrieve_daily_channel_statistics" data-text="Retrieve daily channel statistics" tabindex="-1">Retrieve daily channel statistics</h3> <p>This example calls the YouTube Analytics API to retrieve daily views and other metrics for the authorizing user's channel for the 2017 calendar year. The sample uses the <a href="https://developers-google-com.translate.goog/api-client-library/python?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB">Google APIs Python client library</a>.</p> <p>The code requests the user's permission to access the <code translate="no" dir="ltr">https://www.googleapis.com/auth/yt-analytics.readonly</code> scope.</p> <div></div><devsite-code> <pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-n">SCOPES</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'https://www.googleapis.com/auth/yt-analytics.readonly'</span><span class="devsite-syntax-p">]</span></code></pre> </devsite-code> <p>Your application might also need to request access to other scopes. For example, an application that calls the YouTube Analytics API and the YouTube Data API might need users to also grant access to their YouTube accounts. The <a href="https://developers-google-com.translate.goog/youtube/reporting/guides/authorization?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB#identify-access-scopes">authorization overview</a> identifies scopes typically used in applications that call the YouTube Analytics API.</p> <h4 id="set-up-authorization-credentials" data-text="Set up authorization credentials" tabindex="-1">Set up authorization credentials</h4> <p>Before running this sample locally for the first time, you need to set up authorization credentials for your project:</p> <p></p> <ol> <li>Create or select a project in the <a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://console.cloud.google.com/">Google API Console</a>.</li> <li>Enable the <a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://console.developers.google.com/apis/library/youtubeanalytics.googleapis.com">YouTube Analytics API</a> for your project.</li> <li>At the top of the <a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://console.developers.google.com/apis/credentials">Credentials</a> page, select the <b>OAuth consent screen</b> tab. Select an Email address, enter a Product name if not already set, and click the Save button.</li> <li>On the <a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://console.developers.google.com/apis/credentials">Credentials</a> page, click the <b>Create credentials</b> button and select <b>Oauth client ID</b>.</li> <li>Select the application type <b>Other</b>, enter the name "YouTube Analytics API Quickstart", and click the Create button.</li> <li>Click <b>OK</b> to dismiss the resulting dialog.</li> <li>Click the <span class="material-icons" aria-hidden="true" translate="no">file_download</span> (Download JSON) button to the right of the client ID.</li> <li>Move the downloaded file to your working directory.</li> </ol> <p></p> <h4 id="install-required-libraries" data-text="Install required libraries" tabindex="-1">Install required libraries</h4> <p>You also need to install the Google APIs Client Library for Python and some additional libraries:</p> <div></div><devsite-code> <pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"> <span class="devsite-syntax-n">pip</span> <span class="devsite-syntax-n">install</span> <span class="devsite-syntax-o">--</span><span class="devsite-syntax-n">upgrade</span> <span class="devsite-syntax-n">google</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">api</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">python</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">client</span> <span class="devsite-syntax-n">pip</span> <span class="devsite-syntax-n">install</span> <span class="devsite-syntax-o">--</span><span class="devsite-syntax-n">upgrade</span> <span class="devsite-syntax-n">google</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">auth</span> <span class="devsite-syntax-n">google</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">auth</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">oauthlib</span> <span class="devsite-syntax-n">google</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">auth</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">httplib2</span> </code></pre> </devsite-code> <h4 id="run-the-code" data-text="Run the code" tabindex="-1">Run the code</h4> <p>Now, you are ready to actually test the sample:</p> <p></p> <ol> <li>Copy the code sample below to your working directory.</li> <li>In the sample, update the value of the <code translate="no" dir="ltr">CLIENT_SECRETS_FILE</code> variable to match the location of the file that you downloaded after setting up your authorization credentials.</li> <li>Run the sample code in a terminal window: <div></div><devsite-code> <pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-n">python</span> <span class="devsite-syntax-n">yt_analytics_v2</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></code></pre> </devsite-code></li> <li>Go through the authorization flow. The auth flow might automatically load in your browser, or you might need to copy the auth URL into a browser window. At the end of the authorization flow, if necessary, paste the authorization code displayed in the browser into your terminal window and click [return].</li> <li>The API query executes and the JSON response is output to the terminal window.</li> </ol> <p></p> <h4 id="sample-code" data-text="Sample code" tabindex="-1">Sample code</h4> <div></div><devsite-code> <pre class="devsite-click-to-copy notranslate" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-c1"># -*- coding: utf-8 -*-</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-nn">os</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-nn">google.oauth2.credentials</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-nn">google_auth_oauthlib.flow</span> <span class="devsite-syntax-kn">from</span> <span class="devsite-syntax-nn">googleapiclient.discovery</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">build</span> <span class="devsite-syntax-kn">from</span> <span class="devsite-syntax-nn">googleapiclient.errors</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">HttpError</span> <span class="devsite-syntax-kn">from</span> <span class="devsite-syntax-nn">google_auth_oauthlib.flow</span> <span class="devsite-syntax-kn">import</span> <span class="devsite-syntax-n">InstalledAppFlow</span> <span class="devsite-syntax-n">SCOPES</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'https://www.googleapis.com/auth/yt-analytics.readonly'</span><span class="devsite-syntax-p">]</span> <span class="devsite-syntax-n">API_SERVICE_NAME</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-s1">'youtubeAnalytics'</span> <span class="devsite-syntax-n">API_VERSION</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-s1">'v2'</span> <span class="devsite-syntax-n">CLIENT_SECRETS_FILE</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-s1">'YOUR_CLIENT_SECRET_FILE.json'</span> <span class="devsite-syntax-k">def</span> <span class="devsite-syntax-nf">get_service</span><span class="devsite-syntax-p">():</span> <span class="devsite-syntax-n">flow</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">InstalledAppFlow</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">from_client_secrets_file</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">CLIENT_SECRETS_FILE</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">SCOPES</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">credentials</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">flow</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">run_console</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-n">build</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">API_SERVICE_NAME</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">API_VERSION</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">credentials</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">credentials</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">def</span> <span class="devsite-syntax-nf">execute_api_request</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">client_library_function</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-o">**</span><span class="devsite-syntax-n">kwargs</span><span class="devsite-syntax-p">):</span> <span class="devsite-syntax-n">response</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">client_library_function</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-o">**</span><span class="devsite-syntax-n">kwargs</span> <span class="devsite-syntax-p">)</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">execute</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-nb">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">response</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-vm">__name__</span> <span class="devsite-syntax-o">==</span> <span class="devsite-syntax-s1">'__main__'</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-c1"># Disable OAuthlib's HTTPs verification when running locally.</span> <span class="devsite-syntax-c1"># *DO NOT* leave this option enabled when running in production.</span> <span class="devsite-syntax-n">os</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">environ</span><span class="devsite-syntax-p">[</span><span class="devsite-syntax-s1">'OAUTHLIB_INSECURE_TRANSPORT'</span><span class="devsite-syntax-p">]</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-s1">'1'</span> <span class="devsite-syntax-n">youtubeAnalytics</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">get_service</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-n">execute_api_request</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-n">youtubeAnalytics</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">reports</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">query</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">ids</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'channel==MINE'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">startDate</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'2017-01-01'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">endDate</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'2017-12-31'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">metrics</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'estimatedMinutesWatched,views,likes,subscribersGained'</span> <span class="devsite-syntax-n">dimensions</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'day'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">sort</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s1">'day'</span> <span class="devsite-syntax-p">)</span> <div class="devsite-github-link nocode no-select"> <a target="_top" href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://github.com/youtube/api-samples/blob/07263305b59a7c3275bc7e925f9ce6cabf774022/python/yt_analytics_v2.py" class="gc-analytics-event" data-category="github_link" data-label="youtube/api-samples/python/yt_analytics_v2.py" data-code-snippet="true" data-github-path="youtube/api-samples/python/yt_analytics_v2.py"><span class="devsite-syntax-n">yt_analytics_v2</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></a> </div></code></pre> </devsite-code> </div><devsite-recommendations display="in-page" hidden yield> </devsite-recommendations> <devsite-thumb-rating position="footer"> </devsite-thumb-rating> <devsite-recommendations id="recommendations-link" yield></devsite-recommendations> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://developers-google-com.translate.goog/site-policies?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p> <p>Last updated 2024-10-16 UTC.</p> </devsite-content-footer> <devsite-notification> </devsite-notification> <div class="devsite-content-data"> <template class="devsite-content-data-template"> [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-10-16 UTC."],[],[]] </template> </div> </devsite-content> </main><devsite-footer-promos class="devsite-footer"> <nav class="devsite-footer-promos nocontent" aria-label="Promotions"> <ul class="devsite-footer-promos-list"> <li class="devsite-footer-promo"><a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://blog.youtube" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Promo Link (index 1)"> <picture> <img class="devsite-footer-promo-icon" src="/static/site-assets/logo-youtube.svg" loading="lazy" alt="Blog"> </picture> <span class="devsite-footer-promo-label"> Blog </span> </a> <div class="devsite-footer-promo-description"> The latest news on the YouTube blog </div></li> <li class="devsite-footer-promo"><a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://github.com/youtube/api-samples" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Promo Link (index 2)"> <picture> <img class="devsite-footer-promo-icon" src="/static/site-assets/logo-github.svg" loading="lazy" alt="GitHub"> </picture> <span class="devsite-footer-promo-label"> GitHub </span> </a> <div class="devsite-footer-promo-description"> Find API code samples and other YouTube open-source projects. </div></li> <li class="devsite-footer-promo"><a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://issuetracker.google.com/issues/new?component%3D186600%26template%3D874803" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Promo Link (index 3)"> <picture> <img class="devsite-footer-promo-icon" src="/static/site-assets/developers_64dp.png" loading="lazy" alt="Issue Tracker"> </picture> <span class="devsite-footer-promo-label"> Issue Tracker </span> </a> <div class="devsite-footer-promo-description"> Something wrong? Send us a bug report! </div></li> <li class="devsite-footer-promo"><a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=http://stackoverflow.com/questions/ask?tags%3Dyoutube-api" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Promo Link (index 4)"> <picture> <img class="devsite-footer-promo-icon" src="/static/site-assets/logo-stack-overflow.svg" loading="lazy" alt="Stack Overflow"> </picture> <span class="devsite-footer-promo-label"> Stack Overflow </span> </a> <div class="devsite-footer-promo-description"> Ask a question under the youtube-api tag </div></li> <li class="devsite-footer-promo"><a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://research.youtube/" class="devsite-footer-promo-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Promo Link (index 5)"> <picture> <img class="devsite-footer-promo-icon" src="/static/site-assets/logo-youtube.svg" loading="lazy" alt="YouTube Researcher Program"> </picture> <span class="devsite-footer-promo-label"> YouTube Researcher Program </span> </a> <div class="devsite-footer-promo-description"> For researchers interested in using data from YouTube’s global API </div></li> </ul> </nav> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox "><h3 class="devsite-footer-linkbox-heading no-link">Tools</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"><a href="https://developers-google-com.translate.goog/apis-explorer/?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB#p/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> Google APIs Explorer </a></li> <li class="devsite-footer-linkbox-item"><a href="https://developers-google-com.translate.goog/youtube/youtube_player_demo?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)"> YouTube Player Demo </a></li> <li class="devsite-footer-linkbox-item"><a href="https://developers-google-com.translate.goog/youtube/youtube_subscribe_button?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)"> Configure a Subscribe Button </a></li> </ul></li> <li class="devsite-footer-linkbox "><h3 class="devsite-footer-linkbox-heading no-link">Issue Tracker</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"><a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://issuetracker.google.com/issues/new?component%3D186600%26template%3D874803" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> File a bug </a></li> <li class="devsite-footer-linkbox-item"><a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://issuetracker.google.com/issues/new?component%3D186600%26template%3D874803" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)"> Request a feature </a></li> <li class="devsite-footer-linkbox-item"><a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://issuetracker.google.com/issues?q%3Dcomponentid:186600" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)"> See open issues </a></li> </ul></li> <li class="devsite-footer-linkbox "><h3 class="devsite-footer-linkbox-heading no-link">Product Info</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"><a href="https://developers-google-com.translate.goog/youtube/terms/api-services-terms-of-service?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> Terms of Service </a></li> <li class="devsite-footer-linkbox-item"><a href="https://developers-google-com.translate.goog/youtube/terms/developer-policies?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)"> Developer Policies </a></li> <li class="devsite-footer-linkbox-item"><a href="https://developers-google-com.translate.goog/youtube/terms/required-minimum-functionality?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)"> Required Minimum Functionality </a></li> <li class="devsite-footer-linkbox-item"><a href="https://developers-google-com.translate.goog/youtube/terms/branding-guidelines?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)"> Branding Guidelines </a></li> </ul></li> </ul> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-sites" aria-label="Other Google Developers websites"><a href="https://developers-google-com.translate.goog/?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-footer-sites-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Developers Link"> <picture> <img class="devsite-footer-sites-logo" src="https://www.gstatic.com/devrel-devsite/prod/v3239347c48d1e3c46204782fd038ba187a6753dfa7d7a0d08a574587ae2085f5/developers/images/lockup-google-for-developers.svg" loading="lazy" alt="Google Developers"> </picture> </a> <ul class="devsite-footer-sites-list"> <li class="devsite-footer-sites-item"><a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://developer.android.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Android Link"> Android </a></li> <li class="devsite-footer-sites-item"><a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://developer.chrome.com/home" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Chrome Link"> Chrome </a></li> <li class="devsite-footer-sites-item"><a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://firebase.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Firebase Link"> Firebase </a></li> <li class="devsite-footer-sites-item"><a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://cloud.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Cloud Platform Link"> Google Cloud Platform </a></li> <li class="devsite-footer-sites-item"><a href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://ai.google.dev/" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google AI Link"> Google AI </a></li> <li class="devsite-footer-sites-item"><a href="https://developers-google-com.translate.goog/products?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer All products Link"> All products </a></li> </ul> </nav> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "><a class="devsite-footer-utility-link gc-analytics-event" href="https://developers-google-com.translate.goog/terms/site-terms?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" data-category="Site-Wide Custom Events" data-label="Footer Terms link"> Terms </a></li> <li class="devsite-footer-utility-item "><a class="devsite-footer-utility-link gc-analytics-event" href="https://translate.google.com/website?sl=en&amp;tl=ru&amp;hl=en-GB&amp;u=https://policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link"> Privacy </a></li> <li class="devsite-footer-utility-item glue-cookie-notification-bar-control"><a class="devsite-footer-utility-link gc-analytics-event" href="https://developers-google-com.translate.goog/youtube/reporting/v1/code_samples/python?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB#" data-category="Site-Wide Custom Events" data-label="Footer Manage cookies link" aria-hidden="true"> Manage cookies </a></li> <li class="devsite-footer-utility-item devsite-footer-utility-button"><span class="devsite-footer-utility-description">Sign up for the Google for Developers newsletter</span> <a class="devsite-footer-utility-link gc-analytics-event" href="https://developers-google-com.translate.goog/newsletter/subscribe?_x_tr_sl=en&amp;_x_tr_tl=ru&amp;_x_tr_hl=en-GB" data-category="Site-Wide Custom Events" data-label="Footer Subscribe link"> Subscribe </a></li> </ul><devsite-language-selector> <ul role="presentation"> <li role="presentation"><a role="menuitem" lang="en">English</a></li> <li role="presentation"><a role="menuitem" lang="de">Deutsch</a></li> <li role="presentation"><a role="menuitem" lang="es">Español</a></li> <li role="presentation"><a role="menuitem" lang="es_419">Español – América Latina</a></li> <li role="presentation"><a role="menuitem" lang="fr">Français</a></li> <li role="presentation"><a role="menuitem" lang="id">Indonesia</a></li> <li role="presentation"><a role="menuitem" lang="it">Italiano</a></li> <li role="presentation"><a role="menuitem" lang="pl">Polski</a></li> <li role="presentation"><a role="menuitem" lang="pt_br">Português – Brasil</a></li> <li role="presentation"><a role="menuitem" lang="vi">Tiếng Việt</a></li> <li role="presentation"><a role="menuitem" lang="tr">Türkçe</a></li> <li role="presentation"><a role="menuitem" lang="ru">Русский</a></li> <li role="presentation"><a role="menuitem" lang="he">עברית</a></li> <li role="presentation"><a role="menuitem" lang="ar">العربيّة</a></li> <li role="presentation"><a role="menuitem" lang="fa">فارسی</a></li> <li role="presentation"><a role="menuitem" lang="hi">हिंदी</a></li> <li role="presentation"><a role="menuitem" lang="bn">বাংলা</a></li> <li role="presentation"><a role="menuitem" lang="th">ภาษาไทย</a></li> <li role="presentation"><a role="menuitem" lang="zh_cn">中文 – 简体</a></li> <li role="presentation"><a role="menuitem" lang="zh_tw">中文 – 繁體</a></li> <li role="presentation"><a role="menuitem" lang="ja">日本語</a></li> <li role="presentation"><a role="menuitem" lang="ko">한국어</a></li> </ul> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> </section> </section><devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics> <script type="application/json" analytics>[{&#34;dimensions&#34;: {&#34;dimension6&#34;: &#34;en&#34;, &#34;dimension3&#34;: false, &#34;dimension4&#34;: &#34;YouTube Analytics and Reporting APIs&#34;, &#34;dimension5&#34;: &#34;en&#34;, &#34;dimension11&#34;: false, &#34;dimension1&#34;: &#34;Signed out&#34;}, &#34;gaid&#34;: &#34;UA-24532603-1&#34;, &#34;metrics&#34;: {&#34;ratings_value&#34;: &#34;metric1&#34;, &#34;ratings_count&#34;: &#34;metric2&#34;}, &#34;purpose&#34;: 1}]</script> <script type="application/json" tag-management>{&#34;at&#34;: &#34;True&#34;, &#34;ga4&#34;: [{&#34;id&#34;: &#34;G-272J68FCRF&#34;, &#34;purpose&#34;: 1}], &#34;ga4p&#34;: [{&#34;id&#34;: &#34;G-272J68FCRF&#34;, &#34;purpose&#34;: 1}], &#34;gtm&#34;: [], &#34;parameters&#34;: {&#34;internalUser&#34;: &#34;False&#34;, &#34;language&#34;: {&#34;machineTranslated&#34;: &#34;False&#34;, &#34;requested&#34;: &#34;en&#34;, &#34;served&#34;: &#34;en&#34;}, &#34;pageType&#34;: &#34;article&#34;, &#34;projectName&#34;: &#34;YouTube Analytics and Reporting APIs&#34;, &#34;signedIn&#34;: &#34;False&#34;, &#34;tenant&#34;: &#34;developers&#34;, &#34;recommendations&#34;: {&#34;sourcePage&#34;: &#34;&#34;, &#34;sourceType&#34;: 0, &#34;sourceRank&#34;: 0, &#34;sourceIdenticalDescriptions&#34;: 0, &#34;sourceTitleWords&#34;: 0, &#34;sourceDescriptionWords&#34;: 0, &#34;experiment&#34;: &#34;&#34;}, &#34;experiment&#34;: {&#34;ids&#34;: &#34;&#34;}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <script nonce="VDK8hd6iER/mo5fJgaRgxrMwtoEA+N"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/v3239347c48d1e3c46204782fd038ba187a6753dfa7d7a0d08a574587ae2085f5/developers/js/app_loader.js', '[1,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/v3239347c48d1e3c46204782fd038ba187a6753dfa7d7a0d08a574587ae2085f5","https://www.gstatic.com/devrel-devsite/prod/v3239347c48d1e3c46204782fd038ba187a6753dfa7d7a0d08a574587ae2085f5/developers","https://developers-dot-devsite-v2-prod.appspot.com",null,null,["/_pwa/developers/manifest.json","https://www.gstatic.com/devrel-devsite/prod/v3239347c48d1e3c46204782fd038ba187a6753dfa7d7a0d08a574587ae2085f5/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/v3239347c48d1e3c46204782fd038ba187a6753dfa7d7a0d08a574587ae2085f5/developers/images/favicon-new.png","https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyAP-jjEJBzmIyKR4F-3XITp8yM9T1gEEI8","AIzaSyB6xiKGDR5O3Ak2okS4rLkauxGUG7XP0hg","developers.google.com","AIzaSyAQk0fBONSGUqCNznf6Krs82Ap1-NV6J4o","AIzaSyCCxcqdrZ_7QMeLCRY20bh_SXdAYqy70KY",null,null,null,["MiscFeatureFlags__enable_firebase_utm","MiscFeatureFlags__enable_view_transitions","Profiles__enable_dashboard_curated_recommendations","Cloud__enable_cloud_dlp_service","Cloud__enable_cloudx_ping","Profiles__enable_developer_profiles_callout","MiscFeatureFlags__developers_footer_dark_image","DevPro__enable_cloud_innovators_plus","Cloud__enable_cloud_shell_fte_user_flow","Profiles__enable_profile_collections","Profiles__enable_public_developer_profiles","Search__enable_ai_eligibility_checks","TpcFeatures__enable_mirror_tenant_redirects","Search__enable_dynamic_content_confidential_banner","BookNav__enable_tenant_cache_key","Profiles__enable_page_saving","MiscFeatureFlags__developers_footer_image","Cloud__enable_cloudx_experiment_ids","Search__enable_suggestions_from_borg","Profiles__enable_recognition_badges","Profiles__enable_release_notes_notifications","CloudShell__cloud_code_overflow_menu","Cloud__enable_cloud_facet_chat","MiscFeatureFlags__enable_variable_operator","Significatio__enable_by_tenant","Profiles__enable_complete_playlist_endpoint","DevPro__enable_developer_subscriptions","CloudShell__cloud_shell_button","Profiles__require_profile_eligibility_for_signin","Analytics__enable_clearcut_logging","Search__enable_page_map","Cloud__enable_free_trial_server_call","Profiles__enable_completecodelab_endpoint","Experiments__reqs_query_experiments","Profiles__enable_awarding_url","Cloud__enable_legacy_calculator_redirect","EngEduTelemetry__enable_engedu_telemetry","Concierge__enable_pushui","MiscFeatureFlags__enable_project_variables","MiscFeatureFlags__emergency_css","Cloud__enable_llm_concierge_chat","Cloud__enable_cloud_shell"],null,null,"AIzaSyBLEMok-5suZ67qRPzx0qUtbnLmyT_kCVE","https://developerscontentserving-pa.clients6.google.com","AIzaSyCM4QpTRSqP5qI4Dvjt4OAScIN8sOUlO-k","https://developerscontentsearch-pa.clients6.google.com",1,4,null,"https://developerprofiles-pa.clients6.google.com",[1,"developers","Google for Developers","developers.google.com",null,"developers-dot-devsite-v2-prod.appspot.com",null,null,[1,1,[1],null,null,null,null,null,null,null,null,[1],null,null,null,null,null,null,[1],[1,null,null,[1,20],"/recommendations/information"],null,null,null,[1,1,1],[1,1,null,1,1]],null,[null,null,null,null,null,null,"/images/lockup-new.svg","/images/touchicon-180-new.png",null,null,null,null,1,null,null,null,null,null,null,null,null,1,null,null,null,"/images/lockup-dark-theme-new.svg",[]],[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[6,1,14,15,20,22,23,29,32,36],null,[[null,null,null,[3,7,10,2,39,17,4,32,24,11,12,13,34,15,25],null,null,[1,[["docType","Choose a content type",[["Tutorial",null,null,null,null,null,null,null,null,"Tutorial"],["Guide",null,null,null,null,null,null,null,null,"Guide"],["Sample",null,null,null,null,null,null,null,null,"Sample"]]],["product","Choose a product",[["Android",null,null,null,null,null,null,null,null,"Android"],["ARCore",null,null,null,null,null,null,null,null,"ARCore"],["ChromeOS",null,null,null,null,null,null,null,null,"ChromeOS"],["Firebase",null,null,null,null,null,null,null,null,"Firebase"],["Flutter",null,null,null,null,null,null,null,null,"Flutter"],["Assistant",null,null,null,null,null,null,null,null,"Google Assistant"],["GoogleCloud",null,null,null,null,null,null,null,null,"Google Cloud"],["GoogleMapsPlatform",null,null,null,null,null,null,null,null,"Google Maps Platform"],["GooglePay",null,null,null,null,null,null,null,null,"Google Pay & Google Wallet"],["GooglePlay",null,null,null,null,null,null,null,null,"Google Play"],["Tensorflow",null,null,null,null,null,null,null,null,"TensorFlow"]]],["category","Choose a topic",[["AiAndMachineLearning",null,null,null,null,null,null,null,null,"AI and Machine Learning"],["Data",null,null,null,null,null,null,null,null,"Data"],["Enterprise",null,null,null,null,null,null,null,null,"Enterprise"],["Gaming",null,null,null,null,null,null,null,null,"Gaming"],["Mobile",null,null,null,null,null,null,null,null,"Mobile"],["Web",null,null,null,null,null,null,null,null,"Web"]]]]]],[1,1],null,1],[[["UA-24532603-1"],["UA-22084204-5"],null,null,["UA-24532603-5"],null,null,[["G-272J68FCRF"],null,null,[["G-272J68FCRF",2]]],[["UA-24532603-1",2]],null,[["UA-24532603-5",2]],null,1],[[11,8],[5,4],[3,2],[15,12],[14,11],[1,1],[4,3],[16,13],[13,10],[6,5],[12,9]],[[1,1],[2,2]]],null,4,null,null,null,null,null,null,null,null,null,null,null,null,null,"developers.devsite.google"],1,"pk_live_5170syrHvgGVmSx9sBrnWtA5luvk9BwnVcvIi7HizpwauFG96WedXsuXh790rtij9AmGllqPtMLfhe2RSwD6Pn38V00uBCydV4m"]') </script><devsite-a11y-announce></devsite-a11y-announce> <script>function gtElInit() {var lib = new google.translate.TranslateService();lib.translatePage('en', 'ru', function () {});}</script> <script src="https://translate.google.com/translate_a/element.js?cb=gtElInit&amp;hl=en-GB&amp;client=wt" type="text/javascript"></script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10