2012-07-28 24 views
5

Gửi yêu cầu DELETE tới API REST của Blogger (v3.0), tôi đang cố gắng xóa bài đăng bằng cách sử dụng delete method. Đối với điều này tôi sử dụng đoạn mã sau:Cố gắng xóa bài đăng bằng cách sử dụng API Blogger trả về lỗi "không tìm thấy"

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) 

Nhưng trở về server:

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

Tuy nhiên, tôi có thể lấy thông tin về bài viết này, bằng cách sử dụng đoạn mã sau:

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) 

Tại thời điểm này, tôi không thể hiểu những gì tôi đang làm sai - yêu cầu được ủy quyền, các blogIdpostId là chính xác - nhưng dù sao, máy chủ trả về "không tìm thấy "lỗi.

Nếu bạn biết cách giải quyết vấn đề này hoặc bạn có thể đưa ra lời khuyên hữu ích - hãy giúp tôi.
Cảm ơn bạn đã dành thời gian và cân nhắc vấn đề này.


UPD 1: Nếu tôi gửi yêu cầu đến các URL sau:

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

Các máy chủ cũng trả về:

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


UPD 2: Tôi quên nói tôi đang sử dụng OAuth 2.0 for Server to Server Applications. Vì vậy, để có sự cho phép thẻ, tôi gửi yêu cầu tới https://accounts.google.com/o/oauth2/token sử dụng JWT yêu cầu bồi thường Set sau:

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 
} 

Lợi nhuận server:

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

Và xác định biến oauth_token, sử dụng:

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

Xem xét bạn có thể đã kiểm tra ID và mã thông báo xác thực, tôi khuyên bạn nên kiểm tra truy vấn của mình theo cách thủ công với [cURL] (http://en.wikipedia.org/wiki/CURL). Tùy thuộc vào kết quả, bạn sẽ biết nếu vấn đề là làm thế nào bạn xây dựng bạn url, hoặc cái gì khác ... –

+0

@AlexisHuet, Cảm ơn bạn đã gợi ý, nhưng dù sao, tôi chắc chắn rằng vấn đề không phải là trong URL. Chắc chắn, vấn đề là "cái gì khác". – B7ackAnge7z

+0

Bạn đã thử nó với 'yêu cầu', để xem vấn đề có nằm trong module bạn sử dụng không? –

Trả lời

4

Bạn có chắc chắn rằng bạn đang sử dụng OAuth2 đúng cách không? Dường như với tôi rằng bạn không đăng nhập đúng cách và đó là lý do tại sao bạn nhận được các lỗi đó.

Hãy thử các truy vấn tương tự đó bằng cách sử dụng Google OAuh2 Playground (https://code.google.com/oauthplayground/) và xem điều gì sẽ xảy ra.

+0

Cảm ơn bạn đã gửi thư, nhưng như tôi đã nói, tôi đang cố gắng sử dụng OAuth 2.0 cho ứng dụng Máy chủ đến Máy chủ. Tại thời điểm này, OAuth 2.0 Playground không hỗ trợ phương thức ủy quyền này. Đối với việc sử dụng đúng OAuth2, tôi nghĩ, nếu có điều gì đó sai thì sẽ hiển thị một lỗi khác. – B7ackAnge7z

+0

Tại sao bạn không thử thay vì thêm Cấp phép trong tiêu đề, hãy thêm? Access_token = trong URL? Đó là cách tôi sử dụng để làm điều đó anyway. – pyriku

+0

Theo [tài liệu] (https://developers.google.com/blogger/docs/3.0/using#DeletingAPost), cần gửi tiêu đề 'Authorization'. Ý của bạn là bạn đang sử dụng 'access_token = ' với OAuth 2.0 cho ứng dụng máy chủ đến máy chủ? – B7ackAnge7z

Các vấn đề liên quan