https://github.com/orijtech/arxiv
Go API client for arxiv.org
https://github.com/orijtech/arxiv
arxiv golang research
Last synced: 4 months ago
JSON representation
Go API client for arxiv.org
- Host: GitHub
- URL: https://github.com/orijtech/arxiv
- Owner: orijtech
- License: apache-2.0
- Created: 2017-05-14T10:18:15.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2022-02-22T03:05:26.000Z (over 4 years ago)
- Last Synced: 2024-06-21T04:48:26.027Z (almost 2 years ago)
- Topics: arxiv, golang, research
- Language: Go
- Size: 24.4 KB
- Stars: 16
- Watchers: 4
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# arxiv
Go API client for arxiv.org. It supports simple as well as advanced searches with filters.
## Usage
Sample usage can be found in file [example_test.go](./example_test.go)
Or see below:
* Preamble:
```go
package main
import (
"fmt"
"log"
"github.com/orijtech/arxiv/v1"
)
```
## Examples
* Simple search
```go
func simpleSearch() {
resChan, cancel, err := arxiv.Search(&arxiv.Query{
Terms: "deep learning",
MaxPageNumber: 5,
})
if err != nil {
log.Fatal(err)
}
for resPage := range resChan {
if err := resPage.Err; err != nil {
fmt.Printf("#%d err: %v", resPage.PageNumber, err)
continue
}
fmt.Printf("#%d\n", resPage.PageNumber)
feed := resPage.Feed
fmt.Printf("\tTitle: %s\n\tID: %s\n\tAuthor: %#v\n\tUpdated: %#v\n", feed.Title, feed.ID, feed.Author, feed.Updated)
for i, entry := range feed.Entry {
fmt.Printf("\n\t\tEntry: #%d Title: %s ID: %s\n\t\tSummary: %s\n\t\tContent: %#v\n\t\tUpdated: %#v\n\t\tLinks: %#v\n",
i, entry.Title, entry.ID, entry.Summary.Body, entry.Content, entry.Updated, entry.Link,
)
}
if resPage.PageNumber >= 2 {
cancel()
}
}
}
```
* Advanced/complex search
```go
func advancedSearch() {
resChan, cancel, err := arxiv.Search(&arxiv.Query{
Filters: []*arxiv.Filter{
{
Op: arxiv.OpOR,
Fields: []*arxiv.Field{
{Title: "architecture"},
{Category: arxiv.CSGameTheory},
{Comment: "biological"},
},
},
},
MaxPageNumber: 2,
})
if err != nil {
log.Fatal(err)
}
for resPage := range resChan {
if err := resPage.Err; err != nil {
fmt.Printf("#%d err: %v", resPage.PageNumber, err)
continue
}
fmt.Printf("#%d\n", resPage.PageNumber)
feed := resPage.Feed
fmt.Printf("\tTitle: %s\n\tID: %s\n\tAuthor: %#v\n\tUpdated: %#v\n", feed.Title, feed.ID, feed.Author, feed.Updated)
for i, entry := range feed.Entry {
fmt.Printf("\n\t\tEntry: #%d Title: %s ID: %s\n\t\tSummary: %s\n\t\tContent: %#v\n\t\tUpdated: %#v\n\t\tLinks: %#v\n",
i, entry.Title, entry.ID, entry.Summary.Body, entry.Content, entry.Updated, entry.Link,
)
}
if resPage.PageNumber >= 2 {
cancel()
}
}
}
```