Feedly 标记为已读不适用于 Objective-C
Feedly Mark as Read not working on Objective-C
我正在尝试在我的 iOS 应用中实施一种方法,使用 Feedly API 将文章标记为已读。但是,我不断收到错误响应:
{
"errorCode": 400,
"errorId": "sandbox-he.2015010906.2770040",
"errorMessage": "no data"
}
这是方法:
- (void)markRead:(NSString*)articleID {
NSLog(@"Artidle ID is: %@", articleID);
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *accessToken = [standardUserDefaults objectForKey:@"AccessToken"];
NSString *feedUrl = [NSURL URLWithString:@"https://sandbox.feedly.com/v3/markers"];
NSError *error = nil;
NSString *post =[[NSString alloc] initWithFormat:@"action=markAsRead&type=entries&entryIds=%@",articleID];
NSLog(@"PostData: %@",post);
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:feedUrl];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-type"];
[request setHTTPBody:postData];
[request addValue:accessToken forHTTPHeaderField:@"Authorization"];
//[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];
NSError *errror = [[NSError alloc] init];
NSHTTPURLResponse *response = nil;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&errror];
NSLog(@"Response code: %ld", (long)[response statusCode]);
if ([response statusCode] >= 200 && [response statusCode] < 300)
{
NSLog(@"Success marking this as read.");
} else {
if (error) NSLog(@"Error: %@", errror);
NSLog(@"No success marking this as read.");
}
}
Feedly API 描述它需要此作为输入:
{
"entryIds": [
"TSxGHgRh4oAiHxRU9TgPrpYvYVBPjipkmUVSHGYCTY0=_14499073085:c034:d32dab1f",
"TSxGHgRh4oAiHxRU9TgPrpYvYVBPjipkmUVSHGYCTY0=_1449255d60a:22c3491:9c6d71ab"
],
"action": "markAsRead",
"type": "entries"
}
在我看来,我将此作为输入提供,所以我实际上期望得到适当的回应。但是,我一直收到 400
并且似乎无法弄清楚我做错了什么。我为此绞尽脑汁好几个小时了。
不要使用当前的 body 数据,而是尝试使用以下代码创建数据:
NSDictionary *bodyDict = [NSDictionary dictionaryWithObjectsAndKeys:@[articleID],@"entryIds",
@"markAsRead",@"action",
@"entries",@"type", nil];
NSError *error;
NSData *postdata = [NSJSONSerialization dataWithJSONObject:bodyDict options:0 error:&error];
[request setHTTPBody:postData];
这会将 body 作为 JSON object 发送。
像您一样发送参数(action=markAsRead&type=entries&entryIds=%@
)通常在使用 GET 请求方法调用 Web 方法时使用。查看 POST vs GET 以获得更好的理解。
我正在尝试在我的 iOS 应用中实施一种方法,使用 Feedly API 将文章标记为已读。但是,我不断收到错误响应:
{
"errorCode": 400,
"errorId": "sandbox-he.2015010906.2770040",
"errorMessage": "no data"
}
这是方法:
- (void)markRead:(NSString*)articleID {
NSLog(@"Artidle ID is: %@", articleID);
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *accessToken = [standardUserDefaults objectForKey:@"AccessToken"];
NSString *feedUrl = [NSURL URLWithString:@"https://sandbox.feedly.com/v3/markers"];
NSError *error = nil;
NSString *post =[[NSString alloc] initWithFormat:@"action=markAsRead&type=entries&entryIds=%@",articleID];
NSLog(@"PostData: %@",post);
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:feedUrl];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-type"];
[request setHTTPBody:postData];
[request addValue:accessToken forHTTPHeaderField:@"Authorization"];
//[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];
NSError *errror = [[NSError alloc] init];
NSHTTPURLResponse *response = nil;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&errror];
NSLog(@"Response code: %ld", (long)[response statusCode]);
if ([response statusCode] >= 200 && [response statusCode] < 300)
{
NSLog(@"Success marking this as read.");
} else {
if (error) NSLog(@"Error: %@", errror);
NSLog(@"No success marking this as read.");
}
}
Feedly API 描述它需要此作为输入:
{
"entryIds": [
"TSxGHgRh4oAiHxRU9TgPrpYvYVBPjipkmUVSHGYCTY0=_14499073085:c034:d32dab1f",
"TSxGHgRh4oAiHxRU9TgPrpYvYVBPjipkmUVSHGYCTY0=_1449255d60a:22c3491:9c6d71ab"
],
"action": "markAsRead",
"type": "entries"
}
在我看来,我将此作为输入提供,所以我实际上期望得到适当的回应。但是,我一直收到 400
并且似乎无法弄清楚我做错了什么。我为此绞尽脑汁好几个小时了。
不要使用当前的 body 数据,而是尝试使用以下代码创建数据:
NSDictionary *bodyDict = [NSDictionary dictionaryWithObjectsAndKeys:@[articleID],@"entryIds",
@"markAsRead",@"action",
@"entries",@"type", nil];
NSError *error;
NSData *postdata = [NSJSONSerialization dataWithJSONObject:bodyDict options:0 error:&error];
[request setHTTPBody:postData];
这会将 body 作为 JSON object 发送。
像您一样发送参数(action=markAsRead&type=entries&entryIds=%@
)通常在使用 GET 请求方法调用 Web 方法时使用。查看 POST vs GET 以获得更好的理解。