2016-05-30 16 views
1

私のサブスクリプションを一覧表示しようと、「フィルタなし選択された」エラーをスローしません以下のソースコード:YouTubeのAPI v3は私が<code>Await listRequest.ExecuteAsync()</code>を呼び出すときしかし、私はこのエラーメッセージと例外を取得しています、私のすべての<strong><a href="https://www.youtube.com/subscription_manager" rel="nofollow noreferrer">subscriptions</a></strong>を含むリストを取得しようとしている

Google.Apis.Requests.RequestError選択フィルタなし。次のいずれかが必要です。 mySubscribers、id、mine、myRecentSubscribers、channelId [400]エ​​ラー[ メッセージ[フィルターが選択されていません。いずれかの予想:mySubscribers、ID、鉱山、 myRecentSubscribers、channelId]場所[ - パラメータ] 理由[missingRequiredParameter]ドメイン[youtube.parameter]]

私はこれを読んで、私はでそれを理解していませんすべて:

公式参照:


私は私のサブスクリプションを一覧表示しようとする "snippet" リストセレクタを使用していYouTubeService.Scope.Youtubeスコープ(https://www.googleapis.com/auth/youtube

を使用していて、私はとも試してみました"id,snippet,contentDetails"が参加しました。

そして私が認証するために使用している自動生成たclient_secrets.jsonファイルには、このコンテンツを持っている:

{ 
    "installed":{ 
     "client_id":"xxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com", 
     "project_id":"xxxxxxxxxxxxxxxxxxx", 
     "auth_uri":"https://accounts.google.com/o/oauth2/auth", 
     "token_uri":"https://accounts.google.com/o/oauth2/token", 
     "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs", 
     "client_secret":"xxxxxxxxxxxxxxxxx", 
     "redirect_uris":[ 
     "urn:ietf:wg:oauth:2.0:oob", 
     "http://localhost" 
     ] 
    } 
} 

私は上記提供された情報と間違って何かをやっている?と、どのように私はこの問題を解決することができますか?ここで

は、関連するソース・コードです:

注私はTrueにプロパティlistRequest.Mineを設定した場合、それが例外をスローしませんが、それはゼロのサブスクリプションを見つけました。

C#(オンライン翻訳):

public Task<List<Subscription>> GetSubscriptions(SubscriptionsResource.ListRequest.OrderEnum resultSorting) 
{ 

    if (!(this.isAuthorizedB)) { 
     throw new InvalidOperationException(this.authExceptionMessage); 

    } else { 
     SubscriptionsResource.ListRequest listRequest = Await this.client.Subscriptions.List("snippet"); 
     // listRequest.MySubscribers = False 
     // listRequest.Mine = False 
     listRequest.MaxResults = 50; 
     listRequest.Order = resultSorting; 

     SubscriptionListResponse searchResponse = Await listRequest.ExecuteAsync(); 

     List<Subscription> subscriptions = new List<Subscription>(); 

     while (true) { 
     foreach (Subscription searchResult in searchResponse.Items) { 
      subscriptions.Add(searchResult); 
     } 

     if (!string.IsNullOrEmpty(searchResponse.NextPageToken)) { 
      listRequest.PageToken = searchResponse.NextPageToken; 
      searchResponse = listRequest.ExecuteAsync(); 
     } else { 
      break; // TODO: might not be correct. Was : Exit Do 
     } 

     } 

     return subscriptions; 

    } 

} 

VB.NET(オリジナル):

Public Async Function GetSubscriptions(ByVal resultSorting As SubscriptionsResource.ListRequest.OrderEnum) As Task(Of List(Of Subscription)) 

    If Not (Me.isAuthorizedB) Then 
     Throw New InvalidOperationException(Me.authExceptionMessage) 

    Else 
     Dim listRequest As SubscriptionsResource.ListRequest = Me.client.Subscriptions.List("snippet") 
     With listRequest 
      ' .MySubscribers = False 
      ' .Mine = False 
      .MaxResults = 50 
      .Order = resultSorting 
     End With 

     Dim searchResponse As SubscriptionListResponse = Await listRequest.ExecuteAsync() 

     Dim subscriptions As New List(Of Subscription) 
     Do While True 

      For Each searchResult As Subscription In searchResponse.Items 
       subscriptions.Add(searchResult) 
      Next searchResult 

      If Not String.IsNullOrEmpty(searchResponse.NextPageToken) Then 
       listRequest.PageToken = searchResponse.NextPageToken 
       searchResponse = Await listRequest.ExecuteAsync() 
      Else 
       Exit Do 
      End If 

     Loop 

     Return subscriptions 

    End If 

End Function 
+0

コードは正常です。 Googleアカウントに複数のYouTubeアカウントが添付されている可能性があります。あなたが認証すると、それがポップアップし、YouTubeアカウントを選ぶように頼みます。あなたは正しいものを選んだのですか? – DaImTo

+0

channelId、id、mineまたはmySubscriptionsのいずれかをフィルタとして送信する必要があります。そのうちの1つを選択すると、No filter selectedエラーが表示されます。 – DaImTo

+0

@DaImToコメントありがとうございました。私は2つの異なるGoogleアカウントを持っていますが、Youtubeはこれらのアカウントを2つの異なるアカウント(「接続されていません」)として認識し、メインの記録アカウントと「その他のアカウント:... XXX」を表示します。実際には 'GoogleWebAuthorizationBroker.AuthorizeAsync()'メソッドは認証ポップアップを表示していません。そのメソッドには、サブスクリプションを取得したいアカウントの電子メールを渡します。一度認証され、もうポップアップは表示されません。アップロードした動画のリストを表示しようとしているときにも同じ問題が発生します。 – ElektroStudios

答えて

2

オクラホマコメントをlongになって。注:YouTube APIは、他のGoogle APIとは異なり、理解するのはちょっと変わっている可能性があります。あなたのコードは、認証部

UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets { ClientId = clientId, ClientSecret = clientSecret } 
                          , scopes 
                          , userName 
                          , CancellationToken.None 
                          , new FileDataStore("Daimto.YouTube.Auth.Store")).Result; 

