2014-12-20 127 views
-2

我是Go新手,想寫一個簡單的網絡爬蟲。我正在使用鴨鴨go api並試圖顯示搜索結果。使用GoLang無法獲得正確的json響應獲取

https://duckduckgo.com/api

這是我的代碼 - 包主要

import (
    "fmt" 
    "net/http" 
) 


func main() { 
    getDuckDuckGo("food") 
} 

func getDuckDuckGo(keyword string) <- chan string{ 
    resp, _ := http.Get("http://api.duckduckgo.com/?q=" + keyword + "&format=json&pretty=1") 
    c := make(chan string) 


    fmt.Println(resp) 
    var respMap map[string]interface{} 
    fmt.Println(respMap) 


    fmt.Println(respMap) 
    return c 
} 

我的RESP的println給了我這一點 -

&{200 OK 200 HTTP/1.1 1 1 map[Connection:[keep-alive] Content-Type:[application/x-javascript] Date:[Sat, 20 Dec 2014 00:41:49 GMT] Cache-Control:[max-age=1] Expires:[Sat, 20 Dec 2014 00:41:50 GMT] Server:[nginx] X-Duckduckgo-Locale:[en_US]] 0xf840053c20 -1 [chunked] false map[] 0xf84007c000} 

,而不是任何JSON。

我正在做GET請求嗎?

+0

不要忽略你的錯誤! – JimB

+0

我編輯它以獲得過去的錯誤 - 但我仍然得到相同的迴應...所以我不確定你的意思? – praks5432

+0

你的例子仍然沒有對http響應做任何事情,並打印一個空的'respMap'兩次。 – JimB

回答

1

至少,你應該做以下事情:

  1. 檢查錯誤的http.Get()
  2. 通過resp.Body獲取io.Reader的HTTP主體數據
  3. 使用json.Decoder解碼JSON

getDuckDuckGo()應該變成這樣:

func getDuckDuckGoImproved(k string) (map[string]interface{}, error) { 
    resp, err := http.Get("http://api.duckduckgo.com/?=" + k + "&format=json") 
    if err != nil { 
     return nil, err 
    } 
    defer resp.Body.Close() 

    r := make(map[string]interface{}) 
    d := json.NewDecoder(resp.Body) 
    if err := d.Decode(&r); err != nil { 
     return nil, err 
    } 
    return r, nil 
}