2017-01-23 6 views
0

私はYouTubeのPython API v3を使用して、oauth2認証ユーザーを新しいチャンネルに登録しています。 https://developers.google.com/youtube/v3/docs/subscriptions/insertからYouTubeのPython API v3 HttpError 400のサブスクリプション

def add_subscription(youtube, channel_id): 
    add_subscription_response = youtube.subscriptions().insert(
    part='id,snippet', 
    body=dict(
     snippet=dict(
     resourceId=dict(
      channelId=channel_id 
     ) 
    ) 
    )).execute() 

    return add_subscription_response["id"], add_subscription_response["snippet"]["title"] 


youtube = get_authenticated_service(args) 

try: 
    subscription_id,channel_title = add_subscription(youtube, args.channel_id) 
except HttpError, e: 
    print "An HTTP error %d occurred:\n%s" % (e.resp.status, e.content) 
else: 
    print "A subscription to '%s' was added." % channel_title 

それはと思われる(または多分、私はそれを理解...)、ユーザーがすでにchannel_idによって記述チャネルに登録されている場合、この関数はsubscriptionDuplicate用= 400e.resp.statusHttpErrorを上げる必要があります。

しかし、ユーザーが既に購読しているチャンネルを購読しようとすると、関数は通常subscription_idchannel_titleを返します。

HttpError 400を上げるべきではありませんか?

私が間違いをしていない場合、これは機能がうまくいかなければならない場合、認証されたユーザーがすでにchannel_idにサブスクライブしているかどうか確認するにはどうすればよいですか?subscriptions().insert()

私は、ユーザーが購読しているかどうかを確認するために、前subscriptions().list()呼び出すことができます。私もSubscriptions: insertリクエストを試してみましたし、そのチャネルで使用

def is_subscribed(youtube, channel_id): 
     is_subscription_response = youtube.subscriptions().list(
       part='id', 
       mine='true', 
       forChannelId=channel_id 
       ).execute() 
     if len(is_subscription_response["items"]) == 0: 
       return False 
     else: 
       return True 

しかし、これは、クォータの使用率を増加させる...

答えて

0

すでに購読していますが、エラーが発生していませんsubscriptionDuplicate。 APIがこのエラーを返さなかった理由はわかりません。

認証されたユーザーがすでにchannel_idに登録されているかどうかを確認する方法については、Subscriptions: listを使用して、購読しているすべてのチャンネルを確認してください。

ここにはsample requestがあります。ちょうどchannelIdを自分のchannelIdに置き換えてください。

https://www.googleapis.com/youtube/v3/subscriptions?part=snippet&channelId=YOUR_CHANNEL_ID&key={YOUR_API_KEY} 
+0

@KENDdiありがとうございます、私は知っています(今はサブスクリプションをチェックする機能を含むように編集しました)が、これによりクォータの使用量が増えます。おそらく、これは 'subscriptions()のAPIバグです。insert()' ... –

+0

私はそれについて何か手がかりを見つけたら、後でいくつかのテストを行います。 – KENdi

+0

あなたはこの問題を提出していますか?「https://code.google.com/p/gdata-issues/issues/detail?id=8935&q=subscriptionDuplicate&colspec=API%20ID%20Type%20Status%20Priority%20Stars%20Summary」私はすでにこの問題に投票しています。 – KENdi

関連する問題