を実行すると

それがポップアップし、あなたのアカウントへのアクセスを要求します。そして、それはあなたがそれだけであなたが選択したYouTubeアカウントについての結果を示すために起こっている

SubscriptionsResource.ListRequest listRequest = Await this.client.Subscriptions.List("snippet");   
     listRequest.Mine = true 
     listRequest.MaxResults = 50; 
     listRequest.Order = resultSorting; 

     SubscriptionListResponse searchResponse = Await listRequest.ExecuteAsync(); 

あなたのリストを実行すると、どのYouTubeのアカウント

enter image description here

お願いします。まず、正しいGoogleアカウントと正しいYouTubeアカウントで確実に認証する必要があります。現在選択しているアカウントには定期購入はありません。

電子メールを渡す各アカウントで認証する必要があります。あなたはあなたの認証コードを投稿していませんが、私のコードでは "userName"だけを変更して、別のユーザーへのアクセスを要求します。その文字列は、今までにさまざまなユーザーを識別したいものを送信することができます。文字列を変更しないと、FileDatastoreには既にユーザーがいて、それを知っているので、再度アクセスする必要はありません。私のチュートリアルのfiledatastore Google .net FileDatastore Demystified。だからそれを変更し、再びアクセスをリクエストします:)

私はしばらくのうちにそれを再生していないが、それは助けるかもしれないYouTubeのサンプルプロジェクトがあります。 Google-dotnet-samples YouTube github

+1

Googleのサーバー側やデータストアフォルダに何か問題があったようですが、私はこれを見て終了しました。http://stackoverflow.com/questions/16970917/why-is-google-calendar-api-oauth2-responding-with-不十分なパーミッション私は、許可された回答が示唆されているように、私のアプリの許可を取り消してから、私のアプリをもう一度認証し、すべての作品が完璧で、私は変更なしで同じコードを使用しています。再度、感謝します! – ElektroStudios

関連する問題

 関連する問題