YouTube Connector
Documentation
Version: 2
Documentation

YouTube Connector - Source Code


<?xml version="1.0" encoding="utf-8"?>
<ApiConfig Name="YouTube"
           Desc="Read / write YouTube data inside your app, perform many Youtube operations without coding using easy to use high performance API Connector for YouTube"
           Slug="youtube-connector"
           Id="d1178847-fe07-4073-a943-46f2293acd5f"
           Logo="data:image/png;base64,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"
           Version="2"
           EngineVersion="5"
           TrustedDomains="youtubeanalytics.googleapis.com,www.googleapis.com"
           >
           
  <VersionHistory>
    <Change Date="2023-05-02" Ver="2" Type="Fix">Increase speed of get_videos (used by MyVideos table). Changed BatchSize to 50 (was 2). Reduced number of API requests drastically.</Change>
    <Change Date="2023-05-02" Ver="2" Type="Fix">TestEndPoint doesn't work due to hard coded channelId parameter</Change>
    <Change Date="2022-08-23">Initial version</Change>
  </VersionHistory>

  <ServiceUrls>
    <ServiceUrl Name="https://youtube.googleapis.com/youtube/v3" Url="https://youtube.googleapis.com/youtube/v3" />
  </ServiceUrls>
  <Auths>
    <Auth Name="API Key" Type="Http" ConnStr=""
          TestEndPoint="get_playlists"  
          >
      <Notes>
        <![CDATA[This walkthrough will help you create an API Key which you will be able to use in all requests and authenticate accordingly.<p />
<ol>
  <li>Go to <a target="_blank" href="https://console.developers.google.com/">Google API Console</a></li>
  <li>From the Project Dropdown (usually found at the top bar) click Select Project</li>
  <li>On Project Popup click <b>CREATE PROJECT</b></li>
  <li>Once project is created you can click Select Project to switch the context (You can click on Notification link or Choose from Top Dropdown)</b></li>
  <li>Click <b>ENABLE APIs AND SERVICES</b></li>
  <li>Now we need to Enable three APIs one by one (YouTube Data API, YouTube Analytics API, YouTube Reporting API).  </li>
  <li>Search <b>YouTube Data API</b>. Select and click <b>ENABLE</b></li>
  <li>Search <b>YouTube Analytics API</b>. Select and click <b>ENABLE</b></li>
  <li>Search <b>YouTube Reporting API</b>. Select and click <b>ENABLE</b></li>
  <li>Go to back to main screen of <a target="_blank" href="https://console.developers.google.com/">Google API Console</a></li>
  <li>Click <b>OAuth Consent Screen</b> Tab. Enter necessary details and Save.</li>
  <li>Click <b>Credentials Tab</b></li>
  <li>Click <b>CREATE CREDENTIALS</b> (some where in topbar) and select <b>API key</b> option.</li>
  <li>In the popup, copy API Key from the field "Your API key", close this window, and use it in the UI configuration, "key" field</li></li>
</ol>
]]>
      </Notes>          
      <Params>
        <Param Name="key" Required="True" Type="Query"></Param>
				<Param Name="RetryMode" Hidden="True" Value="RetryWhenStatusCodeMatch" />
				<Param Name="RetryStatusCodeList" Hidden="True" Value="403|429" />
        <Param Name="RetryCountMax" Value="5" Hidden="True" />
        <Param Name="RetryMultiplyWaitTime" Value="True" Hidden="True" />
      </Params>
    </Auth>
    <Auth Name="OAuth" Label="User Account" HelpLink="https://zappysys.com/links/?id=10002"
          Type="OAuth" ConnStr="Provider=Google;UseCustomApp=True;ScopeSeparator={space};"
          TestEndPoint="get_playlists"  
          > 
      <Notes>
        <![CDATA[To register a custom app, perform the following steps (detailed steps found in the help link at the end)
<ol>
  <li>Go to <a target="_blank" href="https://console.developers.google.com/">Google API Console</a></li>
  <li>From the Project Dropdown (usually found at the top bar) click Select Project</li>
  <li>On Project Popup click <b>CREATE PROJECT</b></li>
  <li>Once project is created you can click Select Project to switch the context (You can click on Notification link or Choose from Top Dropdown)</b></li>
  <li>Click <b>ENABLE APIs AND SERVICES</b></li>
  <li>Now we need to Enable three APIs one by one (YouTube Data API, YouTube Analytics API, YouTube Reporting API).  </li>
  <li>Search <b>YouTube Data API</b>. Select and click <b>ENABLE</b></li>
  <li>Search <b>YouTube Analytics API</b>. Select and click <b>ENABLE</b></li>
  <li>Search <b>YouTube Reporting API</b>. Select and click <b>ENABLE</b></li>
  <li>Go to back to main screen of <a target="_blank" href="https://console.developers.google.com/">Google API Console</a></li>
  <li>Click <b>OAuth Consent Screen</b> Tab. Enter necessary details and Save.</li>
  <li>Click <b>Credentials Tab</b></li>
  <li>Click <b>CREATE CREDENTIALS</b> (some where in topbar) and select <b>OAuth Client ID</b> option.</li>
  <li>When prompted Select Application Type as <b>Desktop App</b> and click Create to receive your ClientID and Secret. You can use this information now to configure Connection.</li>
</ol>
]]>
      </Notes>
      <Params>
        <Param Name="ClientId" />
        <Param Name="ClientSecret" Secret="True" />
        <Param Name="Scope" Value="https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.readonly https://www.googleapis.com/auth/youtubepartner https://www.googleapis.com/auth/youtube.force-ssl https://www.googleapis.com/auth/youtube.upload https://www.googleapis.com/auth/youtubepartner-channel-audit https://www.googleapis.com/auth/yt-analytics-monetary.readonly https://www.googleapis.com/auth/yt-analytics.readonly" />
        <Param Name="RetryMode" Hidden="True" Value="RetryWhenStatusCodeMatch" Options="None;RetryAny;RetryWhenStatusCodeMatch;" />
        <Param Name="RetryStatusCodeList" Hidden="True" Value="403|429" />
        <Param Name="RetryCountMax" Value="5" Hidden="True" />
        <Param Name="RetryMultiplyWaitTime" Value="True" Hidden="True" />     
      </Params>
    </Auth>    

    <Auth Name="ServiceAccount" Label="Service Account (Using Private Key File)" HelpLink="https://cloud.google.com/docs/authentication/production#create_service_account"
        Type="OAuth" ConnStr="Provider=Google;UseCustomApp=True;UseClientCertificate=True;CertificateStorageType=PfxFile;CertificatePath=[$PrivateKeyPath$];GrantType=ClientCredentials;"
        TestEndPoint="get_playlists"  
        >
      <Params>
        <Param Name="ClientId" Label="Service Account Email" Desc="This is service account email ID (e.g. some_name@my_project.iam.gserviceaccount.com)" Required="True" />
        <Param Name="PrivateKeyPath" Label="Service Account Private Key Path (i.e. *.p12)" Desc="File path for p12 file (i.e. Private Key file for service account). Keep this key file secure" Required="True" />
        <Param Name="Scope" Value="https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.readonly https://www.googleapis.com/auth/youtubepartner https://www.googleapis.com/auth/youtube.force-ssl https://www.googleapis.com/auth/youtube.upload https://www.googleapis.com/auth/youtubepartner-channel-audit https://www.googleapis.com/auth/yt-analytics-monetary.readonly https://www.googleapis.com/auth/yt-analytics.readonly" />
        <Param Name="RetryMode" Hidden="True" Value="RetryWhenStatusCodeMatch" Options="None;RetryAny;RetryWhenStatusCodeMatch;" />
        <Param Name="RetryStatusCodeList" Hidden="True" Value="403|429" />
        <Param Name="RetryCountMax" Value="5" Hidden="True" />
        <Param Name="RetryMultiplyWaitTime" Value="True" Hidden="True" />
      </Params>

      <Notes>
        <![CDATA[Use these steps to authenticate as service account rather than Google / GSuite User. Learn more about service account <a href="https://cloud.google.com/iam/docs/service-accounts" target="_blank">here</a><p />
Basically to call Google API as Service account we need to perform following steps listed in 3 sections (Detailed steps found in the help link at the end)<p />
<h3>Create Project</h3>
First thing is create a Project so we can call Google API. Skip this section if you already have Project (Go to next section)
<ol>
  <li>Go to <a target="_blank" href="https://console.developers.google.com/">Google API Console</a></li>
  <li>From the Project Dropdown (usually found at the top bar) click Select Project</li></li>
  <li>On Project Popup click <b>CREATE PROJECT</b></li>
  <li>Once project is created you can click Select Project to switch the context (You can click on Notification link or Choose from Top Dropdown)</b></li>
  <li>Click <b>ENABLE APIs AND SERVICES</b></li>
  <li>Now we need to Enable three APIs one by one (YouTube Data API, YouTube Analytics API, YouTube Reporting API)</li>
  <li>Search <b>YouTube Data API</b>. Select and click <b>ENABLE</b></li>
  <li>Search <b>YouTube Analytics API</b>. Select and click <b>ENABLE</b></li>
  <li>Search <b>YouTube Reporting API</b>. Select and click <b>ENABLE</b></li>
</ol>

<h3>Create Service Account</h3> 
Once Project is created and APIs are enabled we can now create a service account under that project. Service account has its ID which looks like some email ID (not to confuse with Google /Gmail email ID)
<ol>
  <li>Go to <a target="_blank" href="https://console.cloud.google.com/projectselector/iam-admin/serviceaccounts/create?supportedpurview=project/">Create Service Account</a>
  <li>From the Project Dropdown (usually found at the top bar) click Select Project</li>
  <li>Enter <b>Service account name</b> and <b>Service account description</b></li>
  <li>For Role, do not select anything for now and Click <b>Continue</b> and then click <b>Done</b>. Next we will create Key.</li>
</ol>

<h3>Create Key</h3>
Once service account is created we need to create key file (i.e. credentials).
<ol>
  <li>In the Cloud Console, click the email address for the service account that you created.</li>
  <li>Click <b>Keys</b>.</li>
  <li>Click <b>Add key</b>, then click <b>Create new key</b>.</li>
  <li>Click <b>Create</b> and select <b>P12</b> format. A <b>P12 key file</b> is downloaded to your computer. We will use this file in our API connection.</li>
  <li>Click <b>Close</b>.</li>
  <li>Now you may use downloaded *.p12 key file as secret file and Service Account Email as Client ID (e.g. <b>some-service-account-name@your-project-id.iam.gserviceaccount.com</b> ).</li>
</ol>

<h3>Add Permission</h3>
Now last thing is give read/write permission to Service Account. Basically you can create or open Google Sheet and add the Service Account as an editor to it as below.
<ol>
  <li>Copy the email address of your service account we created in previous step (its usually like this some-service-account-name@your-project-id.iam.gserviceaccount.com).</li>
  <li>Create or select an existing Google Sheet.</li>
  <li>Navigate to Sheet for which you like to give read/write access to Service Account.</li>
  <li>Click on the Share button in the top right, and add the email address of the service account as an editor. Here is how to <a href="https://support.google.com/drive/answer/2494822?hl=en&ref_topic=7000947" target="_blank">share file(s) with specific people</a>. Juse share with Service Account (use Service Account Email found on previous section)</li>
</ol>

]]>
      </Notes>
    </Auth>
  </Auths>
  
  <Template>
    <EndPoint Name="Pagination">
      <Params>
        <Param Name="NextUrlAttributeOrExpr" Type="Property" Value="$.nextPageToken" />
        <Param Name="NextUrlSuffix" Type="Property" Value="&amp;pageToken=&lt;%nextlink%&gt;" />
      </Params>
    </EndPoint>        
    <EndPoint Name="SearchColumns" Template="Pagination">
        <OutputColumns>          
          <Column Name="id.kind" Label="id_kind" DataType="DT_WSTR" Length="200" />
          <Column Name="id.videoId" Label="videoId" DataType="DT_WSTR" Length="100" />
          <Column Name="snippet.publishedAt" Label="publishedAt" DataType="DT_DBTIMESTAMP" />
          <Column Name="snippet.title" Label="title" DataType="DT_WSTR" Length="1200" />
          <Column Name="snippet.description" Label="description" DataType="DT_NTEXT" />
          <Column Name="snippet.channelId" Label="channelId" DataType="DT_WSTR" Length="300" />          
          <Column Name="snippet.thumbnails.default.url" Label="thumbnails_default_url" DataType="DT_WSTR" Length="400" />
          <Column Name="snippet.thumbnails.default.width" Label="thumbnails_default_width" DataType="DT_I8" />
          <Column Name="snippet.thumbnails.default.height" Label="thumbnails_default_height" DataType="DT_I8" />
          <Column Name="snippet.thumbnails.medium.url" Label="thumbnails_medium_url" DataType="DT_WSTR" Length="400" />
          <Column Name="snippet.thumbnails.medium.width" Label="thumbnails_medium_width" DataType="DT_I8" />
          <Column Name="snippet.thumbnails.medium.height" Label="thumbnails_medium_height" DataType="DT_I8" />
          <Column Name="snippet.thumbnails.high.url" Label="thumbnails_high_url" DataType="DT_WSTR" Length="400" />
          <Column Name="snippet.thumbnails.high.width" Label="thumbnails_high_width" DataType="DT_I8" />
          <Column Name="snippet.thumbnails.high.height" Label="thumbnails_high_height" DataType="DT_I8" />
          <Column Name="snippet.channelTitle" Label="channelTitle" DataType="DT_WSTR" Length="200" />
          <Column Name="snippet.liveBroadcastContent" Label="liveBroadcastContent" DataType="DT_WSTR" Length="200" />
          <Column Name="snippet.publishTime" Label="publishTime" DataType="DT_DBTIMESTAMP" />    
          <Column Name="etag" DataType="DT_WSTR" Length="300" />      
          <Column Name="kind" DataType="DT_WSTR" Length="150" /> 
        </OutputColumns>  
    </EndPoint>
    <EndPoint Name="VideoColumns" Template="Pagination">
        <OutputColumns>
            <Column Name="id" DataType="DT_WSTR" Length="44" />
            <Column Name="snippet.publishedAt" Label="publishedAt" DataType="DT_DBTIMESTAMP" />
            <Column Name="snippet.channelId" Label="channelId" DataType="DT_WSTR" Length="96" />
            <Column Name="snippet.title" Label="title" DataType="DT_WSTR" Length="255" />
            <Column Name="snippet.description" Label="description" DataType="DT_NTEXT" />
            <Column Name="snippet.thumbnails.default.url" Label="thumbnails_default_url" DataType="DT_WSTR" Length="500" />
            <Column Name="snippet.thumbnails.default.width" Label="thumbnails_default_width" DataType="DT_I8" />
            <Column Name="snippet.thumbnails.default.height" Label="thumbnails_default_height" DataType="DT_I8" />
            <Column Name="snippet.thumbnails.medium.url" Label="thumbnails_medium_url" DataType="DT_WSTR" Length="500" />
            <Column Name="snippet.thumbnails.medium.width" Label="thumbnails_medium_width" DataType="DT_I8" />
            <Column Name="snippet.thumbnails.medium.height" Label="thumbnails_medium_height" DataType="DT_I8" />
            <Column Name="snippet.thumbnails.high.url" Label="thumbnails_high_url" DataType="DT_WSTR" Length="500" />
            <Column Name="snippet.thumbnails.high.width" Label="thumbnails_high_width" DataType="DT_I8" />
            <Column Name="snippet.thumbnails.high.height" Label="thumbnails_high_height" DataType="DT_I8" />
            <Column Name="snippet.channelTitle" Label="channelTitle" DataType="DT_WSTR" Length="72" />
            <Column Name="snippet.liveBroadcastContent" Label="liveBroadcastContent" DataType="DT_WSTR" Length="500" />
            <Column Name="snippet.categoryId" Label="categoryId" DataType="DT_WSTR" Length="500" />
            <Column Name="snippet.localized.title" Label="localized_title" DataType="DT_WSTR" Length="500" />
            <Column Name="snippet.localized.description" Label="localized_description" DataType="DT_NTEXT" />
            <Column Name="contentDetails.duration" Label="contentDetails_duration" DataType="DT_WSTR" Length="500" />
            <Column Name="contentDetails.dimension" Label="contentDetails_dimension" DataType="DT_WSTR" Length="500" />
            <Column Name="contentDetails.definition" Label="contentDetails_definition" DataType="DT_WSTR" Length="500" />
            <Column Name="contentDetails.caption" Label="contentDetails_caption" DataType="DT_WSTR" Length="500" />
            <Column Name="contentDetails.licensedContent" Label="contentDetails_licensedContent" DataType="DT_BOOL" />
            <Column Name="contentDetails.projection" Label="contentDetails_projection" DataType="DT_WSTR" Length="44" />
            <Column Name="contentDetails.hasCustomThumbnail" Label="contentDetails_hasCustomThumbnail" DataType="DT_BOOL" />
            <Column Name="status.uploadStatus" Label="status_uploadStatus" DataType="DT_WSTR" Length="500" />
            <Column Name="status.privacyStatus" Label="status_privacyStatus" DataType="DT_WSTR" Length="500" />
            <Column Name="status.license" Label="status_license" DataType="DT_WSTR" Length="100" />
            <Column Name="status.embeddable" Label="status_embeddable" DataType="DT_BOOL" />
            <Column Name="status.publicStatsViewable" Label="status_publicStatsViewable" DataType="DT_BOOL" />
            <Column Name="status.madeForKids" Label="status_madeForKids" DataType="DT_BOOL" />
            <Column Name="status.selfDeclaredMadeForKids" Label="status_selfDeclaredMadeForKids" DataType="DT_BOOL" />
            <Column Name="statistics.viewCount" Label="viewCount" DataType="DT_WSTR" Length="20" />
            <Column Name="statistics.likeCount" Label="likeCount" DataType="DT_WSTR" Length="20" />
            <Column Name="statistics.dislikeCount" Label="dislikeCount" DataType="DT_WSTR" Length="20" />
            <Column Name="statistics.favoriteCount" Label="favoriteCount" DataType="DT_WSTR" Length="20" />
            <Column Name="statistics.commentCount" Label="commentCount" DataType="DT_WSTR" Length="20" />
            <Column Name="player.embedHtml" Label="player_embedHtml" DataType="DT_WSTR" Length="4000" />
            <Column Name="topicDetails.topicCategories" Label="topicDetails_topicCategories" DataType="DT_WSTR" Length="4000" />
            <Column Name="fileDetails.fileName" Label="fileDetails_fileName" DataType="DT_WSTR" Length="500" />
            <Column Name="processingDetails.processingStatus" Label="processingDetails_processingStatus" DataType="DT_WSTR" Length="150" />
            <Column Name="processingDetails.fileDetailsAvailability" Label="processingDetails_fileDetailsAvailability" DataType="DT_WSTR" Length="150" />
            <Column Name="processingDetails.processingIssuesAvailability" Label="processingDetails_processingIssuesAvailability" DataType="DT_WSTR" Length="150" />
            <Column Name="processingDetails.tagSuggestionsAvailability" Label="processingDetails_tagSuggestionsAvailability" DataType="DT_WSTR" Length="150" />
            <Column Name="processingDetails.editorSuggestionsAvailability" Label="processingDetails_editorSuggestionsAvailability" DataType="DT_WSTR" Length="150" />
            <Column Name="processingDetails.thumbnailsAvailability" Label="processingDetails_thumbnailsAvailability" DataType="DT_WSTR" Length="150" />
            <Column Name="kind" DataType="DT_WSTR" Length="60" />
            <Column Name="etag" DataType="DT_WSTR" Length="108" />        
        </OutputColumns>     
    </EndPoint>
  </Template>  

  <EndPoints>
    <!-- get_video_details -->
    <EndPoint Name="get_video_details" Template="VideoColumns" Label="Get video details" Desc="Read videos details by IDs or chart or myRating (pass one of them)" HelpLink="https://developers.google.com/youtube/v3/docs/videos/list"
	            Url="/videos" Method="GET" Filter="$.items[*]">
      <Params>
          <!-- must choose one -->
        <Param Name="id" Type="Query" Label="Ids (up to 25 comma-separated)" Desc="Comma-separated IDs of YouTube videos (max 25 IDs)" />               
        <Param Name="chart" Type="Query" Options="mostPopular" Desc="The chart parameter identifies the chart that you want to retrieve."/>
        <Param Name="myRating" Type="Query" Options="like;dislike"/>
               
        <Param Required="True" Name="part" Type="Query" 
               Options="contentDetails;fileDetails;id;liveStreamingDetails;localizations;player;processingDetails;recordingDetails;snippet;statistics;status;suggestions;topicDetails"
               MultiSelectSeparator=","
               MultiSelect="True"        
               Value="contentDetails~fileDetails~id~liveStreamingDetails~localizations~player~processingDetails~recordingDetails~snippet~statistics~status~suggestions~topicDetails"
               />
        
        <!-- optional -->
        <Param Name="hl" Hidden="True" Type="Query" />
        <Param Name="maxHeight" Hidden="True" Type="Query" Desc="Acceptable values are 72 to 8192, inclusive."/>
        <Param Name="maxResults" Hidden="True" Type="Query" Desc="Acceptable values are 1 to 50, inclusive. Default value is 5." Value="50" />
        <Param Name="maxWidth" Hidden="True" Type="Query" Desc="Acceptable values are 72 to 8192, inclusive."/>
        <Param Name="onBehalfOfContentOwner" Hidden="True" Type="Query" />
        <Param Name="regionCode" Hidden="True" Type="Query" />
        <Param Name="videoCategoryId" Hidden="True" Type="Query" />      
      </Params>    
    </EndPoint> 

    <!-- get_rating -->
    <EndPoint Name="get_rating" Label="Get videos rating" HelpLink="https://developers.google.com/youtube/v3/docs/videos/getRating"
	            Url="/videos/getRating" Method="GET" Filter="$.items[*]">
      <Params>
        <Param Name="id" Required="True" Type="Query" />
        <Param Name="onBehalfOfContentOwner" Hidden="True" Type="Query"/>
      </Params>
      <OutputColumns>
        <Column Name="videoId" DataType="DT_WSTR" Length="50" />
        <Column Name="rating" DataType="DT_WSTR" Length="20" />
      </OutputColumns>
    </EndPoint>     

    <!-- get_playlists -->
    <EndPoint Name="get_playlists" Template="Pagination" Label="Get playlists" HelpLink="https://developers.google.com/youtube/v3/docs/playlists/list"
	            Url="/playlists" Method="GET" Filter="$.items[*]">
      <Params>
        <Param Name="part" Required="True" Type="Query" Options="contentDetails;id;localizations;player;snippet;status" MultiSelectSeparator="," MultiSelect="True" Value="contentDetails~id~localizations~player~snippet~status"/>
        <!-- must choose one -->
        <Param Name="id" Desc="Get playlist with this Id. If you pass this, don't set 'channelId' nor 'mine'." Type="Query"/>
        <Param Name="channelId" Desc="Set this parameter to show playlists from the specified channel. If you pass this, don't set 'id' nor 'mine'." Type="Query" OptionsEndPoint="get_channels" OptionsEndPointLabelColumn="title" OptionsEndPointValueColumn="id" OptionsEndPointParameters="part=snippet"/>
        <Param Name="mine" Value="true" Desc="Set this parameter to show playlists for my account. If you pass this, don't set 'id' nor 'channelId'." Type="Query" Options="true;false" />        
        <!-- optional -->
        <Param Name="hl" Hidden="True" Type="Query" />
        <Param Name="maxResults" Hidden="True" Type="Query" Value="50" />
        <Param Name="onBehalfOfContentOwner" Hidden="True" Type="Query" />
        <Param Name="onBehalfOfContentOwnerChannel" Hidden="True" Type="Query" />
      </Params>
      <OutputColumns>
        <Column Name="id" DataType="DT_WSTR" Length="136" />
        <Column Name="snippet.publishedAt" Label="publishedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="snippet.channelId" Label="channelId" DataType="DT_WSTR" Length="96" />
        <Column Name="snippet.title" Label="title" DataType="DT_WSTR" Length="36" />
        <Column Name="snippet.description" Label="description" DataType="DT_NTEXT" />
        <Column Name="snippet.thumbnails.default.url" Label="thumbnails_default_url" DataType="DT_WSTR" Length="1000" />
        <Column Name="snippet.thumbnails.default.width" Label="thumbnails_default_width" DataType="DT_I8" />
        <Column Name="snippet.thumbnails.default.height" Label="thumbnails_default_height" DataType="DT_I8" />
        <Column Name="snippet.thumbnails.medium.url" Label="thumbnails_medium_url" DataType="DT_WSTR" Length="1000" />
        <Column Name="snippet.thumbnails.medium.width" Label="thumbnails_medium_width" DataType="DT_I8" />
        <Column Name="snippet.thumbnails.medium.height" Label="thumbnails_medium_height" DataType="DT_I8" />
        <Column Name="snippet.thumbnails.high.url" Label="thumbnails_high_url" DataType="DT_WSTR" Length="1000" />
        <Column Name="snippet.thumbnails.high.width" Label="thumbnails_high_width" DataType="DT_I8" />
        <Column Name="snippet.thumbnails.high.height" Label="thumbnails_high_height" DataType="DT_I8" />
        <Column Name="snippet.channelTitle" Label="channelTitle" DataType="DT_WSTR" Length="200" />
        <Column Name="snippet.localized.title" Label="localized_title" DataType="DT_WSTR" Length="200" />
        <Column Name="snippet.localized.description" Label="localized_description" DataType="DT_NTEXT" />
        <Column Name="snippet.thumbnails.standard.url" Label="thumbnails_standard_url" DataType="DT_WSTR" Length="1000" />
        <Column Name="snippet.thumbnails.standard.width" Label="thumbnails_standard_width" DataType="DT_I8" />
        <Column Name="snippet.thumbnails.standard.height" Label="thumbnails_standard_height" DataType="DT_I8" />
        <Column Name="status.privacyStatus" Label="status_privacyStatus" DataType="DT_WSTR" Length="100" />
        <Column Name="contentDetails.itemCount" Label="contentDetails_itemCount" DataType="DT_I8" />
        <Column Name="player.embedHtml" Label="player_embedHtml" DataType="DT_WSTR" Length="4000" />        
        <Column Name="kind" DataType="DT_WSTR" Length="64" />
        <Column Name="etag" DataType="DT_WSTR" Length="108" />        
      </OutputColumns>      
    </EndPoint>         

    <!-- get_playlist_items -->
    <EndPoint Name="get_playlist_items" Template="Pagination" Label="Get playlist items" HelpLink="https://developers.google.com/youtube/v3/docs/playlistItems/list"
	            Url="/playlistItems" Method="GET" Filter="$.items[*]">
      <Params>
        <Param Required="True" Name="part" Type="Query" Options="contentDetails;id;snippet;status" MultiSelectSeparator="," MultiSelect="True" 
               Value="contentDetails~id~snippet~status" />
        <!-- must choose one -->
        <Param Name="id" Type="Query"/>
        <Param Name="playlistId" Type="Query" OptionsEndPoint="get_playlists" OptionsEndPointValueColumn="id" OptionsEndPointLabelColumn="title" OptionsEndPointParameters="part=snippet" />
        <!-- optional -->        
        <Param Name="maxResults" Hidden="True" Type="Query" Value="50" />
        <Param Name="onBehalfOfContentOwner" Hidden="True" Type="Query" />
        <Param Name="videoId" Type="Query" />
      </Params>
      <OutputColumns>
        <Column Name="id" DataType="DT_WSTR" Length="272" />
        <Column Name="kind" DataType="DT_WSTR" Length="80" />        
        <Column Name="snippet.publishedAt" Label="publishedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="snippet.channelId" Label="channelId" DataType="DT_WSTR" Length="200" />
        <Column Name="snippet.title" Label="title" DataType="DT_WSTR" Length="500" />
        <Column Name="snippet.description" Label="description" DataType="DT_NTEXT" />       
        <Column Name="snippet.thumbnails.default.url" Label="thumbnails_default_url" DataType="DT_WSTR" Length="1000" />
        <Column Name="snippet.thumbnails.default.width" Label="thumbnails_default_width" DataType="DT_I8" />
        <Column Name="snippet.thumbnails.default.height" Label="thumbnails_default_height" DataType="DT_I8" />
        <Column Name="snippet.thumbnails.medium.url" Label="thumbnails_medium_url" DataType="DT_WSTR" Length="1000" />
        <Column Name="snippet.thumbnails.medium.width" Label="thumbnails_medium_width" DataType="DT_I8" />
        <Column Name="snippet.thumbnails.medium.height" Label="thumbnails_medium_height" DataType="DT_I8" />
        <Column Name="snippet.thumbnails.high.url" Label="thumbnails_high_url" DataType="DT_WSTR" Length="1000" />
        <Column Name="snippet.thumbnails.high.width" Label="thumbnails_high_width" DataType="DT_I8" />
        <Column Name="snippet.thumbnails.high.height" Label="thumbnails_high_height" DataType="DT_I8" />
        <Column Name="snippet.channelTitle" Label="channelTitle" DataType="DT_WSTR" Length="200" />
        <Column Name="snippet.playlistId" Label="playlistId" DataType="DT_WSTR" Length="136" />
        <Column Name="snippet.position" Label="position" DataType="DT_I8" />
        <Column Name="snippet.resourceId.kind" Label="resourceId_kind" DataType="DT_WSTR" Length="52" />
        <Column Name="snippet.resourceId.videoId" Label="resourceId_videoId" DataType="DT_WSTR" Length="50" />
        <Column Name="snippet.videoOwnerChannelTitle" Label="videoOwnerChannelTitle" DataType="DT_WSTR" Length="200" />
        <Column Name="snippet.videoOwnerChannelId" Label="videoOwnerChannelId" DataType="DT_WSTR" Length="96" />
        <Column Name="contentDetails.videoId" Label="contentDetails_videoId" DataType="DT_WSTR" Length="50" />
        <Column Name="contentDetails.videoPublishedAt" Label="contentDetails_videoPublishedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="status.privacyStatus" Label="status_privacyStatus" DataType="DT_WSTR" Length="100" />
        <Column Name="etag" DataType="DT_WSTR" Length="108" />        
      </OutputColumns>      
    </EndPoint>         

    <!-- get_comments -->
    <EndPoint Name="get_comments" Template="Pagination" Label="Get comments" HelpLink="https://developers.google.com/youtube/v3/docs/commentThreads/list"
	            Url="/commentThreads" Method="GET" Filter="$.items[*]">
      <Params>
        <Param Required="True" Name="part" Type="Query" Options="id;replies;snippet" MultiSelectSeparator="," MultiSelect="True" Value="id~replies~snippet"/>
        <!-- must choose one -->
        <Param Name="allThreadsRelatedToChannelId" Type="Query"/>
        <Param Name="channelId" Type="Query" OptionsEndPoint="get_channels" OptionsEndPointLabelColumn="title" OptionsEndPointValueColumn="id" OptionsEndPointParameters="part=snippet"/>
        <Param Name="id" Type="Query"/>
        <Param Name="videoId" Type="Query"/>
        
        <!-- optional -->        
        <Param Name="maxResults" Hidden="True" Type="Query" Value="50" />
        <Param Name="moderationStatus" Hidden="True" Type="Query" Options="heldForReview;likelySpam;published" />
        <Param Name="order" Type="Query" Options="time;relevance" />
        <Param Name="searchTerms" Hidden="True" Type="Query" />
        <Param Name="textFormat" Hidden="True" Type="Query" Options="html;plainText" />
      </Params>
      <OutputColumns>
        <Column Name="id" DataType="DT_WSTR" Length="104" />
        <Column Name="snippet.videoId" Label="videoId" DataType="DT_WSTR" Length="44" />
        <Column Name="snippet.topLevelComment.kind" Label="topLevelComment_kind" DataType="DT_WSTR" Length="60" />
        <Column Name="snippet.topLevelComment.etag" Label="topLevelComment_etag" DataType="DT_WSTR" Length="108" />
        <Column Name="snippet.topLevelComment.id" Label="topLevelComment_id" DataType="DT_WSTR" Length="104" />
        <Column Name="snippet.topLevelComment.snippet.videoId" Label="topLevelComment_videoId" DataType="DT_WSTR" Length="44" />
        <Column Name="snippet.topLevelComment.snippet.textDisplay" Label="topLevelComment_textDisplay" DataType="DT_WSTR" Length="96" />
        <Column Name="snippet.topLevelComment.snippet.textOriginal" Label="topLevelComment_textOriginal" DataType="DT_WSTR" Length="96" />
        <Column Name="snippet.topLevelComment.snippet.authorDisplayName" Label="topLevelComment_authorDisplayName" DataType="DT_WSTR" Length="72" />
        <Column Name="snippet.topLevelComment.snippet.authorProfileImageUrl" Label="topLevelComment_authorProfileImageUrl" DataType="DT_WSTR" Length="480" />
        <Column Name="snippet.topLevelComment.snippet.authorChannelUrl" Label="topLevelComment_authorChannelUrl" DataType="DT_WSTR" Length="220" />
        <Column Name="snippet.topLevelComment.snippet.authorChannelId.value" Label="topLevelComment_authorChannelId_value" DataType="DT_WSTR" Length="96" />
        <Column Name="snippet.topLevelComment.snippet.canRate" Label="topLevelComment_canRate" DataType="DT_BOOL" />
        <Column Name="snippet.topLevelComment.snippet.viewerRating" Label="topLevelComment_viewerRating" DataType="DT_WSTR" Length="16" />
        <Column Name="snippet.topLevelComment.snippet.likeCount" Label="topLevelComment_likeCount" DataType="DT_I8" />
        <Column Name="snippet.topLevelComment.snippet.publishedAt" Label="topLevelComment_publishedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="snippet.topLevelComment.snippet.updatedAt" Label="topLevelComment_updatedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="snippet.canReply" Label="canReply" DataType="DT_BOOL" />
        <Column Name="snippet.totalReplyCount" Label="totalReplyCount" DataType="DT_I8" />
        <Column Name="snippet.isPublic" Label="isPublic" DataType="DT_BOOL" />
        <Column Name="kind" DataType="DT_WSTR" Length="84" />
        <Column Name="etag" DataType="DT_WSTR" Length="108" />      
      </OutputColumns>      
    </EndPoint>   

    <!-- get_channels -->
    <EndPoint Name="get_channels" Template="Pagination" Label="Get channels" HelpLink="https://developers.google.com/youtube/v3/docs/channels/list"
	            Url="/channels" Method="GET" Filter="$.items[*]">
      <Params>
        <Param Required="True" Name="part" Type="Query" Options="auditDetails;brandingSettings;contentDetails;contentOwnerDetails;id;localizations;snippet;statistics;status;topicDetails" MultiSelectSeparator="," MultiSelect="True" Value="auditDetails~brandingSettings~contentDetails~contentOwnerDetails~id~localizations~snippet~statistics~status~topicDetails"/>
        <!-- must choose one -->
        <Param Name="mine" Type="Query" Options="true;false"/>
        <Param Name="forUsername" Type="Query"/>
        <Param Name="id" Type="Query"/>
        <Param Name="managedByMe" Type="Query" Options="true;false"/>
                               
        <!-- optional -->        
        <Param Name="hl" Hidden="True" Type="Query" />
        <Param Name="maxResults" Hidden="True" Type="Query" Value="50" />
        <Param Name="onBehalfOfContentOwner" Hidden="True" Type="Query" />
      </Params>
      <OutputColumns>
        <Column Name="id" DataType="DT_WSTR" Length="96" />
        <Column Name="snippet.title" Label="title" DataType="DT_WSTR" Length="72" />
        <Column Name="snippet.description" Label="description" DataType="DT_WSTR" Length="80" />
        <Column Name="snippet.publishedAt" Label="publishedAt" DataType="DT_DBTIMESTAMP" />
        <Column Name="snippet.thumbnails.default.url" Label="thumbnails_default_url" DataType="DT_WSTR" Length="480" />
        <Column Name="snippet.thumbnails.default.width" Label="thumbnails_default_width" DataType="DT_I8" />
        <Column Name="snippet.thumbnails.default.height" Label="thumbnails_default_height" DataType="DT_I8" />
        <Column Name="snippet.thumbnails.medium.url" Label="thumbnails_medium_url" DataType="DT_WSTR" Length="484" />
        <Column Name="snippet.thumbnails.medium.width" Label="thumbnails_medium_width" DataType="DT_I8" />
        <Column Name="snippet.thumbnails.medium.height" Label="thumbnails_medium_height" DataType="DT_I8" />
        <Column Name="snippet.thumbnails.high.url" Label="thumbnails_high_url" DataType="DT_WSTR" Length="484" />
        <Column Name="snippet.thumbnails.high.width" Label="thumbnails_high_width" DataType="DT_I8" />
        <Column Name="snippet.thumbnails.high.height" Label="thumbnails_high_height" DataType="DT_I8" />
        <Column Name="snippet.localized.title" Label="localized_title" DataType="DT_WSTR" Length="72" />
        <Column Name="snippet.localized.description" Label="localized_description" DataType="DT_WSTR" Length="80" />
        <Column Name="contentDetails.relatedPlaylists.likes" Label="contentDetails_relatedPlaylists_likes" DataType="DT_WSTR" Length="8" />
        <Column Name="contentDetails.relatedPlaylists.uploads" Label="contentDetails_relatedPlaylists_uploads" DataType="DT_WSTR" Length="96" />
        <Column Name="statistics.viewCount" Label="statistics_viewCount" DataType="DT_WSTR" Length="8" />
        <Column Name="statistics.subscriberCount" Label="statistics_subscriberCount" DataType="DT_WSTR" Length="4" />
        <Column Name="statistics.hiddenSubscriberCount" Label="statistics_hiddenSubscriberCount" DataType="DT_BOOL" />
        <Column Name="statistics.videoCount" Label="statistics_videoCount" DataType="DT_WSTR" Length="4" />
        <Column Name="status.privacyStatus" Label="status_privacyStatus" DataType="DT_WSTR" Length="24" />
        <Column Name="status.isLinked" Label="status_isLinked" DataType="DT_BOOL" />
        <Column Name="status.longUploadsStatus" Label="status_longUploadsStatus" DataType="DT_WSTR" Length="32" />
        <Column Name="brandingSettings.channel.title" Label="brandingSettings_channel_title" DataType="DT_WSTR" Length="72" />
        <Column Name="auditDetails.overallGoodStanding" Label="auditDetails_overallGoodStanding" DataType="DT_BOOL" />
        <Column Name="auditDetails.communityGuidelinesGoodStanding" Label="auditDetails_communityGuidelinesGoodStanding" DataType="DT_BOOL" />
        <Column Name="auditDetails.copyrightStrikesGoodStanding" Label="auditDetails_copyrightStrikesGoodStanding" DataType="DT_BOOL" />
        <Column Name="auditDetails.contentIdClaimsGoodStanding" Label="auditDetails_contentIdClaimsGoodStanding" DataType="DT_BOOL" />
        <Column Name="etag" DataType="DT_WSTR" Length="108" />        
        <Column Name="kind" DataType="DT_WSTR" Length="60" />      
      </OutputColumns>      
    </EndPoint>   
    
    <!-- get_videos -->
    <EndPoint Name="get_videos" Template="VideoColumns" Label="Get videos" Url="/search?part=snippet&amp;type=video" Filter="$.items[*]">        
        <Params>
            <!-- optional -->
            <Param Name="forMine" Label="forMine (search in my account only)" Type="Query" Options="true;false" Value="true" /> 
            <Param Name="q" Label="query (search term)" Type="Query" />

            <Param Name="channelId" Type="Query" OptionsEndPoint="get_channels" OptionsEndPointLabelColumn="title" OptionsEndPointValueColumn="id" OptionsEndPointParameters="part=snippet"/>
            <Param Name="channelType" Type="Query" Options="any;show" />
            <Param Name="eventType" Type="Query" Options="completed;live;upcoming" />

            <Param Name="location" Hidden="True" Type="Query" />
            <Param Name="locationRadius" Hidden="True" Type="Query" />
            <Param Name="maxResults" Hidden="True" Type="Query" Value="50" />
            <Param Name="onehalfOfContentOwner" Hidden="True" Type="Query" />
            <Param Name="order" Type="Query" Options="date;rating;relevance;title;videoCount;viewCount" />
            <Param Name="publishedAfter" Hidden="True" Type="Query" />
            <Param Name="publishedBefore" Hidden="True" Type="Query" />        
            <Param Name="regionCode" Hidden="True" Type="Query" />
            <Param Name="relevanceLanguage" Hidden="True" Type="Query" />
            <Param Name="safeSearch" Hidden="True" Type="Query" Options="moderate;none;strict" />
            <Param Name="topicId" Hidden="True" Type="Query" />
            
            <Param Name="videoCaption" Hidden="True" Type="Query" Options="any;closedCaption;none" />
            <Param Name="videoCategoryId" Hidden="True" Type="Query" />
            <Param Name="videoDefinition" Hidden="True" Type="Query" Options="any;high;standard" />
            <Param Name="videoDimension" Hidden="True" Type="Query" Options="2d;3d;any" />
            <Param Name="videoDuration" Hidden="True" Type="Query" Options="any;long;medium;short" />
            <Param Name="videoEmbeddable" Hidden="True" Type="Query" Options="any;true" />
            <Param Name="videoLicense" Hidden="True" Type="Query" Options="any;creativeCommon;youtube" />
            <Param Name="videoSyndicated" Hidden="True" Type="Query" Options="any;true" />
            <Param Name="videoType" Hidden="True" Type="Query" Options="any;episode;movie" />

            <!-- choose one -->
            <Param Name="forContentOwner" Type="Query" Options="true;false" />
            <Param Name="forDeveloper" Type="Query" Options="true;false" />
            <Param Name="relatedToVideoId" Type="Query" />
        </Params>   

         <!-- child_get_video_details -->
        <EndPoint Name="child_get_video_details" Template="Pagination" 
                  Url="/videos?id={$rows$}" Method="GET" Filter="$.items[*]" BatchSize="50" RequestFormat="Csv" >
          <Params>
            <Param Required="True" Name="part" Type="Query" 
                   Options="contentDetails;fileDetails;id;liveStreamingDetails;localizations;player;processingDetails;recordingDetails;snippet;statistics;status;suggestions;topicDetails"
                   MultiSelectSeparator=","
                   MultiSelect="True"        
                   Value="contentDetails~fileDetails~id~liveStreamingDetails~localizations~player~processingDetails~recordingDetails~snippet~statistics~status~suggestions~topicDetails"
                  />
          </Params>
          <LayoutMap><![CDATA[<?xml version="1.0" encoding="utf-8"?>
  <settings>
    <dataset id="root" readfrominput="True" />
    <map name="ID" src="id.videoId" />
  </settings>]]></LayoutMap>                
        </EndPoint>   
    </EndPoint>

    <!-- search -->
    <EndPoint Name="search" Label="Search" Template="SearchColumns" HelpLink="https://developers.google.com/youtube/v3/docs/search/list"
	            Url="/search" Method="GET" Filter="$.items[*]">
      <Params>
        <Param Required="True" Name="part" Type="Query" Value="snippet" />

        <!-- optional -->
        <Param Name="forMine" Label="forMine (search in my account only)" Desc="If set to 'true', parameter 'type' must be set to 'video'." Type="Query" Options="true;false" Value="true" /> 
        <Param Name="q" Label="query (search term)" Type="Query" />
        <Param Name="type" Type="Query" Desc="Must be set to 'video' if 'forMine' is set to 'true'." Options="channel;playlist;video" Value="video" />

        <Param Name="channelId" Type="Query" OptionsEndPoint="get_channels" OptionsEndPointLabelColumn="title" OptionsEndPointValueColumn="id" OptionsEndPointParameters="part=snippet"/>
        <Param Name="channelType" Type="Query" Options="any;show" />
        <Param Name="eventType" Type="Query" Options="completed;live;upcoming" />

        <Param Name="location" Hidden="True" Type="Query" />
        <Param Name="locationRadius" Hidden="True" Type="Query" />
        <Param Name="maxResults" Hidden="True" Type="Query" Value="50" />
        <Param Name="onehalfOfContentOwner" Hidden="True" Type="Query" />
        <Param Name="order" Type="Query" Options="date;rating;relevance;title;videoCount;viewCount" />
        <Param Name="publishedAfter" Hidden="True" Type="Query" />
        <Param Name="publishedBefore" Hidden="True" Type="Query" />        
        <Param Name="regionCode" Hidden="True" Type="Query" />
        <Param Name="relevanceLanguage" Hidden="True" Type="Query" />
        <Param Name="safeSearch" Hidden="True" Type="Query" Options="moderate;none;strict" />
        <Param Name="topicId" Hidden="True" Type="Query" />
        
        <Param Name="videoCaption" Hidden="True" Type="Query" Options="any;closedCaption;none" />
        <Param Name="videoCategoryId" Hidden="True" Type="Query" />
        <Param Name="videoDefinition" Hidden="True" Type="Query" Options="any;high;standard" />
        <Param Name="videoDimension" Hidden="True" Type="Query" Options="2d;3d;any" />
        <Param Name="videoDuration" Hidden="True" Type="Query" Options="any;long;medium;short" />
        <Param Name="videoEmbeddable" Hidden="True" Type="Query" Options="any;true" />
        <Param Name="videoLicense" Hidden="True" Type="Query" Options="any;creativeCommon;youtube" />
        <Param Name="videoSyndicated" Hidden="True" Type="Query" Options="any;true" />
        <Param Name="videoType" Hidden="True" Type="Query" Options="any;episode;movie" />

        <!-- choose one -->
        <Param Name="forContentOwner" Type="Query" Options="true;false" />
        <Param Name="forDeveloper" Type="Query" Options="true;false" />
      
        <Param Name="relatedToVideoId" Type="Query" />
      </Params>
    </EndPoint>   

    <!-- get_report -->
    <EndPoint Name="get_report" Template="Pagination" Label="Get report" HelpLink="https://developers.google.com/youtube/analytics/reference/reports/query#Parameters"
	            Url="https://youtubeanalytics.googleapis.com/v2/reports" Method="GET" Filter='$.rows[*]'              
              >
      <Params>
        <!-- Hidden -->
        <Param Hidden="True" Name="ArrayTransformType" Value="TransformSimpleTwoDimensionalArray" Type="Property" />      
        <Param Hidden="True" Name="ArrayTransColumnNameFilter" Value="$.columnHeaders[*].name" Type="Property" />
        <Param Hidden="True" Name="ArrayTransRowValueFilter" Value="$.rows[*]" Type="Property" />

        <!-- required -->
        <Param Required="True" Name="ids" Type="Query" Options="Filter1=channel==MINE;Filter2=channel==ENTER_CHANNEL_ID;Filter3=contentOwner==ENTER_OWNER_NAME"/>
        <Param Required="True" Name="metrics" Type="Query" Options="adEarnings;
