Skip to content

Commit fe8c90a

Browse files
authored
Merge pull request #1 from detectlanguage/v3
Switch to v3 api
2 parents b8027a7 + a8ca9bc commit fe8c90a

10 files changed

Lines changed: 64 additions & 61 deletions

File tree

CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
9+
## v2.0.0
10+
11+
### Added
12+
- `context` to all API methods
13+
14+
### Changed
15+
- Switched to v3 API which uses updated language detection model
16+
- Language detection results contains `Language` and `Score`
17+
- `UserStatus()` renamed to `AccountStatus()`

README.md

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,21 @@ You can get it by signing up at https://detectlanguage.com
1313
## Installation
1414

1515
```
16-
go get -u github.com/detectlanguage/detectlanguage-go@v1.0.1
16+
go get -u github.com/detectlanguage/detectlanguage-go@v2.0.0
1717
```
1818

1919
### Configuration
2020

2121
```go
22-
client := detectlanguage.New("YOUR API KEY")
22+
dl := detectlanguage.New("YOUR API KEY")
2323
```
2424

2525
## Usage
2626

2727
### Language detection
2828

2929
```go
30-
detections, err := client.Detect("Buenos dias señor")
30+
detections, err := dl.Detect(context.TODO(), "Dolce far niente")
3131

3232
if err != nil {
3333
fmt.Fprintln(os.Stderr, "error detecting language:", err)
@@ -36,16 +36,15 @@ if err != nil {
3636
}
3737

3838
fmt.Fprintln(os.Stdout, "Language:", detections[0].Language)
39-
fmt.Fprintln(os.Stdout, "Reliable:", detections[0].Reliable)
40-
fmt.Fprintln(os.Stdout, "Confidence:", detections[0].Confidence)
39+
fmt.Fprintln(os.Stdout, "Score:", detections[0].Score)
4140
```
4241

4342
### Single language code detection
4443

4544
If you need just a language code you can use `DetectCode`. It returns first detected language code.
4645

4746
```go
48-
language, err := client.DetectCode("Buenos dias señor")
47+
language, err := dl.DetectCode(context.TODO(), "Dolce far niente")
4948

5049
if err != nil {
5150
fmt.Fprintln(os.Stderr, "error detecting language:", err)
@@ -64,7 +63,7 @@ To use batch detection just pass multiple texts to `DetectBatch` method.
6463

6564
```go
6665
texts := []string{"labas rytas", "good morning"}
67-
results, err := client.DetectBatch(texts)
66+
results, err := dl.DetectBatch(context.TODO(), texts)
6867

