|
1 | 1 | package main
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "encoding/json" |
4 | 5 | "errors"
|
5 | 6 | "io"
|
6 | 7 | "net/http"
|
@@ -118,7 +119,7 @@ func findByProps(u, p string) (string, error) {
|
118 | 119 | type PropOGVideoResolver struct{}
|
119 | 120 |
|
120 | 121 | func (PropOGVideoResolver) GetResolvableDomains() []string {
|
121 |
| - return []string{"gfycat.com", "www.gfycat.com"} |
| 122 | + return []string{} |
122 | 123 | }
|
123 | 124 |
|
124 | 125 | func (PropOGVideoResolver) ResolveURL(u string) (string, ImageEntry) {
|
@@ -150,20 +151,43 @@ func (PropOGImageResolver) GetRequest(u string) (*http.Response, error) {
|
150 | 151 | type RedgifsResolver struct{}
|
151 | 152 |
|
152 | 153 | func (RedgifsResolver) GetResolvableDomains() []string {
|
153 |
| - return []string{"redgifs.com", "www.redgifs.com", "v3.redgifs.com", "thumbs4.redgifs.com"} |
| 154 | + return []string{"redgifs.com", "www.redgifs.com", "v3.redgifs.com", "thumbs4.redgifs.com", "i.redgifs.com", "thumbs44.redgifs.com", "gfycat.com", "www.gfycat.com"} |
154 | 155 | }
|
155 | 156 |
|
| 157 | +const redgifs_auth = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczovL3d3dy5yZWRnaWZzLmNvbS8iLCJpYXQiOjE2NzczMDI0NjQsImV4cCI6MTY3NzM4ODg2NCwic3ViIjoiY2xpZW50LzE4MjNjMzFmN2QzLTc0NWEtNjU4OS0wMDA1LWQ4ZThmZTBhNDRjMiIsInNjb3BlcyI6InJlYWQiLCJ2YWxpZF9hZGRyIjoiMTI4LjExNC4yNTUuMjQ5IiwidmFsaWRfYWdlbnQiOiJNb3ppbGxhLzUuMCAoWDExOyBVYnVudHU7IExpbnV4IHg4Nl82NDsgcnY6MTA5LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvMTEwLjAiLCJyYXRlIjotMX0.ueRQcmHhOnb3azqvBj0j5rUonjuaW2D4iBl2SnC0a0gArGCPxEyi8Ia2EuYYDE0lZf214P7BBEy6NnQXinGj_BvEcvLR3s8-pWKu3KMrT-mA6Nod5UE07XTPP5HE-g36oD8kJw5djgDhxW4KKDIhHAwUdoimC6DWDbxERtJf04hDb1q-YKbPwEUiRbIVMsrtuDTceAnZV3cA2_Ij0vbcKEpNeqnEcmF2BmbS5DE_ATppykdUw7nN31N1dke7j2ybUGQ9zZKBaOGof_dJR7xABGgOVeDD0vONgX2OAA1HZIIirVEs0TZz4in-3bHWMhdXoKZaxH60-7AeFCdqd8em_w" |
| 158 | + |
156 | 159 | func (RedgifsResolver) ResolveURL(u string) (string, ImageEntry) {
|
157 |
| - if strings.Contains(u, "thumbs4.") { |
| 160 | + if strings.Contains(u, "thumbs4") { |
158 | 161 | return RESOLVE_FINAL, nil
|
159 | 162 | }
|
160 |
| - s, _ := findByProps(u, "og:image") |
161 |
| - if s != "" { |
162 |
| - return s, nil |
| 163 | + if strings.Contains(u, "i.redgifs") { |
| 164 | + r, _ := http.Head(u) |
| 165 | + if r == nil || r.StatusCode != 200 { |
| 166 | + return "", nil |
| 167 | + } |
| 168 | + u = r.Request.URL.String() |
163 | 169 | }
|
164 | 170 | ind := strings.LastIndexByte(u, '/')
|
165 |
| - s, _ = findByProps("https://www.redgifs.com/ifr"+u[ind:], "og:video") |
166 |
| - return s, nil |
| 171 | + req, _ := http.NewRequest("GET", "https://api.redgifs.com/v2/gifs/"+u[ind+1:], http.NoBody) |
| 172 | + req.Header.Set("Authorization", redgifs_auth) |
| 173 | + req.Header.Set("User-Agent", UserAgent) |
| 174 | + resp, err := http.DefaultClient.Do(req) |
| 175 | + if err != nil || resp.StatusCode/100 != 2 { |
| 176 | + return "", nil |
| 177 | + } |
| 178 | + data, err := io.ReadAll(resp.Body) |
| 179 | + if err != nil { |
| 180 | + return "", nil |
| 181 | + } |
| 182 | + var output struct { |
| 183 | + Gif struct { |
| 184 | + Urls struct { |
| 185 | + HD string |
| 186 | + } |
| 187 | + } |
| 188 | + } |
| 189 | + json.Unmarshal(data, &output) |
| 190 | + return output.Gif.Urls.HD, nil |
167 | 191 | }
|
168 | 192 |
|
169 | 193 | func (RedgifsResolver) GetRequest(u string) (*http.Response, error) {
|
|
0 commit comments