Gmail API Users.messages:列表

Kru*_*nal 8 email gmail-api

我正在研究电子邮件平台(使用Objective-C语言),并希望使用GTMHTTPFetcher和GTMOAuth2Authentication框架获取一些邮件.我正在使用gmail API获取userinfo并获得适当的响应.

我想为用户的收件箱中的类别提取电子邮件; 我正在考虑使用SYSTEM级别标签,例如CATEGORY_SOCIAL用于社交,CATEGORY_PERSONAL用于个人/主要等.

对于此功能,我正在使用以下GET API:https://www.googleapis.com/gmail/v1/users/userId/messages API以及适当的参数.我正在使用google试试这个选项. https://developers.google.com/gmail/api/v1/reference/users/messages/list#try-it

问题:我能够获得所有的messageID/threadID,但无法在google开发者控制台中获取labelID.我也从Objective-C代码尝试了这个GET方法,但是没有得到labelID.

我已经附上了Objective-C代码的代码片段,你能帮帮我解决这个问题吗?

NSString *newAPIStr = @"";

newAPIStr = [NSString stringWithFormat:@"https://www.googleapis.com/gmail/v1/users/%@/messages?fields=messages(id,labelIds,threadId),nextPageToken&maxResults=%d",emailStr,maxResult];


NSURL *url = [NSURL URLWithString:newAPIStr];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPMethod:@"GET"];

GTMOAuth2Authentication *currentAuth = [GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:kKeychainItemName clientID:kMyClientID clientSecret:kMyClientSecret];
GTMHTTPFetcher* myFetcher = [GTMHTTPFetcher fetcherWithRequest:request];
[myFetcher setAuthorizer:currentAuth];
[myFetcher beginFetchWithCompletionHandler:^(NSData *retrievedData, NSError *error) {
    if (error != nil) {
        // status code or network error
    } else {
        // succeeded
        NSDictionary* json = [NSJSONSerialization JSONObjectWithData:retrievedData options:kNilOptions error:&error];
        NSArray* messageArray =[json objectForKey:@"messages"];
        NSString *nextPageToken = [json objectForKey:@"nextPageToken"];
        for (NSDictionary *dictionary in messageArray) {
            [[EmailService instance].primaryMessages addObject:[dictionary objectForKey:@"id"]];
        }

        NSMutableArray *pArray = [[EmailService instance] primaryMessages];
        [[NSUserDefaults standardUserDefaults] setObject:pArray forKey: ALL_FUNNL];
        [[NSUserDefaults standardUserDefaults] setObject:nextPageToken forKey:@"PRIMARY_PAGE_TOKEN"];
        [[NSUserDefaults standardUserDefaults] synchronize];

        if([EmailService instance].primaryMessages.count < 5000)
            [self getPrimaryMessages:emailStr nextPageToken:nextPageToken numberOfMaxResult:100];
        else
            NSLog(@"----- Primary messages count > %d",pArray.count);
    }
}];}
Run Code Online (Sandbox Code Playgroud)

获得如下输出:

{ "messages": [ { "id": "146da54fe3dc089e", "threadId": "146da54fe3dc089e" }, { "id": "146da41d9486982f", "threadId": "146da41d9486982f" }, ... }

Eri*_*c D 4

message.list() 只返回消息的 id,这是相当标准的 REST 行为,以保持响应小而快。如果您还需要获取有关消息的更多信息(例如标签),您需要使用诸如 message.get(id=$THAT_ID, format=MINIMAL) 之类的内容进行后续操作,您可以使用批处理来调用它来检索许多消息并行消息。

  • 我仍然认为 Google API 资源管理器能够为 _Users.messages:list_ 输入“字段”值,而这些值不会在响应中返回,甚至不会出现某些字段值无效的错误,这非常烦人。 (11认同)