6968
if err != nil {
7069
fmt.Fprintln(os.Stderr, "error detecting language:", err)
@@ -79,10 +78,10 @@ fmt.Fprintln(os.Stdout, "Second text language:", detections[1][0].Language)
7978
### Getting your account status
8079

8180
```go
82-
result, err := client.UserStatus()
81+
result, err := dl.AccountStatus(context.TODO())
8382

8483
if err != nil {
85-
fmt.Fprintln(os.Stderr, "error getting user status:", err)
84+
fmt.Fprintln(os.Stderr, "error getting account status:", err)
8685
os.Exit(1)
8786
return
8887
}
@@ -100,7 +99,7 @@ fmt.Fprintln(os.Stdout, "Date:", result.Date)
10099
### Getting list supported languages
101100

102101
```go
103-
languages, err := client.Languages()
102+
languages, err := dl.Languages(context.TODO())
104103

105104
if err != nil {
106105
fmt.Fprintln(os.Stderr, "error getting languages list:", err)
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package detectlanguage
22

3-
// UserStatusResponse is the resource containing account status information
4-
type UserStatusResponse struct {
3+
import "context"
4+
5+
// AccountStatusResponse is the resource containing account status information
6+
type AccountStatusResponse struct {
57
Date string `json:"date,omitempty"`
68
Requests int `json:"requests"`
79
Bytes int `json:"bytes"`
@@ -12,8 +14,8 @@ type UserStatusResponse struct {
1214
Status string `json:"status"`
1315
}
1416

15-
// UserStatus fetches account status
16-
func (c *Client) UserStatus() (out *UserStatusResponse, err error) {
17-
err = c.get(nil, "user/status", &out)
17+
// AccountStatus fetches account status
18+
func (c *Client) AccountStatus(ctx context.Context) (out *AccountStatusResponse, err error) {
19+
err = c.get(ctx, "account/status", &out)
1820
return
1921
}

user_test.go renamed to account_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package detectlanguage_test
22

33
import (
4+
"context"
45
"testing"
56

67
"github.com/stretchr/testify/assert"
78
)
89

9-
func TestUserStatus(t *testing.T) {
10-
response, err := client.UserStatus()
10+
func TestAccountStatus(t *testing.T) {
11+
response, err := client.AccountStatus(context.TODO())
1112

1213
if assert.NoError(t, err) {
1314
assert.NotEmpty(t, response.Date)

client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const defaultUserAgent = "detectlanguage-go/" + Version
1616
const defaultTimeout = 10 * time.Second
1717

1818
var apiBaseURL = &url.URL{
19-
Scheme: "https", Host: "ws.detectlanguage.com", Path: "/0.2/",
19+
Scheme: "https", Host: "ws.detectlanguage.com", Path: "/v3/",
2020
}
2121

2222
// A Client provides an HTTP client for DetectLanguage API operations.

detect.go

Lines changed: 14 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,38 @@
11
package detectlanguage
22

3+
import "context"
4+
35
// DetectRequest contains language detection request params
46
type DetectRequest struct {
57
Query string `json:"q"`
68
}
79

8-
// DetectResponse is a resource containing language detection response
9-
type DetectResponse struct {
10-
Data *DetectResponseData `json:"data"`
11-
}
12-
13-
// DetectResponseData contains language detection response data
14-
type DetectResponseData struct {
15-
Detections []*DetectionResult `json:"detections"`
16-
}
17-
1810
// DetectionResult is single language detection result
1911
type DetectionResult struct {
20-
Language string `json:"language"`
21-
Reliable bool `json:"isReliable"`
22-
Confidence float32 `json:"confidence"`
12+
Language string `json:"language"`
13+
Score float64 `json:"score"`
2314
}
2415

2516
// DetectBatchRequest contains batch language detection request params
2617
type DetectBatchRequest struct {
2718
Query []string `json:"q"`
2819
}
2920

30-
// DetectBatchResponse is a resource batch containing language detection response
31-
type DetectBatchResponse struct {
32-
Data *DetectBatchResponseData `json:"data"`
33-
}
34-
35-
// DetectBatchResponseData contains batch language detection response data
36-
type DetectBatchResponseData struct {
37-
Detections [][]*DetectionResult `json:"detections"`
38-
}
39-
4021
// Detect executes language detection for a single text
41-
func (c *Client) Detect(in string) (out []*DetectionResult, err error) {
42-
var response DetectResponse
43-
err = c.post(nil, "detect", &DetectRequest{Query: in}, &response)
22+
func (c *Client) Detect(ctx context.Context, in string) (out []*DetectionResult, err error) {
23+
var response []*DetectionResult
24+
err = c.post(ctx, "detect", &DetectRequest{Query: in}, &response)
4425

4526
if err != nil {
4627
return nil, err
4728
}
4829

49-
return response.Data.Detections, err
30+
return response, err
5031
}
5132

5233
// DetectCode executes language detection for a single text and returns detected language code
53-
func (c *Client) DetectCode(in string) (out string, err error) {
54-
detections, err := c.Detect(in)
34+
func (c *Client) DetectCode(ctx context.Context, in string) (out string, err error) {
35+
detections, err := c.Detect(ctx, in)
5536

5637
if err != nil {
5738
return "", err
@@ -66,13 +47,13 @@ func (c *Client) DetectCode(in string) (out string, err error) {
6647

6748
// DetectBatch executes language detection with multiple texts.
6849
// It is significantly faster than doing a separate request for each text indivdually.
69-
func (c *Client) DetectBatch(in []string) (out [][]*DetectionResult, err error) {
70-
var response DetectBatchResponse
71-
err = c.post(nil, "detect", &DetectBatchRequest{Query: in}, &response)
50+
func (c *Client) DetectBatch(ctx context.Context, in []string) (out [][]*DetectionResult, err error) {
51+
var response [][]*DetectionResult
52+
err = c.post(ctx, "detect-batch", &DetectBatchRequest{Query: in}, &response)
7253

7354
if err != nil {
7455
return nil, err
7556
}
7657

77-
return response.Data.Detections, err
58+
return response, err
7859
}

detect_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,39 @@
11
package detectlanguage_test
22

33
import (
4+
"context"
45
"testing"
56

67
"github.com/stretchr/testify/assert"
78
)
89

910
func TestDetect(t *testing.T) {
10-
detections, err := client.Detect("labas rytas")
11+
detections, err := client.Detect(context.TODO(), "labas rytas")
1112

1213
if assert.NoError(t, err) {
1314
assert.Equal(t, "lt", detections[0].Language)
14-
assert.True(t, detections[0].Reliable)
15-
assert.Greater(t, detections[0].Confidence, float32(0))
15+
assert.Greater(t, detections[0].Score, float64(0))
1616
}
1717
}
1818

1919
func TestDetectCode(t *testing.T) {
20-
code, err := client.DetectCode("labas rytas")
20+
code, err := client.DetectCode(context.TODO(), "labas rytas")
2121

2222
if assert.NoError(t, err) {
2323
assert.Equal(t, "lt", code)
2424
}
2525
}
2626

2727
func TestDetectCodeFailure(t *testing.T) {
28-
code, err := client.DetectCode("")
28+
code, err := client.DetectCode(context.TODO(), " ")
2929

3030
assert.EqualError(t, err, "Language not detected")
3131
assert.Equal(t, code, "")
3232
}
3333

3434
func TestDetectBatch(t *testing.T) {
3535
query := []string{"labas rytas", "good morning"}
36-
detections, err := client.DetectBatch(query)
36+
detections, err := client.DetectBatch(context.TODO(), query)
3737

3838
if assert.NoError(t, err) {
3939
assert.Equal(t, "lt", detections[0][0].Language)

languages.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package detectlanguage
22

3+
import "context"
4+
35
// Language is the resource representing language
46
type Language struct {
57
Code string `json:"code"`
68
Name string `json:"name"`
79
}
810

911
// Languages retrieves the list of supported languages
10-
func (c *Client) Languages() (out []*Language, err error) {
11-
err = c.get(nil, "languages", &out)
12+
func (c *Client) Languages(ctx context.Context) (out []*Language, err error) {
13+
err = c.get(ctx, "languages", &out)
1214
return
1315
}

languages_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package detectlanguage_test
22

33
import (
4+
"context"
45
"testing"
56

67
"github.com/stretchr/testify/assert"
78
)
89

910
func TestLanguages(t *testing.T) {
10-
languages, err := client.Languages()
11+
languages, err := client.Languages(context.TODO())
1112

1213
if assert.NoError(t, err) {
1314
assert.NotEmpty(t, languages[0].Code)

version.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
package detectlanguage
22

33
// Version is the API client version
4-
const Version = "1.0.1"
4+
const Version = "2.0.0"

0 commit comments

Comments
 (0)