Browse Source
Added file.Insert, added rpdata-wikifileimport command, changed file listing to sort by date descending
1.0
Added file.Insert, added rpdata-wikifileimport command, changed file listing to sort by date descending
1.0
Gisle Aune
7 years ago
1 changed files with 77 additions and 0 deletions
@ -0,0 +1,77 @@ |
|||||
|
package main |
||||
|
|
||||
|
import ( |
||||
|
"encoding/json" |
||||
|
"fmt" |
||||
|
"log" |
||||
|
"net/http" |
||||
|
"time" |
||||
|
|
||||
|
"git.aiterp.net/rpdata/api/internal/config" |
||||
|
"git.aiterp.net/rpdata/api/internal/store" |
||||
|
"git.aiterp.net/rpdata/api/model/file" |
||||
|
) |
||||
|
|
||||
|
func main() { |
||||
|
client := http.Client{Timeout: time.Second * 30} |
||||
|
|
||||
|
res, err := client.Get(config.Global().Wiki.URL + "?action=query&list=allimages&ailimit=5&aiprop=dimensions|mime|url|user|timestamp&format=json&ailimit=500") |
||||
|
if err != nil { |
||||
|
log.Fatalln(err) |
||||
|
} |
||||
|
|
||||
|
if res.StatusCode != 200 { |
||||
|
log.Fatalln(res.Status) |
||||
|
} |
||||
|
|
||||
|
data := ResponseData{} |
||||
|
err = json.NewDecoder(res.Body).Decode(&data) |
||||
|
if err != nil { |
||||
|
log.Fatalln(err) |
||||
|
} |
||||
|
|
||||
|
store.Init() |
||||
|
|
||||
|
for _, info := range data.Query.Allimages { |
||||
|
existing, err := file.FindName("wiki", info.Name, info.User) |
||||
|
if err == nil && existing.ID != "" { |
||||
|
log.Println("Skipping", info.Name, "because it already exists") |
||||
|
continue |
||||
|
} |
||||
|
|
||||
|
ts, err := time.Parse(time.RFC3339, info.Timestamp) |
||||
|
if err != nil { |
||||
|
log.Println("Skipping", info.Name, "error:", err) |
||||
|
continue |
||||
|
} |
||||
|
|
||||
|
file, err := file.Insert(info.Name, "wiki", info.Mime, info.User, ts, info.Size, info.URL) |
||||
|
if err != nil { |
||||
|
log.Println("Skipping", info.Name, "error:", err) |
||||
|
continue |
||||
|
} |
||||
|
|
||||
|
fmt.Println(file.Name, "inserted ( id:", file.ID, ")") |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// The ResponseData from the wiki looks like this
|
||||
|
type ResponseData struct { |
||||
|
Batchcomplete string `json:"batchcomplete"` |
||||
|
Query struct { |
||||
|
Allimages []struct { |
||||
|
Descriptionshorturl string `json:"descriptionshorturl"` |
||||
|
Descriptionurl string `json:"descriptionurl"` |
||||
|
Height int `json:"height"` |
||||
|
Mime string `json:"mime"` |
||||
|
Name string `json:"name"` |
||||
|
Ns int `json:"ns"` |
||||
|
Size int64 `json:"size"` |
||||
|
Timestamp string `json:"timestamp"` |
||||
|
Title string `json:"title"` |
||||
|
URL string `json:"url"` |
||||
|
User string `json:"user"` |
||||
|
Width int `json:"width"` |
||||
|
} `json:"allimages"` |
||||
|
} `json:"query"` |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue