<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="airquality_v1.html">Air Quality API</a> . <a href="airquality_v1.currentConditions.html">currentConditions</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#lookup">lookup(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">The Current Conditions endpoint provides hourly air quality information in more than 100 countries, up to a 500 x 500 meters resolution. Includes over 70 local indexes and global air quality index and categories.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="lookup">lookup(body=None, x__xgafv=None)</code>
  <pre>The Current Conditions endpoint provides hourly air quality information in more than 100 countries, up to a 500 x 500 meters resolution. Includes over 70 local indexes and global air quality index and categories.

Args:
  body: object, The request body.
    The object takes the form of:

{ # The request definition of the air quality current conditions.
  &quot;customLocalAqis&quot;: [ # Optional. Expresses a &#x27;country/region to AQI&#x27; relationship. Pairs a country/region with a desired AQI so that air quality data that is required for that country/region will be displayed according to the chosen AQI. This parameter can be used to specify a non-default AQI for a given country, for example, to get the US EPA index for Canada rather than the default index for Canada.
    { # Expresses a &#x27;country/region to AQI&#x27; relationship. Pairs a country/region with a desired AQI so that air quality data that is required for that country/region will be displayed according to the chosen AQI.
      &quot;aqi&quot;: &quot;A String&quot;, # The AQI to associate the country/region with. Value should be a [valid index](/maps/documentation/air-quality/laqis) code.
      &quot;regionCode&quot;: &quot;A String&quot;, # The country/region requiring the custom AQI. Value should be provided using [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) code.
    },
  ],
  &quot;extraComputations&quot;: [ # Optional. Additional features that can be optionally enabled. Specifying extra computations will result in the relevant elements and fields to be returned in the response.
    &quot;A String&quot;,
  ],
  &quot;languageCode&quot;: &quot;A String&quot;, # Optional. Allows the client to choose the language for the response. If data cannot be provided for that language the API uses the closest match. Allowed values rely on the IETF standard. Default value is en.
  &quot;location&quot;: { # An object that represents a latitude/longitude pair. This is expressed as a pair of doubles to represent degrees latitude and degrees longitude. Unless specified otherwise, this object must conform to the WGS84 standard. Values must be within normalized ranges. # Required. The longitude and latitude from which the API looks for air quality current conditions data.
    &quot;latitude&quot;: 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
    &quot;longitude&quot;: 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
  },
  &quot;uaqiColorPalette&quot;: &quot;A String&quot;, # Optional. Determines the color palette used for data provided by the &#x27;Universal Air Quality Index&#x27; (UAQI). This color palette is relevant just for UAQI, other AQIs have a predetermined color palette that can&#x27;t be controlled.
  &quot;universalAqi&quot;: True or False, # Optional. If set to true, the Universal AQI will be included in the &#x27;indexes&#x27; field of the response. Default value is true.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;dateTime&quot;: &quot;A String&quot;, # A rounded down timestamp in RFC3339 UTC &quot;Zulu&quot; format, with nanosecond resolution and up to nine fractional digits. For example: &quot;2014-10-02T15:00:00Z&quot;.
  &quot;healthRecommendations&quot;: { # Health recommendations for different population groups in a free text format. The recommendations are derived from their associated air quality conditions. # Health advice and recommended actions related to the reported air quality conditions. Recommendations are tailored differently for populations at risk, groups with greater sensitivities to pollutants, and the general population.
    &quot;athletes&quot;: &quot;A String&quot;, # Sports and other strenuous outdoor activities.
    &quot;children&quot;: &quot;A String&quot;, # Younger populations including children, toddlers, and babies.
    &quot;elderly&quot;: &quot;A String&quot;, # Retirees and people older than the general population.
    &quot;generalPopulation&quot;: &quot;A String&quot;, # No specific sensitivities.
    &quot;heartDiseasePopulation&quot;: &quot;A String&quot;, # Heart and circulatory system diseases.
    &quot;lungDiseasePopulation&quot;: &quot;A String&quot;, # Respiratory related problems and asthma suffers.
    &quot;pregnantWomen&quot;: &quot;A String&quot;, # Women at all stages of pregnancy.
  },
  &quot;indexes&quot;: [ # Based on the request parameters, this list will include (up to) two air quality indexes: - Universal AQI. Will be returned if the universalAqi boolean is set to true. - Local AQI. Will be returned if the LOCAL_AQI extra computation is specified.
    { # The basic object for representing different air quality metrics. When brought together, these metrics provide a snapshot about the current air quality conditions. There are multiple indexes in the world serving different purposes and groups interested in measuring different aspects of air quality.
      &quot;aqi&quot;: 42, #  The index&#x27;s numeric score. Examples: 10, 100. The value is not normalized and should only be interpreted in the context of its related air-quality index. For non-numeric indexes, this field will not be returned. Note: This field should be used for calculations, graph display, etc. For displaying the index score, you should use the AQI display field.
      &quot;aqiDisplay&quot;: &quot;A String&quot;, # Textual representation of the index numeric score, that may include prefix or suffix symbols, which usually represents the worst index score. Example: &gt;100 or 10+. Note: This field should be used when you want to display the index score. For non-numeric indexes, this field is empty.
      &quot;category&quot;: &quot;A String&quot;, # Textual classification of the index numeric score interpretation. For example: &quot;Excellent air quality&quot;.
      &quot;code&quot;: &quot;A String&quot;, # The index&#x27;s code. This field represents the index for programming purposes by using snake case instead of spaces. Examples: &quot;uaqi&quot;, &quot;fra_atmo&quot;.
      &quot;color&quot;: { # Represents a color in the RGBA color space. This representation is designed for simplicity of conversion to and from color representations in various languages over compactness. For example, the fields of this representation can be trivially provided to the constructor of `java.awt.Color` in Java; it can also be trivially provided to UIColor&#x27;s `+colorWithRed:green:blue:alpha` method in iOS; and, with just a little work, it can be easily formatted into a CSS `rgba()` string in JavaScript. This reference page doesn&#x27;t have information about the absolute color space that should be used to interpret the RGB value—for example, sRGB, Adobe RGB, DCI-P3, and BT.2020. By default, applications should assume the sRGB color space. When color equality needs to be decided, implementations, unless documented otherwise, treat two colors as equal if all their red, green, blue, and alpha values each differ by at most `1e-5`. Example (Java): import com.google.type.Color; // ... public static java.awt.Color fromProto(Color protocolor) { float alpha = protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue(), alpha); } public static Color toProto(java.awt.Color color) { float red = (float) color.getRed(); float green = (float) color.getGreen(); float blue = (float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) { result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / denominator) .build()); } return resultBuilder.build(); } // ... Example (iOS / Obj-C): // ... static UIColor* fromProto(Color* protocolor) { float red = [protocolor red]; float green = [protocolor green]; float blue = [protocolor blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if (alpha_wrapper != nil) { alpha = [alpha_wrapper value]; } return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; } static Color* toProto(UIColor* color) { CGFloat red, green, blue, alpha; if (![color getRed:&amp;red green:&amp;green blue:&amp;blue alpha:&amp;alpha]) { return nil; } Color* result = [[Color alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue:blue]; if (alpha &lt;= 0.9999) { [result setAlpha:floatWrapperWithValue(alpha)]; } [result autorelease]; return result; } // ... Example (JavaScript): // ... var protoToCssColor = function(rgb_color) { var redFrac = rgb_color.red || 0.0; var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); var blue = Math.floor(blueFrac * 255); if (!(&#x27;alpha&#x27; in rgb_color)) { return rgbToCssColor(red, green, blue); } var alphaFrac = rgb_color.alpha.value || 0.0; var rgbParams = [red, green, blue].join(&#x27;,&#x27;); return [&#x27;rgba(&#x27;, rgbParams, &#x27;,&#x27;, alphaFrac, &#x27;)&#x27;].join(&#x27;&#x27;); }; var rgbToCssColor = function(red, green, blue) { var rgbNumber = new Number((red &lt;&lt; 16) | (green &lt;&lt; 8) | blue); var hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; var resultBuilder = [&#x27;#&#x27;]; for (var i = 0; i &lt; missingZeros; i++) { resultBuilder.push(&#x27;0&#x27;); } resultBuilder.push(hexString); return resultBuilder.join(&#x27;&#x27;); }; // ... # The color used to represent the AQI numeric score.
        &quot;alpha&quot;: 3.14, # The fraction of this color that should be applied to the pixel. That is, the final pixel color is defined by the equation: `pixel color = alpha * (this color) + (1.0 - alpha) * (background color)` This means that a value of 1.0 corresponds to a solid color, whereas a value of 0.0 corresponds to a completely transparent color. This uses a wrapper message rather than a simple float scalar so that it is possible to distinguish between a default value and the value being unset. If omitted, this color object is rendered as a solid color (as if the alpha value had been explicitly given a value of 1.0).
        &quot;blue&quot;: 3.14, # The amount of blue in the color as a value in the interval [0, 1].
        &quot;green&quot;: 3.14, # The amount of green in the color as a value in the interval [0, 1].
        &quot;red&quot;: 3.14, # The amount of red in the color as a value in the interval [0, 1].
      },
      &quot;displayName&quot;: &quot;A String&quot;, # A human readable representation of the index name. Example: &quot;AQI (US)&quot;
      &quot;dominantPollutant&quot;: &quot;A String&quot;, # The chemical symbol of the dominant pollutant. For example: &quot;CO&quot;.
    },
  ],
  &quot;pollutants&quot;: [ # A list of pollutants affecting the location specified in the request. Note: This field will be returned only for requests that specified one or more of the following extra computations: POLLUTANT_ADDITIONAL_INFO, DOMINANT_POLLUTANT_CONCENTRATION, POLLUTANT_CONCENTRATION.
    { # Data regarding an air quality pollutant.
      &quot;additionalInfo&quot;: { # The emission sources and health effects of a given pollutant. # Additional information about the pollutant.
        &quot;effects&quot;: &quot;A String&quot;, # Text representing the pollutant&#x27;s main health effects.
        &quot;sources&quot;: &quot;A String&quot;, # Text representing the pollutant&#x27;s main emission sources.
      },
      &quot;code&quot;: &quot;A String&quot;, # The pollutant&#x27;s code name (for example, &quot;so2&quot;). For a list of supported pollutant codes, see [Reported pollutants](/maps/documentation/air-quality/pollutants#reported_pollutants).
      &quot;concentration&quot;: { # The concentration of a given pollutant in the air. # The pollutant&#x27;s concentration level measured by one of the standard air pollutation measure units.
        &quot;units&quot;: &quot;A String&quot;, # Units for measuring this pollutant concentration.
        &quot;value&quot;: 3.14, # Value of the pollutant concentration.
      },
      &quot;displayName&quot;: &quot;A String&quot;, # The pollutant&#x27;s display name. For example: &quot;NOx&quot;.
      &quot;fullName&quot;: &quot;A String&quot;, # The pollutant&#x27;s full name. For chemical compounds, this is the IUPAC name. Example: &quot;Sulfur Dioxide&quot;. For more information about the IUPAC names table, see https://iupac.org/what-we-do/periodic-table-of-elements/.
    },
  ],
  &quot;regionCode&quot;: &quot;A String&quot;, # The ISO_3166-1 alpha-2 code of the country/region corresponding to the location provided in the request. This field might be omitted from the response if the location provided in the request resides in a disputed territory.
}</pre>
</div>

</body></html>