ngore
is a library written in Go to interact with the https://ncore.pro website. Since the ncore website does not provide an official api, this library uses website scraping to parse the responses.
To import the library, make sure you are using a recent version of Go.
Use go get
to add a dependency to the latest release:
go get github.com/gar-r/ngore@latest
Add a dependency to a specific version:
go get github.com/gar-r/ngore@v0.9.1
To create an instance of the api with a default client:
api := ngore.Default("https://ncore.pro")
Optionally, you may want to customize the client used by the api:
client := &http.Client{
Timeout: 30 * time.Second,
}
api := ngore.New(client, "https://ncore.pro")
In order to use the api, you will first have to log in. Using the api without logging in, or with an expired login will result in an error being returned.
err := api.Login(&login.BasicAuth{
UserName: "user",
Password: "pass",
})
if err != nil {
// ...
}
The search function takes a search.Params
pointer, which specifies what to search for.
At a minimum, you want to add a search phrase:
res, err := api.Search(&search.Params{
SearchPhrase: "hortobagy",
})
In most cases you will want to narrow down you search a bit more:
func SearchMovieByName(api ngore.Api) error {
params := &search.Params{
SearchPhrase: "hortobagy",
Field: search.Name,
Category: search.MovieSdHu,
}
res, err := api.Search(params)
if err != nil {
return err
}
// process results
return nil
}
Search returns a search.Result
pointer, which contains the actual result list, and paging information. The following example prints out the name of every search result on the first page:
for _, t := range res.Torrents {
fmt.Printf("name: %s\n", t.Title)
}
By default, search will request the first page of the results. This can be changed by specifying the value of the Page
field in the search.Params
.
The following example performs several searches in order to iterate through all results in all pages:
func SearchWithPaging(api ngore.Api) error {
params := &search.Params{
SearchPhrase: "game",
Field: search.Name,
Category: search.SeriesSdEn,
}
var res *search.Result
var err error
for params.Page = 0; res == nil || res.Page.HasMore(); params.Page++ {
fmt.Printf("page %d\n", params.Page)
res, err = api.Search(params)
if err != nil {
return err
}
// process results on page
}
return nil
}
Server-side sorting can be requested using the SortField
and SortMode
fields:
func SearchWithSort(api ngore.Api) error {
params := &search.Params{
SearchPhrase: "penguin",
SortField: search.ByDownloaded,
SortMode: search.Descending,
}
res, err := api.Search(params)
if err != nil {
return err
}
// process results
return nil
}
Several user activity stats can be requested from the server. This is represented by the activity.Info
struct.
The following example demonstrates how to fetch the user activity details:
func PrintActivity(api ngore.Api) error {
info, err := api.Activity()
if err != nil {
return err
}
PrintJson(info)
return nil
}
Result :
{
"Rank": {
"Daily": "111",
"Weekly": "222",
"Monthly": "333",
"PrevMonth": "444"
},
"Stats": {
"Current": "0",
"Allowed": "korlátlan",
"PenMonths": "5",
"PenTorrents": "0"
},
"CanDownload": "igen",
"History": []
}
In order to download, you only need to provide the torrent id, and have a valid api key (automatically acquired by the api after logging in).
The following example downloads a torrent:
func Download(api ngore.Api) error {
t := // acquired by searching previously
bytes, err := api.Download(t.Id)
if err != nil {
return err
}
// process downloaded data
return nil
}