annotationImpressions;
annotationClickableImpressions;
annotationClicks;
annotationClickThroughRate;
annotationClosableImpressions;
annotationCloses;
annotationCloseRate;
audienceWatchRatio;
averageViewDuration;
averageViewPercentage;
cardClickRate;
cardClicks;
cardImpressions;
cardTeaserClickRate;
cardTeaserClicks;
cardTeaserImpressions;
comments;
dislikes;
earnings;
estimatedMinutesWatched;
estimatedPartnerAdSenseRevenue;
estimatedPartnerDoubleClickRevenue;
grossRevenue;
impressionBasedCpm;
impressions;
likes;
monetizedPlaybacks;
playbackBasedCpm;
playlistStarts;
savesAdded;
savesRemoved;
shares;
subscribersGained;
subscribersLost;
videosAddedToPlaylists;
videosRemovedFromPlaylists;
viewerPercentage;
views" MultiSelectSeparator="," MultiSelect="True" />
        <Param Name="startDate" Required="True" Label="Start Date (yyyy-MM-dd)"
               Value="today" Options="today;yesterday;monthstart;monthend;yearstart;yearend;weekstart;weekend;yearstart-1y;yearend-1y;monthstart-1d;monthend+1d" 
               Desc="The date for which to retrieve the report in YYYYMMDD format. Supported functions now|today|yesterday|weekstart|weekend|monthstart|monthend|yearstart|yearend and supported intervals for add/subtract are ms|s|sec|min|h|hour|y|year|d|day|m|month|y|year. Example monthstart-3d (subtract 3days from month start)"
               ValueTemplate="&lt;&lt;{$value$}||yyyy-MM-dd,FUN_TO_DATE&gt;&gt;" 
               Type="Query" />
        <Param Name="endDate" Required="True" Label="End Date (yyyy-MM-dd)"
               Value="today" Options="today;yesterday;monthstart;monthend;yearstart;yearend;weekstart;weekend;yearstart-1y;yearend-1y;monthstart-1d;monthend+1d" 
               Desc="The date for which to retrieve the report in YYYYMMDD format. Supported functions now|today|yesterday|weekstart|weekend|monthstart|monthend|yearstart|yearend and supported intervals for add/subtract are ms|s|sec|min|h|hour|y|year|d|day|m|month|y|year. Example monthstart-3d (subtract 3days from month start)"
               ValueTemplate="&lt;&lt;{$value$}||yyyy-MM-dd,FUN_TO_DATE&gt;&gt;" 
               Type="Query" />               
        <!-- optional -->        
        <Param Name="currency" Hidden="True" Type="Query" />
        <Param Name="dimensions" Type="Query" Options="adType;
