newMediaCount = getMediaCount();
delta = newMediaCount - mediaCount;
if (delta > 0) {
// if mediaCount changed by now,realDelta > delta,so realDelta - delta photos won't be grabbed and on next poll if mediaCount didn't change again realDelta - delta would be duplicated else ...
// if photo posted from private account last photo will be duplicated as counter changes but nothing is added to recent
recentMedia = getRecentMedia(delta);
// persist recentMedia
mediaCount = newMediaCount;
}@H_301_3@
第二个问题可以用某种类型的我来解决.但首先真的打扰了我.我已经把两个呼叫转移到instagram api尽可能的接近,但这是否足够?
编辑
由于Amir建议我使用min / max_tag_ids重写了代码.但它仍然跳过照片.我找不到比在磁盘上保存图像一段时间的更好的测试方法,并将结果与instagram.com/explore/tags/进行比较.
public class LousyInstagramApiTest {
@Test
public void testFeedContinuity() throws Exception {
Instagram instagram = new Instagram(Settings.getClientId());
final String TAG_NAME = "portrait";
String id = instagram.getRecentMediaTags(TAG_NAME).getPagination().getMinTagId();
HashtagEndpoint endpoint = new HashtagEndpoint(instagram,TAG_NAME,id);
for (int i = 0; i < 10; i++) {
Thread.sleep(3000);
endpoint.recentFeed().forEach(d -> {
try {
URL url = new URL(d.getImages().getLowResolution().getImageUrl());
BufferedImage img = ImageIO.read(url);
ImageIO.write(img,"png",new File("D:\\tmp\\" + d.getId() + ".png"));
} catch (Exception e) {
e.printStackTrace();
}
});
}
}
}
class HashtagEndpoint {
private final Instagram instagram;
private final String hashtag;
private String minTagId;
public HashtagEndpoint(Instagram instagram,String hashtag,String minTagId) {
this.instagram = instagram;
this.hashtag = hashtag;
this.minTagId = minTagId;
}
public List recentFeed() throws InstagramException {
TagMediaFeed Feed = instagram.getRecentMediaTags(hashtag,minTagId,null);
List dataList = Feed.getData();
if (dataList.size() == 0) return Collections.emptyList();
String maxTagId = Feed.getPagination().getNextMaxTagId();
if (maxTagId != null && maxTagId.compareTo(minTagId) > 0) dataList.addAll(paginateFeed(maxTagId));
Collections.reverse(dataList);
// dataList.removeIf(d -> d.getId().compareTo(minTagId) < 0);
minTagId = Feed.getPagination().getMinTagId();
return dataList;
}
private Collection extends MediaFeedData> paginateFeed(String maxTagId) throws InstagramException {
System.out.println("pagination required");
List dataList = new ArrayList<>();
do {
TagMediaFeed Feed = instagram.getRecentMediaTags(hashtag,null,maxTagId);
maxTagId = Feed.getPagination().getNextMaxTagId();
dataList.addAll(Feed.getData());
} while (maxTagId.compareTo(minTagId) > 0);
return dataList;
}
}@H_301_3@