From 1116adf10a3d0668cc9a734ae7fc2cdf0e513b15 Mon Sep 17 00:00:00 2001 From: Kryvchun Date: Mon, 23 Jan 2023 13:04:44 +0200 Subject: [PATCH 1/2] refactor: support context --- README.md | 4 +++- examples/simple.go | 5 ++++- oembed/oembed.go | 11 ++++++++--- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index d4588e8..a6d636e 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,8 @@ import ( ) func main() { + ctx := context.Background() + data, err := ioutil.ReadFile("../providers.json") if err != nil { @@ -55,7 +57,7 @@ func main() { item := oe.FindItem(url) if item != nil { - info, err := item.FetchOembed(oembed.Options{URL: url}) + info, err := item.FetchOembedCtx(ctx, oembed.Options{URL: url}) if err != nil { fmt.Printf("An error occured: %s\n", err.Error()) } else { diff --git a/examples/simple.go b/examples/simple.go index db37fc5..71fe6f0 100644 --- a/examples/simple.go +++ b/examples/simple.go @@ -3,6 +3,7 @@ package main import ( "bufio" "bytes" + "context" "fmt" "io/ioutil" "net/url" @@ -13,6 +14,8 @@ import ( ) func main() { + ctx := context.Background() + data, err := ioutil.ReadFile("../providers.json") if err != nil { @@ -39,7 +42,7 @@ func main() { item := oe.FindItem(url) if item != nil { - info, err := item.FetchOembed(oembed.Options{URL: url, AcceptLanguage: "en-us", ExtraOpts: extras}) + info, err := item.FetchOembedCtx(ctx, oembed.Options{URL: url, AcceptLanguage: "en-us", ExtraOpts: extras}) if err != nil { fmt.Printf("An error occured: %s\n", err.Error()) } else { diff --git a/oembed/oembed.go b/oembed/oembed.go index 636dd46..a8d3115 100644 --- a/oembed/oembed.go +++ b/oembed/oembed.go @@ -1,6 +1,7 @@ package oembed import ( + "context" "encoding/json" "fmt" "io" @@ -98,6 +99,11 @@ func (item *Item) parseOembed(u string, resp *http.Response) (*Info, error) { // FetchOembed return oembed info from an url containing it func (item *Item) FetchOembed(opts Options) (*Info, error) { + return item.FetchOembedWithContext(context.Background(), opts) +} + +// FetchOembedWithContext return oembed info from an url containing it +func (item *Item) FetchOembedWithContext(ctx context.Context, opts Options) (*Info, error) { resURL := item.ComposeURL(opts.URL) params := url.Values{} @@ -118,7 +124,7 @@ func (item *Item) FetchOembed(opts Options) (*Info, error) { resURL = fmt.Sprintf("%s&%s", resURL, opts.ExtraOpts.Encode()) } - req, err := http.NewRequest("GET", resURL, nil) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, resURL, nil) if err != nil { return nil, err @@ -132,8 +138,7 @@ func (item *Item) FetchOembed(opts Options) (*Info, error) { if opts.Client != nil { resp, err = opts.Client.Do(req) } else { - client := &http.Client{} - resp, err = client.Do(req) + resp, err = http.DefaultClient.Do(req) } if err != nil { From f3fc2b9cad3dc5e89bc981e0d6ef437f4a24e8e3 Mon Sep 17 00:00:00 2001 From: Kryvchun Date: Mon, 23 Jan 2023 13:14:30 +0200 Subject: [PATCH 2/2] refactor: update examples --- README.md | 6 +++++- examples/simple.go | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a6d636e..d3a4653 100644 --- a/README.md +++ b/README.md @@ -22,8 +22,10 @@ package main import ( "bufio" "bytes" + "context" "fmt" "io/ioutil" + "net/url" "os" "strings" @@ -42,6 +44,8 @@ func main() { oe := oembed.NewOembed() oe.ParseProviders(bytes.NewReader(data)) + extras := url.Values{"autoplay": []string{"1"}} + for { reader := bufio.NewReader(os.Stdin) @@ -57,7 +61,7 @@ func main() { item := oe.FindItem(url) if item != nil { - info, err := item.FetchOembedCtx(ctx, oembed.Options{URL: url}) + info, err := item.FetchOembedWithContext(ctx, oembed.Options{URL: url, AcceptLanguage: "en-us", ExtraOpts: extras}) if err != nil { fmt.Printf("An error occured: %s\n", err.Error()) } else { diff --git a/examples/simple.go b/examples/simple.go index 71fe6f0..e365611 100644 --- a/examples/simple.go +++ b/examples/simple.go @@ -42,7 +42,7 @@ func main() { item := oe.FindItem(url) if item != nil { - info, err := item.FetchOembedCtx(ctx, oembed.Options{URL: url, AcceptLanguage: "en-us", ExtraOpts: extras}) + info, err := item.FetchOembedWithContext(ctx, oembed.Options{URL: url, AcceptLanguage: "en-us", ExtraOpts: extras}) if err != nil { fmt.Printf("An error occured: %s\n", err.Error()) } else {