チャンネルまたはコンテンツ所有者に対してスケジュール設定されたレポート作成ジョブを一覧表示します。レスポンスの各リソースには id
プロパティが含まれます。このプロパティは、YouTube が求人を一意に識別するために使用する ID を指定します。この ID は、ジョブに対して生成されたレポートのリストを取得したり、ジョブを削除したりするために必要です。
リクエストする
HTTP リクエスト
GET https://youtubereporting.googleapis.com/v1/jobs
パラメータ
クエリ パラメータ
パラメータ | |
---|---|
onBehalfOfContentOwner |
string API リクエストが行われたコンテンツ所有者の ID。リクエストでこのパラメータの値が指定されていない場合、API サーバーはそのリクエストがユーザー自身のチャンネルに対して行われているものと見なします。 |
pageSize |
number リクエストされたページサイズ。値が指定されていない場合、API サーバーは適切なデフォルトを選択します。 サーバーは、リクエストされた数よりも少ないレポートタイプを返す場合があります。 |
pageToken |
string サーバーが返すべき結果のページを識別するトークン。通常、これは前回の jobs.list メソッド呼び出しへのレスポンスで返された nextPageToken プロパティの値となります。 |
includeSystemManaged |
boolean パラメータ値を true に設定して、システム管理レポートのジョブが API レスポンスに含まれるように指定します。[レポート] の同じレポートにアクセスできる YouTube コンテンツ所有者に対して、システム管理レポートが自動で生成されます。したがって、コンテンツ所有者は jobs.create メソッドを呼び出して、これらのレポートの生成を開始するよう YouTube に指示する必要はありません。reportTypeId プロパティがシステム管理のレポートを識別する場合、このメソッドはエラーを返します。パラメータのデフォルト値は false です。 |
リクエスト本文
リクエストの本文は空にする必要があります。
レスポンス
成功すると、このメソッドは次の構造を含むレスポンスの本文を返します。
{ "jobs": [ Job resource ], "nextPageToken": string }
プロパティ | |
---|---|
jobs[] |
list リクエストに関連付けられているチャンネルまたはコンテンツ所有者に対してスケジュールされているレポート作成ジョブのリスト。リスト内の各項目は job リソースです。 |
nextPageToken |
string API レスポンスにこのプロパティの値が含まれている場合、関連するチャンネルまたはコンテンツ所有者は追加の求人情報を利用できます。これらのジョブを取得するには、 pageToken パラメータ値をこの値に設定して、追加の jobs.list リクエストを送信します。 |
例
注: 以下のコード サンプルは、サポートされているプログラミング言語すべてについて表したものではありません。サポートされている言語の一覧については、クライアント ライブラリのドキュメントをご覧ください。
Java
以下のサンプルでは、Java クライアント ライブラリを使用しています。
このサンプルは、特定のジョブによって作成されたレポートを取得する方法を示しています。jobs.list
メソッドを呼び出して、レポートジョブを取得します。次に、jobId
パラメータを特定のジョブ ID に設定して reports.list
メソッドを呼び出し、そのジョブによって作成されたレポートを取得します。最後に、各レポートのダウンロード URL が出力されます。
/* * Copyright (c) 2015 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package com.google.api.services.samples.youtube.cmdline.reporting; import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.googleapis.json.GoogleJsonResponseException; import com.google.api.client.http.GenericUrl; import com.google.api.services.samples.youtube.cmdline.Auth; import com.google.api.services.youtubereporting.YouTubeReporting; import com.google.api.services.youtubereporting.YouTubeReporting.Media.Download; import com.google.api.services.youtubereporting.model.Job; import com.google.api.services.youtubereporting.model.ListJobsResponse; import com.google.api.services.youtubereporting.model.ListReportsResponse; import com.google.api.services.youtubereporting.model.Report; import com.google.common.collect.Lists; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.List; import javax.print.attribute.standard.Media; /** * This sample retrieves reports created by a specific job by: * * 1. Listing the jobs using the "jobs.list" method. * 2. Retrieving reports using the "reports.list" method. * * @author Ibrahim Ulukaya */ public class RetrieveReports { /** * Define a global instance of a YouTube Reporting object, which will be used to make * YouTube Reporting API requests. */ private static YouTubeReporting youtubeReporting; /** * Retrieve reports. * * @param args command line args (not used). */ public static void main(String[] args) { /* * This OAuth 2.0 access scope allows for read access to the YouTube Analytics monetary reports for * authenticated user's account. Any request that retrieves earnings or ad performance metrics must * use this scope. */ List<String> scopes = Lists.newArrayList("https://www.googleapis.com/auth/yt-analytics-monetary.readonly"); try { // Authorize the request. Credential credential = Auth.authorize(scopes, "retrievereports"); // This object is used to make YouTube Reporting API requests. youtubeReporting = new YouTubeReporting.Builder(Auth.HTTP_TRANSPORT, Auth.JSON_FACTORY, credential) .setApplicationName("youtube-cmdline-retrievereports-sample").build(); if (listReportingJobs()) { if(retrieveReports(getJobIdFromUser())) { downloadReport(getReportUrlFromUser()); } } } catch (GoogleJsonResponseException e) { System.err.println("GoogleJsonResponseException code: " + e.getDetails().getCode() + " : " + e.getDetails().getMessage()); e.printStackTrace(); } catch (IOException e) { System.err.println("IOException: " + e.getMessage()); e.printStackTrace(); } catch (Throwable t) { System.err.println("Throwable: " + t.getMessage()); t.printStackTrace(); } } /** * Lists reporting jobs. (jobs.listJobs) * @return true if at least one reporting job exists * @throws IOException */ private static boolean listReportingJobs() throws IOException { // Call the YouTube Reporting API's jobs.list method to retrieve reporting jobs. ListJobsResponse jobsListResponse = youtubeReporting.jobs().list().execute(); List<Job> jobsList = jobsListResponse.getJobs(); if (jobsList == null || jobsList.isEmpty()) { System.out.println("No jobs found."); return false; } else { // Print information from the API response. System.out.println("\n================== Reporting Jobs ==================\n"); for (Job job : jobsList) { System.out.println(" - Id: " + job.getId()); System.out.println(" - Name: " + job.getName()); System.out.println(" - Report Type Id: " + job.getReportTypeId()); System.out.println("\n-------------------------------------------------------------\n"); } } return true; } /** * Lists reports created by a specific job. (reports.listJobsReports) * * @param jobId The ID of the job. * @throws IOException */ private static boolean retrieveReports(String jobId) throws IOException { // Call the YouTube Reporting API's reports.list method // to retrieve reports created by a job. ListReportsResponse reportsListResponse = youtubeReporting.jobs().reports().list(jobId).execute(); List<Report> reportslist = reportsListResponse.getReports(); if (reportslist == null || reportslist.isEmpty()) { System.out.println("No reports found."); return false; } else { // Print information from the API response. System.out.println("\n============= Reports for the job " + jobId + " =============\n"); for (Report report : reportslist) { System.out.println(" - Id: " + report.getId()); System.out.println(" - From: " + report.getStartTime()); System.out.println(" - To: " + report.getEndTime()); System.out.println(" - Download Url: " + report.getDownloadUrl()); System.out.println("\n-------------------------------------------------------------\n"); } } return true; } /** * Download the report specified by the URL. (media.download) * * @param reportUrl The URL of the report to be downloaded. * @throws IOException */ private static boolean downloadReport(String reportUrl) throws IOException { // Call the YouTube Reporting API's media.download method to download a report. Download request = youtubeReporting.media().download(""); FileOutputStream fop = new FileOutputStream(new File("report")); request.getMediaHttpDownloader().download(new GenericUrl(reportUrl), fop); return true; } /* * Prompt the user to enter a job id for report retrieval. Then return the id. */ private static String getJobIdFromUser() throws IOException { String id = ""; System.out.print("Please enter the job id for the report retrieval: "); BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in)); id = bReader.readLine(); System.out.println("You chose " + id + " as the job Id for the report retrieval."); return id; } /* * Prompt the user to enter a URL for report download. Then return the URL. */ private static String getReportUrlFromUser() throws IOException { String url = ""; System.out.print("Please enter the report URL to download: "); BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in)); url = bReader.readLine(); System.out.println("You chose " + url + " as the URL to download."); return url; }}
PHP
以下のサンプルでは、PHP クライアント ライブラリを使用しています。
このサンプルは、特定のジョブによって作成されたレポートを取得する方法を示しています。jobs.list
メソッドを呼び出して、レポートジョブを取得します。次に、jobId
パラメータを特定のジョブ ID に設定して reports.list
メソッドを呼び出し、そのジョブによって作成されたレポートを取得します。最後に、各レポートのダウンロード URL が出力されます。
<?php /** * This sample supports the following use cases: * * 1. Retrieve reporting jobs by content owner: * Ex: php retrieve_reports.php --contentOwner=="CONTENT_OWNER_ID" * Ex: php retrieve_reports.php --contentOwner=="CONTENT_OWNER_ID" --includeSystemManaged==True * 2. Retrieving list of downloadable reports for a particular job: * Ex: php retrieve_reports.php --contentOwner=="CONTENT_OWNER_ID" --jobId="JOB_ID" * 3. Download a report: * Ex: php retrieve_reports.php --contentOwner=="CONTENT_OWNER_ID" --downloadUrl="DOWNLOAD_URL" --outputFile="report.txt" */ /** * Library Requirements * * 1. Install composer (https://getcomposer.org) * 2. On the command line, change to this directory (api-samples/php) * 3. Require the google/apiclient library * $ composer require google/apiclient:~2.0 */ if (!file_exists(__DIR__ . '/vendor/autoload.php')) { throw new \Exception('please run "composer require google/apiclient:~2.2.0" in "' . __DIR__ .'"'); } require_once __DIR__ . '/vendor/autoload.php'; session_start(); define('CREDENTIALS_PATH', '~/.credentials/youtube-php.json'); $longOptions = array( 'contentOwner::', 'downloadUrl::', 'includeSystemManaged::', 'jobId::', 'outputFile::', ); $options = getopt('', $longOptions); $CONTENT_OWNER_ID = ($options['contentOwner'] ? $options['contentOwner'] : ''); $DOWNLOAD_URL = (array_key_exists('downloadUrl', $options) ? $options['downloadUrl'] : ''); $INCLUDE_SYSTEM_MANAGED = (array_key_exists('includeSystemManaged', $options) ? $options['includeSystemManaged'] : ''); $JOB_ID = (array_key_exists('jobId', $options) ? $options['jobId'] : ''); $OUTPUT_FILE = (array_key_exists('outputFile', $options) ? $options['outputFile'] : ''); /* * You can obtain an OAuth 2.0 client ID and client secret from the * {{ Google Cloud Console }} <{{ https://cloud.google.com/console }}> * For more information about using OAuth 2.0 to access Google APIs, please see: * <https://developers.google.com/youtube/v3/guides/authentication> * Please ensure that you have enabled the YouTube Data API for your project. */ function getClient() { $client = new Google_Client(); $client->setAuthConfigFile('client_secrets_php.json'); $client->addScope( 'https://www.googleapis.com/auth/yt-analytics-monetary.readonly'); $client->setRedirectUri('urn:ietf:wg:oauth:2.0:oob'); $client->setAccessType('offline'); // Load previously authorized credentials from a file. $credentialsPath = expandHomeDirectory(CREDENTIALS_PATH); if (file_exists($credentialsPath)) { $accessToken = json_decode(file_get_contents($credentialsPath), true); } else { // Request authorization from the user. $authUrl = $client->createAuthUrl(); printf('Open the following link in your browser:\n%s\n', $authUrl); print 'Enter verification code: '; $authCode = trim(fgets(STDIN)); // Exchange authorization code for an access token. $accessToken = $client->authenticate($authCode); $refreshToken = $client->getRefreshToken(); // Store the credentials to disk. if(!file_exists(dirname($credentialsPath))) { mkdir(dirname($credentialsPath), 0700, true); } file_put_contents($credentialsPath, json_encode($accessToken)); printf('Credentials saved to %s\n', $credentialsPath); //fclose($fp); } $client->setAccessToken($accessToken); // Refresh the token if it's expired. if ($client->isAccessTokenExpired()) { $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken()); file_put_contents($credentialsPath, json_encode($client->getAccessToken())); } return $client; } /** * Expands the home directory alias '~' to the full path. * @param string $path the path to expand. * @return string the expanded path. */ function expandHomeDirectory($path) { $homeDirectory = getenv('HOME'); if (empty($homeDirectory)) { $homeDirectory = getenv('HOMEDRIVE') . getenv('HOMEPATH'); } return str_replace('~', realpath($homeDirectory), $path); } /** * Returns a list of reporting jobs. (jobs.listJobs) * * @param Google_Service_YouTubereporting $youtubeReporting YouTube Reporting service object. * @param string $onBehalfOfContentOwner A content owner ID. */ function listReportingJobs(Google_Service_YouTubeReporting $youtubeReporting, $onBehalfOfContentOwner = '', $includeSystemManaged = False) { $reportingJobs = $youtubeReporting->jobs->listJobs( array('onBehalfOfContentOwner' => $onBehalfOfContentOwner, 'includeSystemManaged' => $includeSystemManaged)); print ('REPORTING JOBS' . PHP_EOL . '**************' . PHP_EOL); foreach ($reportingJobs as $job) { print($job['reportTypeId'] . ':' . $job['id'] . PHP_EOL); } print(PHP_EOL); } /** * Lists reports created by a specific job. (reports.listJobsReports) * * @param Google_Service_YouTubereporting $youtubeReporting YouTube Reporting service object. * @param string $jobId The ID of the job. * @param string $onBehalfOfContentOwner A content owner ID. */ function listReportsForJob(Google_Service_YouTubeReporting $youtubeReporting, $jobId, $onBehalfOfContentOwner = '') { $reports = $youtubeReporting->jobs_reports->listJobsReports($jobId, array('onBehalfOfContentOwner' => $onBehalfOfContentOwner)); print ('DOWNLOADABLE REPORTS' . PHP_EOL . '********************' . PHP_EOL); foreach ($reports['reports'] as $report) { print('Created: ' . date('d M Y', strtotime($report['createTime'])) . ' (' . date('d M Y', strtotime($report['startTime'])) . ' to ' . date('d M Y', strtotime($report['endTime'])) . ')' . PHP_EOL . ' ' . $report['downloadUrl'] . PHP_EOL . PHP_EOL); } } /** * Download the report specified by the URL. (media.download) * * @param Google_Service_YouTubereporting $youtubeReporting YouTube Reporting service object. * @param string $reportUrl The URL of the report to be downloaded. * @param string $outputFile The file to write the report to locally. * @param $htmlBody - html body. */ function downloadReport(Google_Service_YouTubeReporting $youtubeReporting, $reportUrl, $outputFile) { $client = $youtubeReporting->getClient(); // Setting the defer flag to true tells the client to return a request that // can be called with ->execute(); instead of making the API call immediately. $client->setDefer(true); // Call YouTube Reporting API's media.download method to download a report. $request = $youtubeReporting->media->download('', array('alt' => 'media')); $request = $request->withUri(new \GuzzleHttp\Psr7\Uri($reportUrl)); $responseBody = ''; try { $response = $client->execute($request); $responseBody = $response->getBody(); } catch (Google_Service_Exception $e) { $responseBody = $e->getTrace()[0]['args'][0]->getResponseBody(); } file_put_contents($outputFile, $responseBody); $client->setDefer(false); } // Define an object that will be used to make all API requests. $client = getClient(); // YouTube Reporting object used to make YouTube Reporting API requests. $youtubeReporting = new Google_Service_YouTubeReporting($client); if ($CONTENT_OWNER_ID) { if (!$DOWNLOAD_URL && !$JOB_ID) { listReportingJobs($youtubeReporting, $CONTENT_OWNER_ID, $INCLUDE_SYSTEM_MANAGED); } else if ($JOB_ID) { listReportsForJob($youtubeReporting, $JOB_ID, $CONTENT_OWNER_ID); } else if ($DOWNLOAD_URL && $OUTPUT_FILE) { downloadReport($youtubeReporting, $DOWNLOAD_URL, $OUTPUT_FILE); } } ?>
Python
以下のサンプルでは、Python クライアント ライブラリを使用しています。
このサンプルは、特定のジョブによって作成されたレポートを取得する方法を示しています。jobs.list
メソッドを呼び出して、レポートジョブを取得します。次に、特定のジョブ ID を jobId
パラメータに設定して reports.list
メソッドを呼び出し、そのジョブによって作成されたレポートを取得します。最後に、各レポートのダウンロード URL が出力されます。
#!/usr/bin/python ### # # This script retrieves YouTube Reporting API reports. Use cases: # 1. If you specify a report URL, the script downloads that report. # 2. Otherwise, if you specify a job ID, the script retrieves a list of # available reports for that job and prompts you to select a report. # Then it retrieves that report as in case 1. # 3. Otherwise, the list retrieves a list of jobs for the user or, # if specified, the content owner that the user is acting on behalf of. # Then it prompts the user to select a job, and then executes case 2 and # then case 1. # Usage examples: # python retrieve_reports.py --content_owner_id=<CONTENT_OWNER_ID> --local_file=<LOCAL_FILE> # python retrieve_reports.py --content_owner_id=<CONTENT_OWNER_ID> --job_id=<JOB_ID> --local_file=<LOCAL_FILE> # python retrieve_reports.py --content_owner_id=<CONTENT_OWNER_ID> --report_url=<REPORT_URL> --local_file=<LOCAL_FILE> # ### import argparse import os import google.oauth2.credentials import google_auth_oauthlib.flow from googleapiclient.discovery import build from googleapiclient.errors import HttpError from googleapiclient.http import MediaIoBaseDownload from google_auth_oauthlib.flow import InstalledAppFlow from io import FileIO # The CLIENT_SECRETS_FILE variable specifies the name of a file that contains # the OAuth 2.0 information for this application, including its client_id and # client_secret. You can acquire an OAuth 2.0 client ID and client secret from # the {{ Google Cloud Console }} at # {{ https://cloud.google.com/console }}. # Please ensure that you have enabled the YouTube Data API for your project. # For more information about using OAuth2 to access the YouTube Data API, see: # https://developers.google.com/youtube/v3/guides/authentication # For more information about the client_secrets.json file format, see: # https://developers.google.com/api-client-library/python/guide/aaa_client_secrets CLIENT_SECRETS_FILE = 'client_secret.json' # This OAuth 2.0 access scope allows for read access to YouTube Analytics # monetary reports for the authenticated user's account. Any request that # retrieves earnings or ad performance metrics must use this scope. SCOPES = ['https://www.googleapis.com/auth/yt-analytics-monetary.readonly'] API_SERVICE_NAME = 'youtubereporting' API_VERSION = 'v1' # Authorize the request and store authorization credentials. def get_authenticated_service(): flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES) credentials = flow.run_console() return build(API_SERVICE_NAME, API_VERSION, credentials = credentials) # Remove keyword arguments that are not set. def remove_empty_kwargs(**kwargs): good_kwargs = {} if kwargs is not None: for key, value in kwargs.iteritems(): if value: good_kwargs[key] = value return good_kwargs # Call the YouTube Reporting API's jobs.list method to retrieve reporting jobs. def list_reporting_jobs(youtube_reporting, **kwargs): # Only include the onBehalfOfContentOwner keyword argument if the user # set a value for the --content_owner argument. kwargs = remove_empty_kwargs(**kwargs) # Retrieve the reporting jobs for the user (or content owner). results = youtube_reporting.jobs().list(**kwargs).execute() if 'jobs' in results and results['jobs']: jobs = results['jobs'] for job in jobs: print ('Reporting job id: %s\n name: %s\n for reporting type: %s\n' % (job['id'], job['name'], job['reportTypeId'])) else: print 'No jobs found' return False return True # Call the YouTube Reporting API's reports.list method to retrieve reports created by a job. def retrieve_reports(youtube_reporting, **kwargs): # Only include the onBehalfOfContentOwner keyword argument if the user # set a value for the --content_owner argument. kwargs = remove_empty_kwargs(**kwargs) # Retrieve available reports for the selected job. results = youtube_reporting.jobs().reports().list( **kwargs ).execute() if 'reports' in results and results['reports']: reports = results['reports'] for report in reports: print ('Report dates: %s to %s\n download URL: %s\n' % (report['startTime'], report['endTime'], report['downloadUrl'])) # Call the YouTube Reporting API's media.download method to download the report. def download_report(youtube_reporting, report_url, local_file): request = youtube_reporting.media().download( resourceName=' ' ) request.uri = report_url fh = FileIO(local_file, mode='wb') # Stream/download the report in a single request. downloader = MediaIoBaseDownload(fh, request, chunksize=-1) done = False while done is False: status, done = downloader.next_chunk() if status: print 'Download %d%%.' % int(status.progress() * 100) print 'Download Complete!' # Prompt the user to select a job and return the specified ID. def get_job_id_from_user(): job_id = raw_input('Please enter the job id for the report retrieval: ') print ('You chose "%s" as the job Id for the report retrieval.' % job_id) return job_id # Prompt the user to select a report URL and return the specified URL. def get_report_url_from_user(): report_url = raw_input('Please enter the report URL to download: ') print ('You chose "%s" to download.' % report_url) return report_url if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--content_owner', default='', help='ID of content owner for which you are retrieving jobs and reports') parser.add_argument('--job_id', default=None, help='ID of the job for which you are retrieving reports. If not ' + 'provided AND report_url is also not provided, then the script ' + 'calls jobs.list() to retrieve a list of jobs.') parser.add_argument('--report_url', default=None, help='URL of the report to retrieve. If not specified, the script ' + 'calls reports.list() to retrieve a list of reports for the ' + 'selected job.') parser.add_argument('--local_file', default='yt_report.txt', help='The name of the local file where the downloaded report will be written.') args = parser.parse_args() youtube_reporting = get_authenticated_service() try: # If the user has not specified a job ID or report URL, retrieve a list # of available jobs and prompt the user to select one. if not args.job_id and not args.report_url: if list_reporting_jobs(youtube_reporting, onBehalfOfContentOwner=args.content_owner): args.job_id = get_job_id_from_user() # If the user has not specified a report URL, retrieve a list of reports # available for the specified job and prompt the user to select one. if args.job_id and not args.report_url: retrieve_reports(youtube_reporting, jobId=args.job_id, onBehalfOfContentOwner=args.content_owner) args.report_url = get_report_url_from_user() # Download the selected report. if args.report_url: download_report(youtube_reporting, args.report_url, args.local_file) except HttpError, e: print 'An HTTP error %d occurred:\n%s' % (e.resp.status, e.content)