id間の差の平均がどうのこうのとややこしいことはせず、
最後のidとそこからlimit分新しいidとの差を最後のidから引いてsince_idにセットしてreqJSON。
帰ってきたidのトップが最後のidより古ければ最後のidとトップのidとの差をsince_idに足して再度reqJSON。
最後のidよりトップのidが新しくなるまで繰り返し、重複分をスキップしてパース。
アルゴリズムとして無駄なことはしていない、はず。
- (void)apiTicket:(OAServiceTicket *)ticket didFinishWithData:(NSData *)data{ NSDictionary *bd=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; if(offsinceflg&&lastid!=0&&lastid<=[[[bd valueForKeyPath:@"response.posts.id"]objectAtIndex:0]longLongValue]){ NSLog(@"cho-fuku"); offset++;offsinceval=[NSString stringWithFormat:@"%d",offset];[self reqJSON];return; } int skip=0; if(!offsinceflg){ if(lastid>[[[bd valueForKeyPath:@"response.posts.id"]objectAtIndex:0]longLongValue]){ since_id+=lastid-[[[bd valueForKeyPath:@"response.posts.id"]objectAtIndex:0]longLongValue]; offsinceval=[NSString stringWithFormat:@"%lld",since_id];[self reqJSON];return; }else{ for(id idnum in [bd valueForKeyPath:@"response.posts.id"]){ if(lastid<=[idnum longLongValue]) skip++; else break; } } } for(int i=skip;i<[[bd valueForKeyPath:@"response.posts.type"]count];i++){ [idArr addObject:[[bd valueForKeyPath:@"response.posts.id"]objectAtIndex:i]]; [typeArr addObject:[[bd valueForKeyPath:@"response.posts.type"]objectAtIndex:i]]; [bnameArr addObject:[[bd valueForKeyPath:@"response.posts.blog_name"]objectAtIndex:i]]; //type別の処理は割愛 } lastid=[[idArr lastObject]longLongValue]; [self mkSinglePostView]; } - (void)npost{ if([pvlayer viewWithTag:now]==[pvArr lastObject]) return; [[pvlayer viewWithTag:now++] removeFromSuperview]; [pvlayer addSubview:[pvArr objectAtIndex:now-1]]; [bprev removeFromSuperview]; [self na]; if(now+10>[contArr count]){ if(offset+limit<=250){ offset+=limit; offsinceval=[NSString stringWithFormat:@"%d",offset]; [self reqJSON]; } else{ offsinceflg=NO; since_id=2*[[idArr lastObject]longLongValue]-[[idArr objectAtIndex:[idArr count]-1-limit]longLongValue]; offsinceval=[NSString stringWithFormat:@"%lld",since_id]; [self reqJSON]; } } }できた。これで永遠にdashboardの深淵へ潜っていけるはず。
ifのネストとか嫌いやけどとりあえずこれで様子を見ていけてそうならコードは綺麗にする。
では今から小一時間ランしてくる。
0 件のコメント:
コメントを投稿