@@ -3,13 +3,14 @@ package paperswithcode_go
3
3
import (
4
4
"encoding/json"
5
5
"fmt"
6
+ "strings"
7
+
6
8
"github.com/codingpot/paperswithcode-go/v2/models"
7
- "net/url"
8
9
)
9
10
10
11
// PaperList returns multiple papers.
11
12
func (c * Client ) PaperList (params PaperListParams ) (* models.PaperList , error ) {
12
- papersListURL := c .baseURL + "/papers?" + params .build ()
13
+ papersListURL := c .baseURL + "/papers?" + params .Build ()
13
14
14
15
response , err := c .httpClient .Get (papersListURL )
15
16
if err != nil {
@@ -28,27 +29,41 @@ func (c *Client) PaperList(params PaperListParams) (*models.PaperList, error) {
28
29
29
30
// PaperListParams is the parameter for PaperList method.
30
31
type PaperListParams struct {
31
- // Query to search papers (default: "")
32
+ // Q to search papers (default: "")
32
33
// If empty, it returns all papers.
33
- Query string
34
+ Q string
35
+ ArxivID string
36
+ Title string
37
+ Abstract string
34
38
// Page is the number of page to search (default: 1)
35
39
Page int
36
- // Limit returns how many papers are returned in a single response.
37
- Limit int
40
+ // ItemsPerPage returns how many papers are returned in a single response.
41
+ ItemsPerPage int
42
+ }
43
+
44
+ func (p PaperListParams ) Build () string {
45
+ var b strings.Builder
46
+ b .WriteString (fmt .Sprintf ("page=%d&items_per_page=%d" , p .Page , p .ItemsPerPage ))
47
+
48
+ addParamsIfValid (& b , "q" , p .Q )
49
+ addParamsIfValid (& b , "arxiv_id" , p .ArxivID )
50
+ addParamsIfValid (& b , "title" , p .Title )
51
+ addParamsIfValid (& b , "abstract" , p .Abstract )
52
+
53
+ return b .String ()
38
54
}
39
55
40
- func ( p PaperListParams ) build () string {
41
- if p . Query = = "" {
42
- return fmt .Sprintf ("items_per_page=%d&page=%d " , p . Limit , p . Page )
56
+ func addParamsIfValid ( b * strings. Builder , key string , value string ) {
57
+ if value ! = "" {
58
+ b . WriteString ( fmt .Sprintf ("&%s=%s " , key , value ) )
43
59
}
44
- return fmt .Sprintf ("q=%s&items_per_page=%d&page=%d" , url .QueryEscape (p .Query ), p .Limit , p .Page )
45
60
}
46
61
47
62
// PaperListParamsDefault returns the default PaperListParams.
48
63
func PaperListParamsDefault () PaperListParams {
49
64
return PaperListParams {
50
- Query : "" ,
51
- Page : 1 ,
52
- Limit : 50 ,
65
+ Q : "" ,
66
+ Page : 1 ,
67
+ ItemsPerPage : 50 ,
53
68
}
54
69
}
0 commit comments