在看机器学习实战中K-means一章,练习中需要调用Yahoo PlaceFinder API 为地点添加经纬度,语言是python。申请到了appid但调用好像还要收费,要填写银行卡号才能用,没管那么多直接用了。而且网上关于这个API调用的参考文章很少。鼓捣半天用JSON加载API URL进行调用,但结果显示ValueError: No JSON object could be decoded。

放弃之,听同学说Google API好用就开始试试,发现网上关于google API的文章一搜一把。但还是官网文档看起来靠谱。

1、在Google API console申请API keyhttps://code.google.com/apis/console/?noredirect,步骤可参考这篇Places API introduction https://developers.google.com/places/documentation/ 

2、因为主要用经纬度的API,申请了 Geocoding API,参考文档https://developers.google.com/maps/documentation/geocoding/?csw=1#Geocoding。在看了Geocoding API Request Format,JSON Output Formats后对这个API的请求和返回形式大概了解了。然后自己改代码调用,遇到下面几个问题:

2.1 还是一直出现ValueError: No JSON object could be decoded,说明JSON没有加载到东西。不知道是API的问题还是JSON用法的问题。直接在网址框里输入参考文档里的JSON request地址 https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true_or_false&key=API_KEY,换上自己的API Key,sensor改为false。弹出个json.json文件,保存下来用Notepad打开来看,和JSON Output Formats一样一样的。确定按这么去拼接API request可行。

2.2 检查自己的地址,少了/api/,添上。JSON加载上了数据,但是返回的是{u'status': u'REQUEST_DENIED', u'error_message': u'Requests to this API must be over SSL.', u'results': []}。文档虽然这种status情况是sensor没赋值,我sensor赋了false。继续比较我的URL和参考文档的URL,此时就有一处不同,就是人家是https而我是http,改了,就好了。

事实证明了文档强大的重要性。