2012-05-17 135 views
1

在一個Facebook Graph API調用中是否有任何方法檢索或刪除多個Facebook request_id?在多個Facebook request_ids上執行操作

例如,如果用戶從同一應用程序的不同人員收到多個請求,則它們將被分組爲一個通知,並且所有request_ids將在用戶接受通知時以逗號分隔列表的形式傳遞給應用程序。有什麼辦法可以避免必須循環遍歷每一個並單獨檢索/刪除它?

回答

2

Binyamin是正確的批處理請求可能會工作。但是,我發現通過request_ids獲取請求數據,您可以簡單地將它們作爲逗號分隔列表傳遞,並避免執行批量請求。

NSString *requestIds = @"123456789,987654321"; 
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObject:requestIds forKey:@"ids"]; 
[facebook requestWithGraphPath:@"" andParams:params andDelegate:self]; 

你最終圖形URL想要的樣子:

https://graph.facebook.com/?ids=REQUEST_ID1,REQUEST_ID2,REQUEST_ID3&access_token=ACCESS_TOKEN 

對於刪除操作,我相信仍然需要批量操作。當你從上面的調用中獲取FB的request_id數據時,它將是一個NSDictionary,每個result_id都是一個鍵。您可以查看每個鍵並創建批量操作以將其全部刪除。

NSDictionary *requests = DATA_RETURNED_FROM_FACEBOOK; 
NSArray *requestIds = [requests allKeys]; 
NSMutableArray *requestJsonArray = [[[NSMutableArray alloc] init] autorelease]; 
for (NSString *requestId in requestIds) { 
    NSString *request = [NSString stringWithFormat:@"{ \"method\": \"DELETE\", \"relative_url\": \"%@\" }", requestId]; 
    [requestJsonArray addObject:request]; 
} 
NSString *requestJson = [NSString stringWithFormat:@"[ %@ ]", [requestJsonArray componentsJoinedByString:@", "]]; 
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObject:requestJson forKey:@"batch"]; 
[facebook requestWithGraphPath:@"" andParams:params andHttpMethod:@"POST" andDelegate:nil]; 

注意,在一批請求電流限制爲50,每https://developers.facebook.com/docs/reference/api/batch/。所以爲了完全安全,你應該檢查request_ids的數量,如果它大於50,你將不得不做多個批處理請求。

2

如果我理解正確,可以使用batch request在一次調用中執行多個操作。

例如:

NSString *req01 = @"{ \"method\": \"GET\", \"relative_url\": \"me\" }"; 
NSString *req02 = @"{ \"method\": \"GET\", \"relative_url\": \"me/friends?limit=50\" }"; 
NSString *allRequests = [NSString stringWithFormat:@"[ %@, %@ ]", req01, req02]; 
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObject:allRequests forKey:@"batch"]; 
[facebook requestWithGraphPath:@"me" andParams:params andHttpMethod:@"POST" andDelegate:self]; 

它仍然意味着你必須遍歷的通知,但您可以使用一個/兩個請求執行的所有操作。

+0

謝謝。我沒有看到有批量請求。 – stipe108