ageGroup;
asset;
audienceType;
channel;
claimedStatus;
contentOwner;
country;
day;
deviceType;
elapsedVideoTimeRatio;
gender;
insightPlaybackLocationDetail;
insightPlaybackLocationType;
insightTrafficSourceDetail;
insightTrafficSourceType;
liveOrOnDemand;
operatingSystem;
playlist;
province;
sharingService;
subscribedStatus;
subtitleLanguage;
uploaderType;
video" MultiSelectSeparator="," MultiSelect="True" />
        <Param Name="filters" Type="Query" Options="Example1=country==IT;Example2=video==dMH0bHeiRNg;Example3=gender==FEMALE;Example4=dimension==some_value" Desc="A list of filters that should be applied when retrieving YouTube Analytics data. The documentation for channel reports and content owner reports identifies the dimensions that can be used to filter each report, and the Dimensions document defines those dimensions." />
        <Param Name="includeHistoricalChannelData" Hidden="True" Type="Query" Options="true;false" />        
        <Param Name="maxResults" Hidden="True" Type="Query" Value="50" />
        <Param Name="sort" Type="Query" Desc="A comma-separated list of dimensions or metrics that determine the sort order for YouTube Analytics data. By default the sort order is ascending. The - prefix causes descending sort order." 
Options="adType;
ageGroup;
asset;
audienceType;
channel;
claimedStatus;
contentOwner;
country;
day;
deviceType;
elapsedVideoTimeRatio;
gender;
insightPlaybackLocationDetail;
insightPlaybackLocationType;
insightTrafficSourceDetail;
insightTrafficSourceType;
liveOrOnDemand;
operatingSystem;
playlist;
province;
sharingService;
subscribedStatus;
subtitleLanguage;
uploaderType;
video;"/>
      </Params>
    </EndPoint>         
  </EndPoints>

  <Tables>
    <Table Name="MyVideos" SelectEndPoint="get_videos">
    </Table>

    <Table Name="MyChannels" SelectEndPoint="get_channels">
      <Params>
        <Param Name="mine" Value="true" Type="Query" />
      </Params>
    </Table>    

    <Table Name="MyPlaylists" SelectEndPoint="get_playlists">    
      <Params>
        <Param Name="mine" Value="true" Type="Query" />
      </Params>
    </Table>  
  </Tables>  

  <Examples>
      <Example Group="ODBC" Label="Get videos of my account" Code="SELECT * FROM MyVideos"></Example>      
      <Example Group="ODBC" Label="Get channels of my account" Code="SELECT * FROM MyChannels"></Example>      
      <Example Group="ODBC" Label="Get playlists of my account" Code="SELECT * FROM MyPlaylists"></Example> 
      
      <Example Group="ODBC" Label="Get comments of a video" Code="SELECT * FROM get_comments WITH (videoId='INPUT_YOUR_VIDEO_ID')" ></Example>
      <Example Group="ODBC" Label="Get comments of a channel" Code="SELECT * FROM get_comments WITH (channelId='INPUT_YOUR_CHANNEL_ID')"></Example>

      <Example Group="ODBC" Label="Get my playlists of my account" Code="SELECT * FROM MyPlaylists" ></Example>
      <Example Group="ODBC" Label="Get my playlists of specific channel" Code="SELECT * FROM get_playlists WITH (channelId='UCVGOyzms_XJNk_DHqrffXCw')"></Example>

      <Example Group="ODBC" Label="Search for videos in whole YouTube" Code="SELECT * FROM search WITH (q='ZappySys Tutorials', maxResults='50')"></Example>      
      <Example Group="ODBC" Label="Search for videos in a channel" Code="SELECT * FROM search WITH (q='GPU', maxResults='50', channelId='UCXuqSBlHAE6Xw-yeJA0Tunw')" ></Example>      

      <Example Group="ODBC" Label="Get channels by ids">
        <Code>
        <![CDATA[SELECT *
FROM get_channels
WITH(
	  id='UC2d5diIOoCEa47p4PjpIHya,AC2d5diIOoCEa47p4PjpIHyQ,TC2d5diIOoCEa47p4PjpIHyI'
)]]>
      </Code>
    </Example>


    <Example Group="ODBC" Label="Gets a report of specific channel">
        <Code>
        <![CDATA[SELECT *
FROM get_report
WITH(
	  ids='channel==ENTER_CHANNEL_ID'
	, metrics='likes~shares~views'
	, startDate='2022-08-01'
	, endDate='2022-08-30'
)]]>
      </Code>
    </Example>    

    <Example Group="ODBC" Label="Gets a report of my channel with relative date">
        <Code>
        
        <![CDATA[SELECT *
FROM get_report
WITH(
      ids='channel==MINE'
    , metrics='likes~shares~views'
    , startDate='yearstart' --OR put date like '2022-08-01'
    , endDate='today' --OR put date like '2022-08-01'
    , dimensions='country'
)]]>
      </Code>
    </Example>  

  </Examples>
</ApiConfig>