API リクエストで指定されたクエリ パラメータに一致する検索結果のコレクションを返します。デフォルトでは、検索結果セットは一致する video、channel、playlist リソースを識別しますが、特定の種類のリソースのみを取得するようにクエリを構成することもできます。
割り当てへの影響: 1 日あたり 100 回の呼び出し。このメソッドの呼び出しには、検索クエリの割り当てバケットで 1 ユニットの割り当て費用がかかります。
一般的なユースケース
リクエスト
HTTP リクエスト
GET https://www.googleapis.com/youtube/v3/search
パラメータ
次の表に、このクエリでサポートされているパラメータを示します。このリストのパラメータはすべてクエリ パラメータです。
| パラメータ | ||
|---|---|---|
| 必須パラメータ | ||
part |
stringpart パラメータには、API レスポンスに含める 1 つ以上の search リソース プロパティをカンマ区切りのリストで指定します。パラメータ値を snippet に設定します。 |
|
| フィルタ(次のパラメータのうち 0 または 1 を指定) | ||
forContentOwner |
booleanこのパラメータは、適切に承認されたリクエストでのみ使用でき、YouTube コンテンツ パートナー専用です。 forContentOwner パラメータは、検索を onBehalfOfContentOwner パラメータで指定されたコンテンツ所有者が所有する動画の取得のみに制限します。forContentOwner が true に設定されている場合、リクエストは次の要件も満たしている必要があります。
|
|
forDeveloper |
booleanこのパラメータは、適切に承認されたリクエストでのみ使用できます。 forDeveloper パラメータは、デベロッパーのアプリケーションまたはウェブサイトからアップロードされた動画のみを取得するように検索を制限します。API サーバーは、リクエストの認証情報を使用してデベロッパーを識別します。forDeveloper パラメータは、q パラメータなどのオプションの検索パラメータと組み合わせて使用できます。この機能では、アップロードされた各動画に、Google Developers Console のデベロッパーのアプリケーションに関連付けられているプロジェクト番号が自動的にタグ付けされます。 その後、検索リクエストで forDeveloper パラメータが true に設定されると、API サーバーはリクエストの認証情報を使用してデベロッパーを識別します。そのため、デベロッパーは、検索結果をデベロッパー自身のアプリやウェブサイトからアップロードされた動画に制限することはできますが、他のアプリやサイトからアップロードされた動画に制限することはできません。 |
|
forMine |
booleanこのパラメータは、適切に承認されたリクエストでのみ使用できます。 forMine パラメータは、認証済みユーザーが所有する動画のみを取得するように検索を制限します。このパラメータを true に設定する場合は、type パラメータの値も video に設定する必要があります。また、同じリクエストで次のパラメータを設定することはできません。videoDefinition、videoDimension、videoDuration、videoEmbeddable、videoLicense、videoPaidProductPlacement、videoSyndicated、videoType。 |
|
| オプション パラメータ | ||
channelId |
stringchannelId パラメータは、API レスポンスにチャンネルによって作成されたリソースのみを含めることを示します。注: リクエストで channelId パラメータの値を指定し、type パラメータの値を video に設定しているが、forContentOwner、forDeveloper、forMine のいずれのフィルタも設定していない場合、検索結果は最大 500 本の動画に制限されます。 |
|
channelType |
stringchannelType パラメータを使用すると、検索を特定のタイプのチャンネルに制限できます。使用できる値は次のとおりです。
|
|
eventType |
stringeventType パラメータは、検索をブロードキャスト イベントに制限します。このパラメータの値を指定する場合は、type パラメータの値も video に設定する必要があります。使用できる値は次のとおりです。
|
|
location |
stringlocation パラメータは、locationRadius パラメータと組み合わせて、円形の地理的エリアを定義します。また、メタデータでそのエリア内の地理的位置を指定している動画に検索を制限します。パラメータ値は、緯度と経度の座標を指定する文字列です(例: 37.42307,-122.08427)。
location パラメータの値を指定しているにもかかわらず、locationRadius パラメータの値も指定していない場合、API はエラーを返します。注: このパラメータの値を指定する場合は、 type パラメータの値も video に設定する必要があります。
| |
locationRadius |
stringlocationRadius パラメータは、location パラメータと組み合わせて、円形の地理的エリアを定義します。パラメータ値は、浮動小数点数と測定単位で指定する必要があります。有効な測定単位は m、km、ft、mi です。たとえば、有効なパラメータ値には 1500m、5km、10000ft、0.75mi などがあります。この API は、1,000 km を超える locationRadius パラメータ値をサポートしていません。注: 詳しくは、 location パラメータの定義をご覧ください。 |
|
maxResults |
unsigned integermaxResults パラメータは、結果セットで返されるアイテムの最大数を指定します。有効な値は 0 から 50 です。デフォルト値は 5 です。 |
|
onBehalfOfContentOwner |
stringこのパラメータは、適切に承認されたリクエストでのみ使用できます。注: このパラメータは、YouTube コンテンツ パートナー専用です。 onBehalfOfContentOwner パラメータは、リクエストの認証情報が、パラメータ値で指定されたコンテンツ所有者の代理として行動している YouTube CMS ユーザーを識別することを示します。このパラメータは、複数の YouTube チャンネルを所有、管理している YouTube コンテンツ パートナーを対象にしています。このパラメータを使用すると、コンテンツ所有者は一度認証されれば、すべての動画やチャンネル データにアクセスできるようになります。チャンネルごとに認証情報を指定する必要はありません。ユーザー認証に使用する CMS アカウントは、指定された YouTube コンテンツ所有者にリンクされていなければなりません。 |
|
order |
stringorder パラメータは、API レスポンスでリソースを並べ替えるために使用されるメソッドを指定します。デフォルト値は relevance です。指定できる値は次のとおりです。
|
|
pageToken |
stringpageToken パラメータは、返される結果セット内の特定のページを識別します。API レスポンスでは、nextPageToken プロパティと prevPageToken プロパティによって、取得可能な他のページが識別されます。 |
|
publishedAfter |
datetimepublishedAfter パラメータは、API レスポンスに、指定された時刻以降に作成されたリソースのみを含める必要があることを示します。この値は RFC 3339 形式の date-time 値です(1970-01-01T00:00:00Z)。 |
|
publishedBefore |
datetimepublishedBefore パラメータは、API レスポンスに指定した時刻以前に作成されたリソースのみを含める必要があることを示します。この値は RFC 3339 形式の date-time 値です(1970-01-01T00:00:00Z)。 |
|
q |
stringq パラメータは、検索するクエリ用語を指定します。リクエストでは、ブール演算子の NOT( -)と OR(|)を使用して、動画を除外したり、複数の検索語句のいずれかに関連付けられている動画を検索したりすることもできます。たとえば、「ボート」または「セーリング」に一致する動画を検索するには、q パラメータ値を boating|sailing に設定します。同様に、「boating」または「sailing」のいずれかに一致するが「fishing」には一致しない動画を検索するには、q パラメータ値を boating|sailing -fishing に設定します。API リクエストで送信する場合、パイプ文字は URL エスケープする必要があります。パイプ文字の URL エスケープ値は %7C です。 |
|
regionCode |
stringregionCode パラメータは、指定した国で視聴できる動画の検索結果を返すよう API に指示します。パラメータ値は ISO 3166-1 alpha-2 形式の国コードです。 |
|
relevanceLanguage |
stringrelevanceLanguage パラメータは、指定された言語に最も関連性の高い検索結果を返すように API に指示します。パラメータ値は通常、ISO 639-1 の 2 文字の言語コードです。ただし、簡体字中国語には zh-Hans、繁体字中国語には zh-Hant の値を使用する必要があります。なお、検索クエリの語句との関連性が高い場合は、他の言語の検索結果も返されます。 |
|
safeSearch |
stringsafeSearch パラメータは、検索結果に制限されているコンテンツと標準コンテンツの両方を含めるかどうかを示します。使用できる値は次のとおりです。
|
|
topicId |
stringtopicId パラメータは、指定されたトピックに関連付けられたリソースのみを API レスポンスに含めることを示します。この値は Freebase トピック ID を識別します。重要: Freebase と Freebase API のサポート終了に伴い、2017 年 2 月 27 日より topicId パラメータの動作が変更されました。その時点で、YouTube は厳選されたトピック ID の一部のサポートを開始しました。このパラメータの値として使用できるのは、その一部の ID のみです。 |
|
type |
stringtype パラメータは、特定のタイプのリソースのみを取得するように検索クエリを制限します。値はカンマで区切られたリソースのタイプのリストです。デフォルト値は video,channel,playlist です。指定できる値は次のとおりです。
|
|
videoCaption |
stringvideoCaption パラメータは、API がキャプションの有無に基づいて動画検索結果をフィルタするかどうかを示します。このパラメータの値を指定する場合は、type パラメータの値も video に設定する必要があります。指定できる値は次のとおりです。
|
|
videoCategoryId |
stringvideoCategoryId パラメータは、カテゴリに基づいて動画の検索結果をフィルタします。このパラメータの値を指定する場合は、type パラメータの値も video に設定する必要があります。 |
|
videoDefinition |
stringvideoDefinition パラメータを使用すると、検索を HD(高画質)または SD(標準画質)の動画のみに制限できます。HD 動画は少なくとも 720p で再生できますが、1080p などのより高い解像度で再生できる場合もあります。このパラメータの値を指定する場合は、type パラメータの値も video に設定する必要があります。有効な値は次のとおりです。
|
|
videoDimension |
stringvideoDimension パラメータを使用すると、2D 動画または 3D 動画のみを取得するように検索を制限できます。このパラメータの値を指定する場合は、type パラメータの値も video に設定する必要があります。指定できる値は次のとおりです。
|
|
videoDuration |
stringvideoDuration パラメータは、動画の再生時間に基づいて動画の検索結果をフィルタします。このパラメータの値を指定する場合は、type パラメータの値も video に設定する必要があります。指定できる値は次のとおりです。
|
|
videoEmbeddable |
stringvideoEmbeddable パラメータを使用すると、ウェブページに埋め込み可能な動画のみを検索できます。このパラメータの値を指定する場合は、type パラメータの値も video に設定する必要があります。指定できる値は次のとおりです。
|
|
videoLicense |
stringvideoLicense パラメータは、特定のライセンスを持つ動画のみが含まれるように検索結果をフィルタします。YouTube では、動画のアップロード時に、クリエイティブ・コモンズ ライセンスまたは標準の YouTube ライセンスのいずれかを各動画に設定できます。このパラメータの値を指定する場合は、type パラメータの値も video に設定する必要があります。使用できる値は次のとおりです。
|
|
videoPaidProductPlacement |
stringvideoPaidProductPlacement パラメータは、検索結果をフィルタして、クリエイターが有料プロモーションを含むと指定した動画のみを含めます。このパラメータの値を指定する場合は、type パラメータの値も video に設定する必要があります。有効な値は次のとおりです。
|
|
videoSyndicated |
stringvideoSyndicated パラメータを使用すると、youtube.com 以外で再生できる動画のみに検索を制限できます。このパラメータの値を指定する場合は、type パラメータの値も video に設定する必要があります。使用できる値は次のとおりです。
|
|
videoType |
stringvideoType パラメータを使用すると、検索を特定の種類の動画に制限できます。このパラメータの値を指定する場合は、type パラメータの値も video に設定する必要があります。指定できる値は次のとおりです。
|
|
リクエストの本文
このメソッドを呼び出す場合は、リクエストの本文を指定しないでください。
Response
成功すると、このメソッドは次の構造を含むレスポンスの本文を返します。
{
"kind": "youtube#searchListResponse",
"etag": etag,
"nextPageToken": string,
"prevPageToken": string,
"regionCode": string,
"pageInfo": {
"totalResults": integer,
"resultsPerPage": integer
},
"items": [
search Resource
]
}プロパティ
次の表は、検索結果で使用されているプロパティの定義を示したものです。
| プロパティ | |
|---|---|
kind |
stringAPI リソースのタイプを識別します。値は youtube#searchListResponse になります。 |
etag |
etagこのリソースの Etag。 |
nextPageToken |
string結果セットの次のページを取得するために pageToken パラメータの値として使用できるトークン。 |
prevPageToken |
string結果セットの前のページを取得するために pageToken パラメータの値として使用できるトークン。 |
regionCode |
string検索クエリに使用された地域コード。プロパティ値は、地域を識別する 2 文字の ISO 国コードです。 i18nRegions.list メソッドは、サポート対象の地域のリストを返します。デフォルト値は US です。サポートされていない地域が指定されている場合、YouTube はデフォルト値ではなく、別の地域を選択してクエリを処理することがあります。 |
pageInfo |
objectpageInfo オブジェクトは、結果セットのページング情報をカプセル化します。 |
pageInfo.totalResults |
integer結果セット内の結果の総数。この値は概算値であり、正確な値ではない可能性があります。また、最大値は 1,000,000 です。 この値をページネーション リンクの作成に使用しないでください。代わりに、 nextPageToken プロパティと prevPageToken プロパティの値を使用して、ページ分けリンクを表示するかどうかを判断します。 |
pageInfo.resultsPerPage |
integerAPI レスポンスに含まれる結果の数です。 |
items[] |
list検索条件に一致する結果のリスト。 |
例
注: 次のコードサンプルは、サポートされているプログラミング言語すべてを表しているわけではありません。サポートされている言語の一覧については、クライアント ライブラリのドキュメントをご覧ください。
Apps Script
この関数は、キーワード「dogs」に関連する動画を検索します。検索結果の動画 ID とタイトルが Apps Script のログに記録されます。このサンプルでは、結果を 25 件に制限しています。より多くの結果を返すには、こちら(https://developers.google.com/youtube/data/reference/rest/v3/search/list)に記載されている追加のパラメータを渡します。
function searchByKeyword() { var results = YouTube.Search.list('id,snippet', {q: 'dogs', maxResults: 25}); for(var i in results.items) { var item = results.items[i]; Logger.log('[%s] Title: %s', item.id.videoId, item.snippet.title); } }
Go
このコードサンプルは、API のsearch.list メソッドを呼び出して、特定のキーワードに関連付けられた検索結果を取得します。この例では、Go クライアント ライブラリを使用します。
package main import ( "flag" "fmt" "log" "net/http" "google.golang.org/api/googleapi/transport" "google.golang.org/api/youtube/v3" ) var ( query = flag.String("query", "Google", "Search term") maxResults = flag.Int64("max-results", 25, "Max YouTube results") ) const developerKey = "YOUR DEVELOPER KEY" func main() { flag.Parse() client := &http.Client{ Transport: &transport.APIKey{Key: developerKey}, } service, err := youtube.New(client) if err != nil { log.Fatalf("Error creating new YouTube client: %v", err) } // Make the API call to YouTube. call := service.Search.List("id,snippet"). Q(*query). MaxResults(*maxResults) response, err := call.Do() handleError(err, "") // Group video, channel, and playlist results in separate lists. videos := make(map[string]string) channels := make(map[string]string) playlists := make(map[string]string) // Iterate through each item and add it to the correct list. for _, item := range response.Items { switch item.Id.Kind { case "youtube#video": videos[item.Id.VideoId] = item.Snippet.Title case "youtube#channel": channels[item.Id.ChannelId] = item.Snippet.Title case "youtube#playlist": playlists[item.Id.PlaylistId] = item.Snippet.Title } } printIDs("Videos", videos) printIDs("Channels", channels) printIDs("Playlists", playlists) } // Print the ID and title of each result in a list as well as a name that // identifies the list. For example, print the word section name "Videos" // above a list of video search results, followed by the video ID and title // of each matching video. func printIDs(sectionName string, matches map[string]string) { fmt.Printf("%v:\n", sectionName) for id, title := range matches { fmt.Printf("[%v] %v\n", id, title) } fmt.Printf("\n\n") }
.NET
次のコードサンプルは、API のsearch.list メソッドを呼び出して、特定のキーワードに関連付けられた検索結果を取得します。この例では、.NET クライアント ライブラリを使用しています。
using System; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Threading; using System.Threading.Tasks; using Google.Apis.Auth.OAuth2; using Google.Apis.Services; using Google.Apis.Upload; using Google.Apis.Util.Store; using Google.Apis.YouTube.v3; using Google.Apis.YouTube.v3.Data; namespace Google.Apis.YouTube.Samples { /// <summary> /// YouTube Data API v3 sample: search by keyword. /// Relies on the Google APIs Client Library for .NET, v1.7.0 or higher. /// See https://developers.google.com/api-client-library/dotnet/get_started /// /// Set ApiKey to the API key value from the APIs & auth > Registered apps tab of /// https://cloud.google.com/console /// Please ensure that you have enabled the YouTube Data API for your project. /// </summary> internal class Search { [STAThread] static void Main(string[] args) { Console.WriteLine("YouTube Data API: Search"); Console.WriteLine("========================"); try { new Search().Run().Wait(); } catch (AggregateException ex) { foreach (var e in ex.InnerExceptions) { Console.WriteLine("Error: " + e.Message); } } Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } private async Task Run() { var youtubeService = new YouTubeService(new BaseClientService.Initializer() { ApiKey = "REPLACE_ME", ApplicationName = this.GetType().ToString() }); var searchListRequest = youtubeService.Search.List("snippet"); searchListRequest.Q = "Google"; // Replace with your search term. searchListRequest.MaxResults = 50; // Call the search.list method to retrieve results matching the specified query term. var searchListResponse = await searchListRequest.ExecuteAsync(); List<string> videos = new List<string>(); List<string> channels = new List<string>(); List<string> playlists = new List<string>(); // Add each result to the appropriate list, and then display the lists of // matching videos, channels, and playlists. foreach (var searchResult in searchListResponse.Items) { switch (searchResult.Id.Kind) { case "youtube#video": videos.Add(String.Format("{0} ({1})", searchResult.Snippet.Title, searchResult.Id.VideoId)); break; case "youtube#channel": channels.Add(String.Format("{0} ({1})", searchResult.Snippet.Title, searchResult.Id.ChannelId)); break; case "youtube#playlist": playlists.Add(String.Format("{0} ({1})", searchResult.Snippet.Title, searchResult.Id.PlaylistId)); break; } } Console.WriteLine(String.Format("Videos:\n{0}\n", string.Join("\n", videos))); Console.WriteLine(String.Format("Channels:\n{0}\n", string.Join("\n", channels))); Console.WriteLine(String.Format("Playlists:\n{0}\n", string.Join("\n", playlists))); } } }
Ruby
このサンプルでは、API のsearch.list メソッドを呼び出して、特定のキーワードに関連付けられた検索結果を取得します。
この例では、Ruby クライアント ライブラリを使用しています。
#!/usr/bin/ruby require 'rubygems' gem 'google-api-client', '>0.7' require 'google/api_client' require 'trollop' # Set DEVELOPER_KEY to the API key value from the APIs & auth > Credentials # tab of # {{ Google Cloud Console }} <{{ https://cloud.google.com/console }}> # Please ensure that you have enabled the YouTube Data API for your project. DEVELOPER_KEY = 'REPLACE_ME' YOUTUBE_API_SERVICE_NAME = 'youtube' YOUTUBE_API_VERSION = 'v3' def get_service client = Google::APIClient.new( :key => DEVELOPER_KEY, :authorization => nil, :application_name => $PROGRAM_NAME, :application_version => '1.0.0' ) youtube = client.discovered_api(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION) return client, youtube end def main opts = Trollop::options do opt :q, 'Search term', :type => String, :default => 'Google' opt :max_results, 'Max results', :type => :int, :default => 25 end client, youtube = get_service begin # Call the search.list method to retrieve results matching the specified # query term. search_response = client.execute!( :api_method => youtube.search.list, :parameters => { :part => 'snippet', :q => opts[:q], :maxResults => opts[:max_results] } ) videos = [] channels = [] playlists = [] # Add each result to the appropriate list, and then display the lists of # matching videos, channels, and playlists. search_response.data.items.each do |search_result| case search_result.id.kind when 'youtube#video' videos << "#{search_result.snippet.title} (#{search_result.id.videoId})" when 'youtube#channel' channels << "#{search_result.snippet.title} (#{search_result.id.channelId})" when 'youtube#playlist' playlists << "#{search_result.snippet.title} (#{search_result.id.playlistId})" end end puts "Videos:\n", videos, "\n" puts "Channels:\n", channels, "\n" puts "Playlists:\n", playlists, "\n" rescue Google::APIClient::TransmissionError => e puts e.result.body end end main
エラー
次の表に、このメソッドの呼び出しに応じて API が返す可能性のあるエラー メッセージを示します。詳細については、エラー メッセージのドキュメントを参照してください。
| エラーのタイプ | エラーの詳細 | 説明 |
|---|---|---|
badRequest (400) |
invalidChannelId |
channelId パラメータで無効なチャンネル ID が指定されています。 |
badRequest (400) |
invalidLocation |
location パラメータ値または locationRadius パラメータ値の形式が正しくありません。 |
badRequest (400) |
invalidRelevanceLanguage |
relevanceLanguage パラメータの値の形式が正しくありません。 |
badRequest (400) |
invalidSearchFilter |
リクエストに、検索フィルタや制限の無効な組み合わせが含まれています。forContentOwner パラメータまたは forMine パラメータを true に設定する場合は、type パラメータを video に設定する必要があります。eventType、videoCaption、videoCategoryId、videoDefinition、videoDimension、videoDuration、videoEmbeddable、videoLicense、videoSyndicated、videoType パラメータの値を設定する場合は、type パラメータも video に設定する必要があります。 |
試してみよう:
APIs Explorer を使用してこの API を呼び出し、API リクエストとレスポンスを確認します。