首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >克洛尔的http.async.client和google偶尔出现的空结果

克洛尔的http.async.client和google偶尔出现的空结果
EN

Stack Overflow用户
提问于 2011-05-13 15:52:47
回答 2查看 207关注 0票数 1

我在json中有一个有城市名称的结果集,我想得到每个城市的长。以下职能在一定程度上起作用:

代码语言:javascript
复制
(:require [http.async.client :as client])

(defn get-geo-fact [row]
  (let [ 
    n (string/replace (:cityname row) " "  "+") 
    url (str "http://maps.googleapis.com/maps/api/geocode/json?address=" 
              n "&sensor=false")
    resp (client/GET url) ]
  (client/await resp)
  (make-geo-fact row (json/read-json (client/string resp))) ))

对make-geo事实的最后一次调用只返回城市坐标的RDF呈现。我遇到的问题是,一个运行(对这个函数的调用大约有40个)返回几个(3-5个lat-长对)空结果。返回空值的城市因运行不同而不同--有时圣何塞获得坐标,有时却没有。

我最初使用slurp来抓取url的身体,并得到了类似的-偶尔的零。我想我不是在等待正确的响应,但是切换到http.async.client似乎并不能奏效。有什么想法吗?

编辑

下面是做地理事实的函数,它接受了一个“这个团队位于这个城市”的事实和谷歌地图的回应,返回了一个表示纬度和经度的两个三元组的向量:

代码语言:javascript
复制
(defn make-geo-fact [row response]
  (let [ g (:location (:geometry (first (:results response))))
         lat (str "<" (:team row) ">" 
                  " <http://www.nhl.com/latitude> \"" (:lat g) 
                  "\"^^<http://www.w3.org/2001/XMLSchema#decimal> ." )
         lon (str "<" (:team row) ">" 
                  " <http://www.nhl.com/longitude> \"" (:lng g) 
                  "\"^^<http://www.w3.org/2001/XMLSchema#decimal> ." )  ]
        [lat lon] ))

这是我用来启动整件事的函数:

代码语言:javascript
复制
(defn make-geo-facts []
  (let [ a (bounce team-city (build "files/team-city.nt")) 
         f "files/geo-facts.nt" ]
    (spit f (string/join "\n" (flatten (map get-geo-fact (:rows a)))))  
    f ))

其中,弹出函数对RDF模型发出SPARQL select查询,使用build函数实例化该模型。

编辑2

这里有一个不需要编造事实的重新因素:

代码语言:javascript
复制
  (defn get-geo-fact [row]
    (let [ n (string/replace (:cityname row) " "  "+") 
           url (str "http://maps.googleapis.com/maps/api/geocode/json?address=" n "&sensor=false")
           resp (client/GET url)  ]
      (-> (client/GET url)
           client/await
           client/string
           json/read-json
           :results
           first
           :geometry
           :location )))

    (defn make-geo-facts []
        (let [ a (bounce tc-query (build "files/team-city.nt")) 
               f "files/geo-facts.nt"
               *client* (client/create-client)]
          (try (spit f (string/join "\n" (flatten (map get-geo-fact (:rows a))))))
          (finally (client/close *client*)) ))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-25 15:44:50

结果我的代码需要一点睡眠。我在我的核心函数中添加了(线程/睡眠1000),现在我没有获得空结果:

代码语言:javascript
复制
(defn get-geo-fact [row]
    (let [ n (string/replace (:cityname row) " "  "+") 
            url (str "http://maps.googleapis.com/maps/api/geocode/json?address=" n "&sensor=false")
            resp (client/GET url)  ]
            (Thread/sleep 1000) 
        (-> (client/GET url)
              client/await
              client/string
              json/read-json
              (make-geo-fact ,,, row ) )))
票数 1
EN

Stack Overflow用户

发布于 2011-05-13 22:02:00

正如您已经说过的,更改客户端实现没有什么不同。我为http.async.client的开发版本进行了双重检查并创建了一个http.async.client。总是有身体反应。

请提供实际执行情况.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5994502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档