1 // Copyright 2020 Google LLC. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Code generated file. DO NOT EDIT. 6 7 // Package pagespeedonline provides access to the PageSpeed Insights API. 8 // 9 // For product documentation, see: https://developers.google.com/speed/docs/insights/v2/getting-started 10 // 11 // # Creating a client 12 // 13 // Usage example: 14 // 15 // import "google.golang.org/api/pagespeedonline/v2" 16 // ... 17 // ctx := context.Background() 18 // pagespeedonlineService, err := pagespeedonline.NewService(ctx) 19 // 20 // In this example, Google Application Default Credentials are used for authentication. 21 // 22 // For information on how to create and obtain Application Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials. 23 // 24 // # Other authentication options 25 // 26 // To use an API key for authentication (note: some APIs do not support API keys), use option.WithAPIKey: 27 // 28 // pagespeedonlineService, err := pagespeedonline.NewService(ctx, option.WithAPIKey("AIza...")) 29 // 30 // To use an OAuth token (e.g., a user token obtained via a three-legged OAuth flow), use option.WithTokenSource: 31 // 32 // config := &oauth2.Config{...} 33 // // ... 34 // token, err := config.Exchange(ctx, ...) 35 // pagespeedonlineService, err := pagespeedonline.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token))) 36 // 37 // See https://godoc.org/google.golang.org/api/option/ for details on options. 38 package pagespeedonline // import "google.golang.org/api/pagespeedonline/v2" 39 40 import ( 41 "bytes" 42 "context" 43 "encoding/json" 44 "errors" 45 "fmt" 46 "io" 47 "net/http" 48 "net/url" 49 "strconv" 50 "strings" 51 52 googleapi "google.golang.org/api/googleapi" 53 gensupport "google.golang.org/api/internal/gensupport" 54 option "google.golang.org/api/option" 55 internaloption "google.golang.org/api/option/internaloption" 56 htransport "google.golang.org/api/transport/http" 57 ) 58 59 // Always reference these packages, just in case the auto-generated code 60 // below doesn't. 61 var _ = bytes.NewBuffer 62 var _ = strconv.Itoa 63 var _ = fmt.Sprintf 64 var _ = json.NewDecoder 65 var _ = io.Copy 66 var _ = url.Parse 67 var _ = gensupport.MarshalJSON 68 var _ = googleapi.Version 69 var _ = errors.New 70 var _ = strings.Replace 71 var _ = context.Canceled 72 var _ = internaloption.WithDefaultEndpoint 73 74 const apiId = "pagespeedonline:v2" 75 const apiName = "pagespeedonline" 76 const apiVersion = "v2" 77 const basePath = "https://www.googleapis.com/pagespeedonline/v2/" 78 79 // NewService creates a new Service. 80 func NewService(ctx context.Context, opts ...option.ClientOption) (*Service, error) { 81 opts = append(opts, internaloption.WithDefaultEndpoint(basePath)) 82 client, endpoint, err := htransport.NewClient(ctx, opts...) 83 if err != nil { 84 return nil, err 85 } 86 s, err := New(client) 87 if err != nil { 88 return nil, err 89 } 90 if endpoint != "" { 91 s.BasePath = endpoint 92 } 93 return s, nil 94 } 95 96 // New creates a new Service. It uses the provided http.Client for requests. 97 // 98 // Deprecated: please use NewService instead. 99 // To provide a custom HTTP client, use option.WithHTTPClient. 100 // If you are using google.golang.org/api/googleapis/transport.APIKey, use option.WithAPIKey with NewService instead. 101 func New(client *http.Client) (*Service, error) { 102 if client == nil { 103 return nil, errors.New("client is nil") 104 } 105 s := &Service{client: client, BasePath: basePath} 106 s.Pagespeedapi = NewPagespeedapiService(s) 107 return s, nil 108 } 109 110 type Service struct { 111 client *http.Client 112 BasePath string // API endpoint base URL 113 UserAgent string // optional additional User-Agent fragment 114 115 Pagespeedapi *PagespeedapiService 116 } 117 118 func (s *Service) userAgent() string { 119 if s.UserAgent == "" { 120 return googleapi.UserAgent 121 } 122 return googleapi.UserAgent + " " + s.UserAgent 123 } 124 125 func NewPagespeedapiService(s *Service) *PagespeedapiService { 126 rs := &PagespeedapiService{s: s} 127 return rs 128 } 129 130 type PagespeedapiService struct { 131 s *Service 132 } 133 134 type PagespeedApiFormatStringV2 struct { 135 // Args: List of arguments for the format string. 136 Args []*PagespeedApiFormatStringV2Args `json:"args,omitempty"` 137 138 // Format: A localized format string with {{FOO}} placeholders, where 139 // 'FOO' is the key of the argument whose value should be substituted. 140 // For HYPERLINK arguments, the format string will instead contain 141 // {{BEGIN_FOO}} and {{END_FOO}} for the argument with key 'FOO'. 142 Format string `json:"format,omitempty"` 143 144 // ForceSendFields is a list of field names (e.g. "Args") to 145 // unconditionally include in API requests. By default, fields with 146 // empty values are omitted from API requests. However, any non-pointer, 147 // non-interface field appearing in ForceSendFields will be sent to the 148 // server regardless of whether the field is empty or not. This may be 149 // used to include empty fields in Patch requests. 150 ForceSendFields []string `json:"-"` 151 152 // NullFields is a list of field names (e.g. "Args") to include in API 153 // requests with the JSON null value. By default, fields with empty 154 // values are omitted from API requests. However, any field with an 155 // empty value appearing in NullFields will be sent to the server as 156 // null. It is an error if a field in this list has a non-empty value. 157 // This may be used to include null fields in Patch requests. 158 NullFields []string `json:"-"` 159 } 160 161 func (s *PagespeedApiFormatStringV2) MarshalJSON() ([]byte, error) { 162 type NoMethod PagespeedApiFormatStringV2 163 raw := NoMethod(*s) 164 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 165 } 166 167 type PagespeedApiFormatStringV2Args struct { 168 // Key: The placeholder key for this arg, as a string. 169 Key string `json:"key,omitempty"` 170 171 // Rects: The screen rectangles being referred to, with dimensions 172 // measured in CSS pixels. This is only ever used for SNAPSHOT_RECT 173 // arguments. If this is absent for a SNAPSHOT_RECT argument, it means 174 // that that argument refers to the entire snapshot. 175 Rects []*PagespeedApiFormatStringV2ArgsRects `json:"rects,omitempty"` 176 177 // SecondaryRects: Secondary screen rectangles being referred to, with 178 // dimensions measured in CSS pixels. This is only ever used for 179 // SNAPSHOT_RECT arguments. 180 SecondaryRects []*PagespeedApiFormatStringV2ArgsSecondaryRects `json:"secondary_rects,omitempty"` 181 182 // Type: Type of argument. One of URL, STRING_LITERAL, INT_LITERAL, 183 // BYTES, DURATION, VERBATIM_STRING, PERCENTAGE, HYPERLINK, or 184 // SNAPSHOT_RECT. 185 Type string `json:"type,omitempty"` 186 187 // Value: Argument value, as a localized string. 188 Value string `json:"value,omitempty"` 189 190 // ForceSendFields is a list of field names (e.g. "Key") to 191 // unconditionally include in API requests. By default, fields with 192 // empty values are omitted from API requests. However, any non-pointer, 193 // non-interface field appearing in ForceSendFields will be sent to the 194 // server regardless of whether the field is empty or not. This may be 195 // used to include empty fields in Patch requests. 196 ForceSendFields []string `json:"-"` 197 198 // NullFields is a list of field names (e.g. "Key") to include in API 199 // requests with the JSON null value. By default, fields with empty 200 // values are omitted from API requests. However, any field with an 201 // empty value appearing in NullFields will be sent to the server as 202 // null. It is an error if a field in this list has a non-empty value. 203 // This may be used to include null fields in Patch requests. 204 NullFields []string `json:"-"` 205 } 206 207 func (s *PagespeedApiFormatStringV2Args) MarshalJSON() ([]byte, error) { 208 type NoMethod PagespeedApiFormatStringV2Args 209 raw := NoMethod(*s) 210 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 211 } 212 213 type PagespeedApiFormatStringV2ArgsRects struct { 214 // Height: The height of the rect. 215 Height int64 `json:"height,omitempty"` 216 217 // Left: The left coordinate of the rect, in page coordinates. 218 Left int64 `json:"left,omitempty"` 219 220 // Top: The top coordinate of the rect, in page coordinates. 221 Top int64 `json:"top,omitempty"` 222 223 // Width: The width of the rect. 224 Width int64 `json:"width,omitempty"` 225 226 // ForceSendFields is a list of field names (e.g. "Height") to 227 // unconditionally include in API requests. By default, fields with 228 // empty values are omitted from API requests. However, any non-pointer, 229 // non-interface field appearing in ForceSendFields will be sent to the 230 // server regardless of whether the field is empty or not. This may be 231 // used to include empty fields in Patch requests. 232 ForceSendFields []string `json:"-"` 233 234 // NullFields is a list of field names (e.g. "Height") to include in API 235 // requests with the JSON null value. By default, fields with empty 236 // values are omitted from API requests. However, any field with an 237 // empty value appearing in NullFields will be sent to the server as 238 // null. It is an error if a field in this list has a non-empty value. 239 // This may be used to include null fields in Patch requests. 240 NullFields []string `json:"-"` 241 } 242 243 func (s *PagespeedApiFormatStringV2ArgsRects) MarshalJSON() ([]byte, error) { 244 type NoMethod PagespeedApiFormatStringV2ArgsRects 245 raw := NoMethod(*s) 246 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 247 } 248 249 type PagespeedApiFormatStringV2ArgsSecondaryRects struct { 250 // Height: The height of the rect. 251 Height int64 `json:"height,omitempty"` 252 253 // Left: The left coordinate of the rect, in page coordinates. 254 Left int64 `json:"left,omitempty"` 255 256 // Top: The top coordinate of the rect, in page coordinates. 257 Top int64 `json:"top,omitempty"` 258 259 // Width: The width of the rect. 260 Width int64 `json:"width,omitempty"` 261 262 // ForceSendFields is a list of field names (e.g. "Height") to 263 // unconditionally include in API requests. By default, fields with 264 // empty values are omitted from API requests. However, any non-pointer, 265 // non-interface field appearing in ForceSendFields will be sent to the 266 // server regardless of whether the field is empty or not. This may be 267 // used to include empty fields in Patch requests. 268 ForceSendFields []string `json:"-"` 269 270 // NullFields is a list of field names (e.g. "Height") to include in API 271 // requests with the JSON null value. By default, fields with empty 272 // values are omitted from API requests. However, any field with an 273 // empty value appearing in NullFields will be sent to the server as 274 // null. It is an error if a field in this list has a non-empty value. 275 // This may be used to include null fields in Patch requests. 276 NullFields []string `json:"-"` 277 } 278 279 func (s *PagespeedApiFormatStringV2ArgsSecondaryRects) MarshalJSON() ([]byte, error) { 280 type NoMethod PagespeedApiFormatStringV2ArgsSecondaryRects 281 raw := NoMethod(*s) 282 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 283 } 284 285 type PagespeedApiImageV2 struct { 286 // Data: Image data base64 encoded. 287 Data string `json:"data,omitempty"` 288 289 // Height: Height of screenshot in pixels. 290 Height int64 `json:"height,omitempty"` 291 292 // Key: Unique string key, if any, identifying this image. 293 Key string `json:"key,omitempty"` 294 295 // MimeType: Mime type of image data (e.g. "image/jpeg"). 296 MimeType string `json:"mime_type,omitempty"` 297 298 // PageRect: The region of the page that is captured by this image, with 299 // dimensions measured in CSS pixels. 300 PageRect *PagespeedApiImageV2PageRect `json:"page_rect,omitempty"` 301 302 // Width: Width of screenshot in pixels. 303 Width int64 `json:"width,omitempty"` 304 305 // ForceSendFields is a list of field names (e.g. "Data") to 306 // unconditionally include in API requests. By default, fields with 307 // empty values are omitted from API requests. However, any non-pointer, 308 // non-interface field appearing in ForceSendFields will be sent to the 309 // server regardless of whether the field is empty or not. This may be 310 // used to include empty fields in Patch requests. 311 ForceSendFields []string `json:"-"` 312 313 // NullFields is a list of field names (e.g. "Data") to include in API 314 // requests with the JSON null value. By default, fields with empty 315 // values are omitted from API requests. However, any field with an 316 // empty value appearing in NullFields will be sent to the server as 317 // null. It is an error if a field in this list has a non-empty value. 318 // This may be used to include null fields in Patch requests. 319 NullFields []string `json:"-"` 320 } 321 322 func (s *PagespeedApiImageV2) MarshalJSON() ([]byte, error) { 323 type NoMethod PagespeedApiImageV2 324 raw := NoMethod(*s) 325 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 326 } 327 328 // PagespeedApiImageV2PageRect: The region of the page that is captured 329 // by this image, with dimensions measured in CSS pixels. 330 type PagespeedApiImageV2PageRect struct { 331 // Height: The height of the rect. 332 Height int64 `json:"height,omitempty"` 333 334 // Left: The left coordinate of the rect, in page coordinates. 335 Left int64 `json:"left,omitempty"` 336 337 // Top: The top coordinate of the rect, in page coordinates. 338 Top int64 `json:"top,omitempty"` 339 340 // Width: The width of the rect. 341 Width int64 `json:"width,omitempty"` 342 343 // ForceSendFields is a list of field names (e.g. "Height") to 344 // unconditionally include in API requests. By default, fields with 345 // empty values are omitted from API requests. However, any non-pointer, 346 // non-interface field appearing in ForceSendFields will be sent to the 347 // server regardless of whether the field is empty or not. This may be 348 // used to include empty fields in Patch requests. 349 ForceSendFields []string `json:"-"` 350 351 // NullFields is a list of field names (e.g. "Height") to include in API 352 // requests with the JSON null value. By default, fields with empty 353 // values are omitted from API requests. However, any field with an 354 // empty value appearing in NullFields will be sent to the server as 355 // null. It is an error if a field in this list has a non-empty value. 356 // This may be used to include null fields in Patch requests. 357 NullFields []string `json:"-"` 358 } 359 360 func (s *PagespeedApiImageV2PageRect) MarshalJSON() ([]byte, error) { 361 type NoMethod PagespeedApiImageV2PageRect 362 raw := NoMethod(*s) 363 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 364 } 365 366 type Result struct { 367 // CaptchaResult: The captcha verify result 368 CaptchaResult string `json:"captchaResult,omitempty"` 369 370 // FormattedResults: Localized PageSpeed results. Contains a ruleResults 371 // entry for each PageSpeed rule instantiated and run by the server. 372 FormattedResults *ResultFormattedResults `json:"formattedResults,omitempty"` 373 374 // Id: Canonicalized and final URL for the document, after following 375 // page redirects (if any). 376 Id string `json:"id,omitempty"` 377 378 // InvalidRules: List of rules that were specified in the request, but 379 // which the server did not know how to instantiate. 380 InvalidRules []string `json:"invalidRules,omitempty"` 381 382 // Kind: Kind of result. 383 Kind string `json:"kind,omitempty"` 384 385 // PageStats: Summary statistics for the page, such as number of 386 // JavaScript bytes, number of HTML bytes, etc. 387 PageStats *ResultPageStats `json:"pageStats,omitempty"` 388 389 // ResponseCode: Response code for the document. 200 indicates a normal 390 // page load. 4xx/5xx indicates an error. 391 ResponseCode int64 `json:"responseCode,omitempty"` 392 393 // RuleGroups: A map with one entry for each rule group in these 394 // results. 395 RuleGroups map[string]ResultRuleGroups `json:"ruleGroups,omitempty"` 396 397 // Screenshot: Base64-encoded screenshot of the page that was analyzed. 398 Screenshot *PagespeedApiImageV2 `json:"screenshot,omitempty"` 399 400 // Title: Title of the page, as displayed in the browser's title bar. 401 Title string `json:"title,omitempty"` 402 403 // Version: The version of PageSpeed used to generate these results. 404 Version *ResultVersion `json:"version,omitempty"` 405 406 // ServerResponse contains the HTTP response code and headers from the 407 // server. 408 googleapi.ServerResponse `json:"-"` 409 410 // ForceSendFields is a list of field names (e.g. "CaptchaResult") to 411 // unconditionally include in API requests. By default, fields with 412 // empty values are omitted from API requests. However, any non-pointer, 413 // non-interface field appearing in ForceSendFields will be sent to the 414 // server regardless of whether the field is empty or not. This may be 415 // used to include empty fields in Patch requests. 416 ForceSendFields []string `json:"-"` 417 418 // NullFields is a list of field names (e.g. "CaptchaResult") to include 419 // in API requests with the JSON null value. By default, fields with 420 // empty values are omitted from API requests. However, any field with 421 // an empty value appearing in NullFields will be sent to the server as 422 // null. It is an error if a field in this list has a non-empty value. 423 // This may be used to include null fields in Patch requests. 424 NullFields []string `json:"-"` 425 } 426 427 func (s *Result) MarshalJSON() ([]byte, error) { 428 type NoMethod Result 429 raw := NoMethod(*s) 430 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 431 } 432 433 // ResultFormattedResults: Localized PageSpeed results. Contains a 434 // ruleResults entry for each PageSpeed rule instantiated and run by the 435 // server. 436 type ResultFormattedResults struct { 437 // Locale: The locale of the formattedResults, e.g. "en_US". 438 Locale string `json:"locale,omitempty"` 439 440 // RuleResults: Dictionary of formatted rule results, with one entry for 441 // each PageSpeed rule instantiated and run by the server. 442 RuleResults map[string]ResultFormattedResultsRuleResults `json:"ruleResults,omitempty"` 443 444 // ForceSendFields is a list of field names (e.g. "Locale") to 445 // unconditionally include in API requests. By default, fields with 446 // empty values are omitted from API requests. However, any non-pointer, 447 // non-interface field appearing in ForceSendFields will be sent to the 448 // server regardless of whether the field is empty or not. This may be 449 // used to include empty fields in Patch requests. 450 ForceSendFields []string `json:"-"` 451 452 // NullFields is a list of field names (e.g. "Locale") to include in API 453 // requests with the JSON null value. By default, fields with empty 454 // values are omitted from API requests. However, any field with an 455 // empty value appearing in NullFields will be sent to the server as 456 // null. It is an error if a field in this list has a non-empty value. 457 // This may be used to include null fields in Patch requests. 458 NullFields []string `json:"-"` 459 } 460 461 func (s *ResultFormattedResults) MarshalJSON() ([]byte, error) { 462 type NoMethod ResultFormattedResults 463 raw := NoMethod(*s) 464 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 465 } 466 467 // ResultFormattedResultsRuleResults: The enum-like identifier for this 468 // rule. For instance "EnableKeepAlive" or "AvoidCssImport". Not 469 // localized. 470 type ResultFormattedResultsRuleResults struct { 471 // Groups: List of rule groups that this rule belongs to. Each entry in 472 // the list is one of "SPEED" or "USABILITY". 473 Groups []string `json:"groups,omitempty"` 474 475 // LocalizedRuleName: Localized name of the rule, intended for 476 // presentation to a user. 477 LocalizedRuleName string `json:"localizedRuleName,omitempty"` 478 479 // RuleImpact: The impact (unbounded floating point value) that 480 // implementing the suggestions for this rule would have on making the 481 // page faster. Impact is comparable between rules to determine which 482 // rule's suggestions would have a higher or lower impact on making a 483 // page faster. For instance, if enabling compression would save 1MB, 484 // while optimizing images would save 500kB, the enable compression rule 485 // would have 2x the impact of the image optimization rule, all other 486 // things being equal. 487 RuleImpact float64 `json:"ruleImpact,omitempty"` 488 489 // Summary: A brief summary description for the rule, indicating at a 490 // high level what should be done to follow the rule and what benefit 491 // can be gained by doing so. 492 Summary *PagespeedApiFormatStringV2 `json:"summary,omitempty"` 493 494 // UrlBlocks: List of blocks of URLs. Each block may contain a heading 495 // and a list of URLs. Each URL may optionally include additional 496 // details. 497 UrlBlocks []*ResultFormattedResultsRuleResultsUrlBlocks `json:"urlBlocks,omitempty"` 498 499 // ForceSendFields is a list of field names (e.g. "Groups") to 500 // unconditionally include in API requests. By default, fields with 501 // empty values are omitted from API requests. However, any non-pointer, 502 // non-interface field appearing in ForceSendFields will be sent to the 503 // server regardless of whether the field is empty or not. This may be 504 // used to include empty fields in Patch requests. 505 ForceSendFields []string `json:"-"` 506 507 // NullFields is a list of field names (e.g. "Groups") to include in API 508 // requests with the JSON null value. By default, fields with empty 509 // values are omitted from API requests. However, any field with an 510 // empty value appearing in NullFields will be sent to the server as 511 // null. It is an error if a field in this list has a non-empty value. 512 // This may be used to include null fields in Patch requests. 513 NullFields []string `json:"-"` 514 } 515 516 func (s *ResultFormattedResultsRuleResults) MarshalJSON() ([]byte, error) { 517 type NoMethod ResultFormattedResultsRuleResults 518 raw := NoMethod(*s) 519 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 520 } 521 522 func (s *ResultFormattedResultsRuleResults) UnmarshalJSON(data []byte) error { 523 type NoMethod ResultFormattedResultsRuleResults 524 var s1 struct { 525 RuleImpact gensupport.JSONFloat64 `json:"ruleImpact"` 526 *NoMethod 527 } 528 s1.NoMethod = (*NoMethod)(s) 529 if err := json.Unmarshal(data, &s1); err != nil { 530 return err 531 } 532 s.RuleImpact = float64(s1.RuleImpact) 533 return nil 534 } 535 536 type ResultFormattedResultsRuleResultsUrlBlocks struct { 537 // Header: Heading to be displayed with the list of URLs. 538 Header *PagespeedApiFormatStringV2 `json:"header,omitempty"` 539 540 // Urls: List of entries that provide information about URLs in the url 541 // block. Optional. 542 Urls []*ResultFormattedResultsRuleResultsUrlBlocksUrls `json:"urls,omitempty"` 543 544 // ForceSendFields is a list of field names (e.g. "Header") to 545 // unconditionally include in API requests. By default, fields with 546 // empty values are omitted from API requests. However, any non-pointer, 547 // non-interface field appearing in ForceSendFields will be sent to the 548 // server regardless of whether the field is empty or not. This may be 549 // used to include empty fields in Patch requests. 550 ForceSendFields []string `json:"-"` 551 552 // NullFields is a list of field names (e.g. "Header") to include in API 553 // requests with the JSON null value. By default, fields with empty 554 // values are omitted from API requests. However, any field with an 555 // empty value appearing in NullFields will be sent to the server as 556 // null. It is an error if a field in this list has a non-empty value. 557 // This may be used to include null fields in Patch requests. 558 NullFields []string `json:"-"` 559 } 560 561 func (s *ResultFormattedResultsRuleResultsUrlBlocks) MarshalJSON() ([]byte, error) { 562 type NoMethod ResultFormattedResultsRuleResultsUrlBlocks 563 raw := NoMethod(*s) 564 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 565 } 566 567 type ResultFormattedResultsRuleResultsUrlBlocksUrls struct { 568 // Details: List of entries that provide additional details about a 569 // single URL. Optional. 570 Details []*PagespeedApiFormatStringV2 `json:"details,omitempty"` 571 572 // Result: A format string that gives information about the URL, and a 573 // list of arguments for that format string. 574 Result *PagespeedApiFormatStringV2 `json:"result,omitempty"` 575 576 // ForceSendFields is a list of field names (e.g. "Details") to 577 // unconditionally include in API requests. By default, fields with 578 // empty values are omitted from API requests. However, any non-pointer, 579 // non-interface field appearing in ForceSendFields will be sent to the 580 // server regardless of whether the field is empty or not. This may be 581 // used to include empty fields in Patch requests. 582 ForceSendFields []string `json:"-"` 583 584 // NullFields is a list of field names (e.g. "Details") to include in 585 // API requests with the JSON null value. By default, fields with empty 586 // values are omitted from API requests. However, any field with an 587 // empty value appearing in NullFields will be sent to the server as 588 // null. It is an error if a field in this list has a non-empty value. 589 // This may be used to include null fields in Patch requests. 590 NullFields []string `json:"-"` 591 } 592 593 func (s *ResultFormattedResultsRuleResultsUrlBlocksUrls) MarshalJSON() ([]byte, error) { 594 type NoMethod ResultFormattedResultsRuleResultsUrlBlocksUrls 595 raw := NoMethod(*s) 596 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 597 } 598 599 // ResultPageStats: Summary statistics for the page, such as number of 600 // JavaScript bytes, number of HTML bytes, etc. 601 type ResultPageStats struct { 602 // CssResponseBytes: Number of uncompressed response bytes for CSS 603 // resources on the page. 604 CssResponseBytes int64 `json:"cssResponseBytes,omitempty,string"` 605 606 // FlashResponseBytes: Number of response bytes for flash resources on 607 // the page. 608 FlashResponseBytes int64 `json:"flashResponseBytes,omitempty,string"` 609 610 // HtmlResponseBytes: Number of uncompressed response bytes for the main 611 // HTML document and all iframes on the page. 612 HtmlResponseBytes int64 `json:"htmlResponseBytes,omitempty,string"` 613 614 // ImageResponseBytes: Number of response bytes for image resources on 615 // the page. 616 ImageResponseBytes int64 `json:"imageResponseBytes,omitempty,string"` 617 618 // JavascriptResponseBytes: Number of uncompressed response bytes for JS 619 // resources on the page. 620 JavascriptResponseBytes int64 `json:"javascriptResponseBytes,omitempty,string"` 621 622 // NumberCssResources: Number of CSS resources referenced by the page. 623 NumberCssResources int64 `json:"numberCssResources,omitempty"` 624 625 // NumberHosts: Number of unique hosts referenced by the page. 626 NumberHosts int64 `json:"numberHosts,omitempty"` 627 628 // NumberJsResources: Number of JavaScript resources referenced by the 629 // page. 630 NumberJsResources int64 `json:"numberJsResources,omitempty"` 631 632 // NumberResources: Number of HTTP resources loaded by the page. 633 NumberResources int64 `json:"numberResources,omitempty"` 634 635 // NumberStaticResources: Number of static (i.e. cacheable) resources on 636 // the page. 637 NumberStaticResources int64 `json:"numberStaticResources,omitempty"` 638 639 // OtherResponseBytes: Number of response bytes for other resources on 640 // the page. 641 OtherResponseBytes int64 `json:"otherResponseBytes,omitempty,string"` 642 643 // TextResponseBytes: Number of uncompressed response bytes for text 644 // resources not covered by other statistics (i.e non-HTML, non-script, 645 // non-CSS resources) on the page. 646 TextResponseBytes int64 `json:"textResponseBytes,omitempty,string"` 647 648 // TotalRequestBytes: Total size of all request bytes sent by the page. 649 TotalRequestBytes int64 `json:"totalRequestBytes,omitempty,string"` 650 651 // ForceSendFields is a list of field names (e.g. "CssResponseBytes") to 652 // unconditionally include in API requests. By default, fields with 653 // empty values are omitted from API requests. However, any non-pointer, 654 // non-interface field appearing in ForceSendFields will be sent to the 655 // server regardless of whether the field is empty or not. This may be 656 // used to include empty fields in Patch requests. 657 ForceSendFields []string `json:"-"` 658 659 // NullFields is a list of field names (e.g. "CssResponseBytes") to 660 // include in API requests with the JSON null value. By default, fields 661 // with empty values are omitted from API requests. However, any field 662 // with an empty value appearing in NullFields will be sent to the 663 // server as null. It is an error if a field in this list has a 664 // non-empty value. This may be used to include null fields in Patch 665 // requests. 666 NullFields []string `json:"-"` 667 } 668 669 func (s *ResultPageStats) MarshalJSON() ([]byte, error) { 670 type NoMethod ResultPageStats 671 raw := NoMethod(*s) 672 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 673 } 674 675 // ResultRuleGroups: The name of this rule group: one of "SPEED" or 676 // "USABILITY". 677 type ResultRuleGroups struct { 678 // Score: The score (0-100) for this rule group, which indicates how 679 // much better a page could be in that category (e.g. how much faster, 680 // or how much more usable). A high score indicates little room for 681 // improvement, while a lower score indicates more room for improvement. 682 Score int64 `json:"score,omitempty"` 683 684 // ForceSendFields is a list of field names (e.g. "Score") to 685 // unconditionally include in API requests. By default, fields with 686 // empty values are omitted from API requests. However, any non-pointer, 687 // non-interface field appearing in ForceSendFields will be sent to the 688 // server regardless of whether the field is empty or not. This may be 689 // used to include empty fields in Patch requests. 690 ForceSendFields []string `json:"-"` 691 692 // NullFields is a list of field names (e.g. "Score") to include in API 693 // requests with the JSON null value. By default, fields with empty 694 // values are omitted from API requests. However, any field with an 695 // empty value appearing in NullFields will be sent to the server as 696 // null. It is an error if a field in this list has a non-empty value. 697 // This may be used to include null fields in Patch requests. 698 NullFields []string `json:"-"` 699 } 700 701 func (s *ResultRuleGroups) MarshalJSON() ([]byte, error) { 702 type NoMethod ResultRuleGroups 703 raw := NoMethod(*s) 704 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 705 } 706 707 // ResultVersion: The version of PageSpeed used to generate these 708 // results. 709 type ResultVersion struct { 710 // Major: The major version number of PageSpeed used to generate these 711 // results. 712 Major int64 `json:"major,omitempty"` 713 714 // Minor: The minor version number of PageSpeed used to generate these 715 // results. 716 Minor int64 `json:"minor,omitempty"` 717 718 // ForceSendFields is a list of field names (e.g. "Major") to 719 // unconditionally include in API requests. By default, fields with 720 // empty values are omitted from API requests. However, any non-pointer, 721 // non-interface field appearing in ForceSendFields will be sent to the 722 // server regardless of whether the field is empty or not. This may be 723 // used to include empty fields in Patch requests. 724 ForceSendFields []string `json:"-"` 725 726 // NullFields is a list of field names (e.g. "Major") to include in API 727 // requests with the JSON null value. By default, fields with empty 728 // values are omitted from API requests. However, any field with an 729 // empty value appearing in NullFields will be sent to the server as 730 // null. It is an error if a field in this list has a non-empty value. 731 // This may be used to include null fields in Patch requests. 732 NullFields []string `json:"-"` 733 } 734 735 func (s *ResultVersion) MarshalJSON() ([]byte, error) { 736 type NoMethod ResultVersion 737 raw := NoMethod(*s) 738 return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) 739 } 740 741 // method id "pagespeedonline.pagespeedapi.runpagespeed": 742 743 type PagespeedapiRunpagespeedCall struct { 744 s *Service 745 urlParams_ gensupport.URLParams 746 ifNoneMatch_ string 747 ctx_ context.Context 748 header_ http.Header 749 } 750 751 // Runpagespeed: Runs PageSpeed analysis on the page at the specified 752 // URL, and returns PageSpeed scores, a list of suggestions to make that 753 // page faster, and other information. 754 func (r *PagespeedapiService) Runpagespeed(url string) *PagespeedapiRunpagespeedCall { 755 c := &PagespeedapiRunpagespeedCall{s: r.s, urlParams_: make(gensupport.URLParams)} 756 c.urlParams_.Set("url", url) 757 return c 758 } 759 760 // FilterThirdPartyResources sets the optional parameter 761 // "filter_third_party_resources": Indicates if third party resources 762 // should be filtered out before PageSpeed analysis. 763 func (c *PagespeedapiRunpagespeedCall) FilterThirdPartyResources(filterThirdPartyResources bool) *PagespeedapiRunpagespeedCall { 764 c.urlParams_.Set("filter_third_party_resources", fmt.Sprint(filterThirdPartyResources)) 765 return c 766 } 767 768 // Locale sets the optional parameter "locale": The locale used to 769 // localize formatted results 770 func (c *PagespeedapiRunpagespeedCall) Locale(locale string) *PagespeedapiRunpagespeedCall { 771 c.urlParams_.Set("locale", locale) 772 return c 773 } 774 775 // Rule sets the optional parameter "rule": A PageSpeed rule to run; if 776 // none are given, all rules are run 777 func (c *PagespeedapiRunpagespeedCall) Rule(rule ...string) *PagespeedapiRunpagespeedCall { 778 c.urlParams_.SetMulti("rule", append([]string{}, rule...)) 779 return c 780 } 781 782 // Screenshot sets the optional parameter "screenshot": Indicates if 783 // binary data containing a screenshot should be included 784 func (c *PagespeedapiRunpagespeedCall) Screenshot(screenshot bool) *PagespeedapiRunpagespeedCall { 785 c.urlParams_.Set("screenshot", fmt.Sprint(screenshot)) 786 return c 787 } 788 789 // Strategy sets the optional parameter "strategy": The analysis 790 // strategy to use 791 // 792 // Possible values: 793 // 794 // "desktop" - Fetch and analyze the URL for desktop browsers 795 // "mobile" - Fetch and analyze the URL for mobile devices 796 func (c *PagespeedapiRunpagespeedCall) Strategy(strategy string) *PagespeedapiRunpagespeedCall { 797 c.urlParams_.Set("strategy", strategy) 798 return c 799 } 800 801 // Fields allows partial responses to be retrieved. See 802 // https://developers.google.com/gdata/docs/2.0/basics#PartialResponse 803 // for more information. 804 func (c *PagespeedapiRunpagespeedCall) Fields(s ...googleapi.Field) *PagespeedapiRunpagespeedCall { 805 c.urlParams_.Set("fields", googleapi.CombineFields(s)) 806 return c 807 } 808 809 // IfNoneMatch sets the optional parameter which makes the operation 810 // fail if the object's ETag matches the given value. This is useful for 811 // getting updates only after the object has changed since the last 812 // request. Use googleapi.IsNotModified to check whether the response 813 // error from Do is the result of In-None-Match. 814 func (c *PagespeedapiRunpagespeedCall) IfNoneMatch(entityTag string) *PagespeedapiRunpagespeedCall { 815 c.ifNoneMatch_ = entityTag 816 return c 817 } 818 819 // Context sets the context to be used in this call's Do method. Any 820 // pending HTTP request will be aborted if the provided context is 821 // canceled. 822 func (c *PagespeedapiRunpagespeedCall) Context(ctx context.Context) *PagespeedapiRunpagespeedCall { 823 c.ctx_ = ctx 824 return c 825 } 826 827 // Header returns an http.Header that can be modified by the caller to 828 // add HTTP headers to the request. 829 func (c *PagespeedapiRunpagespeedCall) Header() http.Header { 830 if c.header_ == nil { 831 c.header_ = make(http.Header) 832 } 833 return c.header_ 834 } 835 836 func (c *PagespeedapiRunpagespeedCall) doRequest(alt string) (*http.Response, error) { 837 reqHeaders := make(http.Header) 838 reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20200514") 839 for k, v := range c.header_ { 840 reqHeaders[k] = v 841 } 842 reqHeaders.Set("User-Agent", c.s.userAgent()) 843 if c.ifNoneMatch_ != "" { 844 reqHeaders.Set("If-None-Match", c.ifNoneMatch_) 845 } 846 var body io.Reader = nil 847 c.urlParams_.Set("alt", alt) 848 c.urlParams_.Set("prettyPrint", "false") 849 urls := googleapi.ResolveRelative(c.s.BasePath, "runPagespeed") 850 urls += "?" + c.urlParams_.Encode() 851 req, err := http.NewRequest("GET", urls, body) 852 if err != nil { 853 return nil, err 854 } 855 req.Header = reqHeaders 856 return gensupport.SendRequest(c.ctx_, c.s.client, req) 857 } 858 859 // Do executes the "pagespeedonline.pagespeedapi.runpagespeed" call. 860 // Exactly one of *Result or error will be non-nil. Any non-2xx status 861 // code is an error. Response headers are in either 862 // *Result.ServerResponse.Header or (if a response was returned at all) 863 // in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to 864 // check whether the returned error was because http.StatusNotModified 865 // was returned. 866 func (c *PagespeedapiRunpagespeedCall) Do(opts ...googleapi.CallOption) (*Result, error) { 867 gensupport.SetOptions(c.urlParams_, opts...) 868 res, err := c.doRequest("json") 869 if res != nil && res.StatusCode == http.StatusNotModified { 870 if res.Body != nil { 871 res.Body.Close() 872 } 873 return nil, &googleapi.Error{ 874 Code: res.StatusCode, 875 Header: res.Header, 876 } 877 } 878 if err != nil { 879 return nil, err 880 } 881 defer googleapi.CloseBody(res) 882 if err := googleapi.CheckResponse(res); err != nil { 883 return nil, err 884 } 885 ret := &Result{ 886 ServerResponse: googleapi.ServerResponse{ 887 Header: res.Header, 888 HTTPStatusCode: res.StatusCode, 889 }, 890 } 891 target := &ret 892 if err := gensupport.DecodeResponse(target, res); err != nil { 893 return nil, err 894 } 895 return ret, nil 896 // { 897 // "description": "Runs PageSpeed analysis on the page at the specified URL, and returns PageSpeed scores, a list of suggestions to make that page faster, and other information.", 898 // "httpMethod": "GET", 899 // "id": "pagespeedonline.pagespeedapi.runpagespeed", 900 // "parameterOrder": [ 901 // "url" 902 // ], 903 // "parameters": { 904 // "filter_third_party_resources": { 905 // "default": "false", 906 // "description": "Indicates if third party resources should be filtered out before PageSpeed analysis.", 907 // "location": "query", 908 // "type": "boolean" 909 // }, 910 // "locale": { 911 // "description": "The locale used to localize formatted results", 912 // "location": "query", 913 // "pattern": "[a-zA-Z]+(_[a-zA-Z]+)?", 914 // "type": "string" 915 // }, 916 // "rule": { 917 // "description": "A PageSpeed rule to run; if none are given, all rules are run", 918 // "location": "query", 919 // "pattern": "[a-zA-Z]+", 920 // "repeated": true, 921 // "type": "string" 922 // }, 923 // "screenshot": { 924 // "default": "false", 925 // "description": "Indicates if binary data containing a screenshot should be included", 926 // "location": "query", 927 // "type": "boolean" 928 // }, 929 // "strategy": { 930 // "description": "The analysis strategy to use", 931 // "enum": [ 932 // "desktop", 933 // "mobile" 934 // ], 935 // "enumDescriptions": [ 936 // "Fetch and analyze the URL for desktop browsers", 937 // "Fetch and analyze the URL for mobile devices" 938 // ], 939 // "location": "query", 940 // "type": "string" 941 // }, 942 // "url": { 943 // "description": "The URL to fetch and analyze", 944 // "location": "query", 945 // "pattern": "(?i)http(s)?://.*", 946 // "required": true, 947 // "type": "string" 948 // } 949 // }, 950 // "path": "runPagespeed", 951 // "response": { 952 // "$ref": "Result" 953 // } 954 // } 955 956 } 957