5

Blogger REST API (v3.0) に DELETE リクエストを送信し、 delete メソッドを使用して投稿を削除しようとしています。このために、次のコードを使用します。

api_uri = 'https://www.googleapis.com/blogger/v3/blogs/%s/posts/%s' % (blogId, postId)
result = urlfetch.fetch(url=api_uri,
                  method=urlfetch.DELETE,
                  headers={'Authorization' : oauth_token})

self.response.out.write(result.content)

しかし、サーバーは次を返します。

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "notFound",
    "message": "Not Found"
   }
  ],
  "code": 404,
  "message": "Not Found"
 }
}

ただし、次のコードを使用して、この投稿に関する情報を取得できます。

api_uri = 'https://www.googleapis.com/blogger/v3/blogs/%s/posts/%s' % (blogId, postId)
result = urlfetch.fetch(url=api_uri,
                  headers={'Authorization' : oauth_token})
self.response.out.write(result.content)

現時点では、何が間違っているのか理解できません — リクエストは承認されており、blogIdpostIdは正しい — とにかく、サーバーは「見つかりません」というエラーを返します。

この問題を解決する方法を知っている場合、または役立つアドバイスを提供できる場合は、助けてください。
この度はご検討いただきありがとうございました。


UPD 1:次の URL にリクエストを送信した場合:

# https://www.googleapis.com/blogger/v3/users/{userID}
# https://www.googleapis.com/blogger/v3/users/self

サーバーは以下も返します。

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "notFound",
    "message": "Not Found"
   }
  ],
  "code": 404,
  "message": "Not Found"
 }
}


UPD 2: Server to Server Applications に OAuth 2.0 を使用していることを忘れていました。したがって、認証トークンを取得するにhttps://accounts.google.com/o/oauth2/tokenは、次の JWT クレーム セットを使用してリクエストを送信します。

jwt_claim_set = {
   'iss' : '{id}@developer.gserviceaccount.com',
   'scope' : 'https://www.googleapis.com/auth/blogger',
   'aud' : 'https://accounts.google.com/o/oauth2/token',
   'exp' : expire,
   'iat' : timestamp
}

サーバーは以下を返します。

{
  "access_token" : "1/8xbJqaOZXSUZbHLl5EOtu1pxz3fmmetKx9W8CV4t79M",
  "token_type" : "Bearer",
  "expires_in" : 3600
}

oauth_tokenそして、次を使用してvariable を定義します。

data = simplejson.loads(result.content)
oauth_token = data['token_type'] + ' ' + data['access_token']
4

1 に答える 1

4

OAuth2 を正しく使用していますか? 適切にログインしていないように思われます。そのため、これらのエラーが発生しています。

Google OAuh2 Playground (https://code.google.com/oauthplayground/) を使用して同じクエリを試し、何が起こるかを確認してください。

于 2012-08-01T14:17:54.940 に答える