2017-06-30 3 views
1

i golang für meine Anwendung verwende und in dieser Anwendung Ich habe versucht, Anhänge von Confluence bekommen, folgende sind DetailGO: Confluence API alle nicht die Anlagen immer

req:="https://domain.atlassian.net/wiki/rest/api/content?expand=body.view,version&type=page&start=0&limit=" 
res, err := w.sendRequest(req) 
    if err != nil { 
     return nil, err 
    } 
    if strings.EqualFold(contentID, "") == false { 
     if len(res.Results) != 0 { 
      for i, _ := range res.Results { 
       Log.Info("files processed is:", i) 
       extension := filepath.Ext(res.Results[i].Title) 
       isExtenstionExclude := isExcludedExtenstion(sbConfig, extension) 
       ispathExclude := isExcludedFolder(sbConfig, res.Results[i].Links.Webui) 
       if sbgoclient.ExtesionMap[extension] == 0 || isExtenstionExclude == true || ispathExclude == true { 
        binarycount++ 
        Log.Info("Excluded by extension" + extension + " for file" + res.Results[i].Title) 
       } else { 
        md5HashInBytes := md5.Sum([]byte(res.Results[i].Title)) 
        md5HashInString := hex.EncodeToString(md5HashInBytes[:]) 
        file_path := parameter[0] + "/" + md5HashInString + strings.Replace(res.Results[i].Title, " ", "", -1) 
        file, err := os.Create(file_path) 

        if err != nil { 
         fmt.Println(err) 
         panic(err) 
        } 
        url_1 := sbConfig.ConfluenceUrl + res.Results[i].Links.Download 
        req, err := http.NewRequest("GET", url_1, nil) 
        resp, _ := w.client.Do(req) // add a filter to check redirect 

        if err != nil { 
         fmt.Println(err) 
         panic(err) 
        } 
        // Close body on function exit 
        defer resp.Body.Close() 
        fmt.Println(resp.Status) 

        size, err = io.Copy(file, resp.Body) 

        if err != nil { 
         panic(err) 
        } 

        defer file.Close() 
        fmt.Printf("%s with %v bytes downloaded", res.Results[i].Title, size) 
        meta := map[string]string{ 
         "size": strconv.FormatInt(size, 10), 
        } 
       } 
      } 
     } 
    } else { 

     if len(res.Results) != 0 { 
      for i, _ := range res.Results { 
       Log.Info("page indexing is", res.Results[i].Title, "and i value is:", i) 
       fmt.Println("hmtl content is", res.Results[i].Body.View.Value) 
       fmt.Println("page name is:", res.Results[i].Title) 
       md5HashInBytes := md5.Sum([]byte(res.Results[i].Title)) 
       md5HashInString := hex.EncodeToString(md5HashInBytes[:]) 
       file_path := parameter[0] + "/" + md5HashInString + strings.Replace(res.Results[i].Title, " ", "", -1) + ".html" 
       file, err := os.Create(file_path) 

       if err != nil { 
        fmt.Println(err) 
        panic(err) 
       } 
       defer file.Close() 
       html_content := "<html><body>" + res.Results[i].Body.View.Value + "</body></html>" 
       err = ioutil.WriteFile(file.Name(), []byte(html_content), 0777) 
       if err != nil { 
        fmt.Println("error writing into file", err) 
        panic(err) 
       } 
       file.Close()      
     } 
func (w *Wiki) sendRequest(req *http.Request) (*vijay_content, error) { 
    var testjson vijay_content 
    req.Header.Add("Accept", "application/json, */*") 
    w.authMethod.auth(req) 

    resp, err := w.client.Do(req) 
    if err != nil { 
     return nil, err 
    } 
    bodyBytes, _ := ioutil.ReadAll(resp.Body) 
    body := string(bodyBytes) 

    fmt.Printf("response is %s\n", body) 
    err = json.Unmarshal(bodyBytes, &testjson) 
    if err != nil { 
     fmt.Println("error here is", err) 
     return nil, err 
    } 

    switch resp.StatusCode { 
    case http.StatusOK, http.StatusCreated, http.StatusPartialContent: 

     return &testjson, nil 
    case http.StatusNoContent, http.StatusResetContent: 
     return nil, nil 
    case http.StatusUnauthorized: 
     return nil, fmt.Errorf("Authentication failed.") 
    case http.StatusServiceUnavailable: 
     return nil, fmt.Errorf("Service is not available (%s).", resp.Status) 
    case http.StatusInternalServerError: 
     return nil, fmt.Errorf("Internal server error: %s", resp.Status) 
    } 

    return nil, fmt.Errorf("Unknown response status %s", resp.Status) 
} 

und hier in dieser Einmündung Domain tatsächlich habe ich mehr als 1000 Dokumente, aber ich bin in der Lage, nur um 80 bis 90 herunterladen, ich weiß nicht, was hier passiert bitte schlagen Sie Änderungen vor zu tun und folgende ist die Struktur verwendet, um Werte aus Antwort json

zu erhalten
type Links struct { 
    Download string `json:"download,omitempty"` 
    Self  string `json:"self,omitempty"` 
    Webui string `json:"webui,omitempty"` 
} 
type View_struct struct { 
    Value string `json:",innerxml"` 
} 
type Body_struct struct { 
    View View_struct `json:"view,omitempty"` 
} 
type Vijay_Results struct { 
    ID string  `json:"id,omitempty"` 
    Links Links  `json:"_links,omitempty"` 
    Title string  `json:"title,omitempty"` 
    Body Body_struct `json:"body,omitempty"` 
} 
type vijay_content struct { 
    Results []Vijay_Results `json:"results,omitempty"` 
    Start int    `json:"start,omitempty"` 
    Limit int    `json:"limit,omitempty"` 
    Size int    `json:"size,omitempty"` 
} 
+0

'Ich kann nur etwa 80 bis 90 herunterladen: Was passiert also? Sie erhalten einen Fehler? Das Programm hängt? Etwas anderes? – Carpetsmoker

+0

kein Programm wird beendet, bedeutet Ausführung beendet –

Antwort

1

Die API paginiert die Ergebnisse. Sie sollten die gesamte Liste in mehreren Anfragen abrufen, indem Sie start und limit angeben.

z. Fordern Sie die Liste der ersten 30 Dokumente mit start=0&limit=30, dann die nächsten 30 mit start=30&limit=30 usw. an, bis Sie eine Antwort mit leerer Liste erhalten.

Sie können mehr Details in the docs on pagination lesen.

+0

Wie kann ich bestätigen, dass es keine nächste Seite gibt –

+0

Es ist einer der Abschnitte auf dieser Dokumentseite, die ich verlinkt habe (siehe 'Woher weiß ich, ob es mehr Seiten gibt?'). Oder Sie können einfach aufhören, wenn Sie eine leere Seite bekommen. –

+0

Ich habe Paging verwendet, wie im Dokument immer noch das Gleiche gesagt –

Verwandte Themen