gil*_*iev 13 google-api google-places-api
我正在探索Google API,主要是Places API.由于对Google Places API的请求数量限制为100,000,我正在寻找最小化发送到API的请求数量的方法.我正在考虑使用数据库来存储以前收到的响应,因此将来我可以在不向API发出请求的情况下检索它们,只有在以前没有将所需数据存储在我的数据库中的情况下才会请求API .
根据Google API使用条款,特别是 10.1.3对复制或数据导出的限制,不允许无限期地存储数据,但暂时缓存数据是合法的:
您不得预先获取,缓存或存储任何内容,但您可以存储以下内容:(i)有限数量的内容,以便在您暂时(以下情况下)暂时提高Maps API实施的效果时超过30个日历日,安全,并且不允许在服务之外使用内容; (ii)Maps API文档特别允许您存储的任何内容标识符或密钥.例如,您不得使用内容来创建"地点"或其他本地列表信息的独立数据库.
我觉得这部分没有得到很好的解释.我可以将API收到的任何数据存储在我的数据库中30天或仅存储地点的ID吗?因为在其他一些情况下我读过它只允许存储id.我这样理解:我可以无限期地存储地点ID,但只能使用整个数据30天.
因为我一直在阅读有关Google API的文章,所以我可能错过了一些使用期限,所以如果你能帮助我,我会非常感激.
任何建议如何最大限度地减少对API的调用次数,或者使用这些API分享与真实项目相关的一些经验将非常感激.此外,如果您可以建议我一些可以提供类似功能的替代API将非常有用.
先感谢您!
Mr.*_*mas 12
根据我使用Google Places API的经验,您的理解是正确的.让我用自己的话解释这两个规定:
i)无需预取或在应用程序之外重新分发,您可以将API结果缓存最多30天.
ii)您可以在应用程序特定数据中使用地点ID或密钥,但没有其他内容(例如,如果您的应用程序允许用户"登记"位置,您可以存储他们在用户对象上的地点ID列表并根据ID查找所需的地点,但您无法使用Google的名称/详细信息存储所有地点的列表.
为了减少API调用的数量并加速我的应用程序,我所做的是将附近的地方调用缓存在一个简单的键值缓存中,其中键是lat-lng对舍入到一定的精度(以便调用某个半径将到达缓存),该值是整个JSON结果字符串.这是我的代码,它是在Google的App Engine上运行的Java:
// Using 4 decimal places for rounding represents approximately 11 meters of precision
// http://gis.stackexchange.com/questions/8650/how-to-measure-the-accuracy-of-latitude-and-longitude
public static final int LAT_LONG_CACHE_PRECISION = 4;
public static final int CACHE_DURATION_SEC = 24 * 60 * 60; // one day in seconds
...
String cacheKey = "lat,lng:" + round(latitude) + "," + round(longitude);
asyncCache.put(cacheKey, dataJSON, Expiration.byDeltaSeconds(CACHE_DURATION_SEC), MemcacheService.SetPolicy.SET_ALWAYS);
...
private static double round(double value) {
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(LAT_LONG_CACHE_PRECISION, RoundingMode.HALF_UP);
return bd.doubleValue();
}
Run Code Online (Sandbox Code Playgroud)
至于替代API,我建议你看看以下内容:
Yelp API - 提供Google缺乏的酒吧/餐厅数据
Facebook API - 如果您已经在使用Facebook的SDK,则易于使用
事实:地方十字路口 - 聚合和规范化来自许多来源的地方数据,包括Facebook和Yelp,但不包括谷歌
目前我只使用Google Places API,但我计划稍后添加Yelp或Factual以改善最终用户的结果.
| 归档时间: |
|
| 查看次数: |
6034 次 |
| 最近记录: |